VC用指针修改另一程序内存数值提示内存提示不可写,该用什么代码实现?
我的DLL已注入到对象,用下面的代码提示出错,程序崩溃。求助!long*BuBu;BuBu=(long*)0x004508E4;*BuBu=158182075958831...
我的DLL已注入到对象,用下面的代码提示出错,程序崩溃。求助!
long *BuBu; BuBu=(long *)0x004508E4; *BuBu=15818207595883192297;
但是用OD或CE能直接修改! 展开
long *BuBu; BuBu=(long *)0x004508E4; *BuBu=15818207595883192297;
但是用OD或CE能直接修改! 展开
展开全部
你修改的是代码段?有写保护?难不成这是想写ring3的hook。
//取消内存保护
_asm
{
Push eax
Mov eax,CR0
And eax,0FFFEFFFFh
Mov CR0,eax
Pop eax
}
//重新开启内存保护
_asm
{
Push eax
Mov eax,CR0
Or eax NOT 0FFFEFFFFh
Mov CR0,eax
Pop eax
}
改写cr0去掉页面写保护试试。
//取消内存保护
_asm
{
Push eax
Mov eax,CR0
And eax,0FFFEFFFFh
Mov CR0,eax
Pop eax
}
//重新开启内存保护
_asm
{
Push eax
Mov eax,CR0
Or eax NOT 0FFFEFFFFh
Mov CR0,eax
Pop eax
}
改写cr0去掉页面写保护试试。
更多追问追答
追问
我用OD改或CE修改是没问题的,用OD查看了下改区段是不可写的。
用writeprocessmemoy这种形式也是能修改,但我DLL都注入了,不想用这种方法,想用指针赋值的形式,我回去试试你这种方法。
追答
OD和CE确实是能直接写没问题的,但是程序想写,就必须保证内存可写。至于更深层的原因,我也不清楚。
改CR0的WP位是驱动中用到的方式,我还真没在Ring3用过 ,应该有效吧 ·····Ring3是否有更安全的方式,不的而知。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
修改一个long类型么。
用VirtualProtect解除保护可破
DWORD nOldProt;
VirtualProtect((LPVOID)0x00450000, 4096, PAGE_EXECUTE_READWRITE, &nOldProt);
BuBu=(long *)0x004508E4;
*BuBu=15818207595883192297;
VirtualProtect((LPVOID)0x00450000, 4096, nOldProt, &nOldProt);
另:你那个常数超出long的范围了。
用VirtualProtect解除保护可破
DWORD nOldProt;
VirtualProtect((LPVOID)0x00450000, 4096, PAGE_EXECUTE_READWRITE, &nOldProt);
BuBu=(long *)0x004508E4;
*BuBu=15818207595883192297;
VirtualProtect((LPVOID)0x00450000, 4096, nOldProt, &nOldProt);
另:你那个常数超出long的范围了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询