首页
社区
课程
招聘
[求助]自己实现WriteProcessMemory的一点问题,求助
发表于: 2009-7-20 20:24 5510

[求助]自己实现WriteProcessMemory的一点问题,求助

2009-7-20 20:24
5510
出于一时好奇跟了下WriteProcessMemory,想自己实现一下,说白了是拼凑一下,但是我做的这个函数却没有WriteProcessMemory的效果。。很是奇怪,代码如下:

//自定义写内存函数
void MyWriteProcessMemory(HANDLE hProcess, LPVOID lpBaseAddress, LPVOID lpBuffer,DWORD nSize, LPDWORD lpNumberOfBytesWritten)
{
  if( VirtualProtectEx(hProcess, lpBaseAddress, nSize, PAGE_EXECUTE_READWRITE, &flOldProtect) == TRUE)
    AfxMessageBox(_T("access protection is changed"));
  ULONG WVM_Adress = (ULONG)::GetProcAddress(::GetModuleHandle(_T("Ntdll.dll")), "ZwWriteVirtualMemory") + 6;
  __asm
  {
    mov ebx,[WVM_Adress];
    mov edx,[ebx];
    mov esp,ebp;
    pop ebp;
    mov eax, 0x115;
    jmp [edx];
  }
}

其中WVM_Adress是ZwWriteVirtualMemory函数中的7FFE0300:
MOV EAX,115
MOV EDX,7FFE0300
CALL [EDX];

我跟踪了我的函数,确实执行到了:
MOV EDX,ESP
SYSENTER
RETN
和正常的API调用一样执行到这个自陷处,前面那个VirtualProtectEx返回值也是TRUE,说明更改目标内存的属性也是没问题吧

     最后目标内存还是没有被更改,实在不明白症结所在,请各位大大指点迷津,谢谢了

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 139
活跃值: (19)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
貌似你上面堆栈不平衡。
另外需要再调用ZwFlushInstructionCache
2009-7-21 14:49
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
3
VirtualProtectEx->WriteProcessMemory

拿西裤哥的话来说,这叫脱了裤子打屁
2009-7-21 14:52
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
说得太对了,支持。
2009-7-22 16:29
0
雪    币: 146
活跃值: (33)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
谢谢大大的批评指正
2009-7-30 01:16
0
游客
登录 | 注册 方可回帖
返回
//