-
-
[求助]自己实现WriteProcessMemory的一点问题,求助
-
发表于:
2009-7-20 20:24
5510
-
[求助]自己实现WriteProcessMemory的一点问题,求助
出于一时好奇跟了下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,说明更改目标内存的属性也是没问题吧
最后目标内存还是没有被更改,实在不明白症结所在
,请各位大大指点迷津,谢谢了
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!