-
-
[旧帖]
[求助]关于自己实现WriteProcessMemory的一点问题
0.00雪花
-
发表于:
2009-7-19 22:53
4881
-
[旧帖] [求助]关于自己实现WriteProcessMemory的一点问题
0.00雪花
出于一时好奇跟了下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 ecx,[ebx];
mov esp,ebp;
pop ebp;
mov eax, 0x115;
jmp [ecx];
}
}
其中WVM_Adress是ZwWriteVirtualMemory函数中的7FFE0300:
MOV EAX,115
MOV EDX,7FFE0300
CALL [EDX];
我跟踪了我的函数,确实执行到了:
MOV EDX,ESP
SYSENTER
RETN
和正常的API调用一样执行到这个自陷处,前面那个VirtualProtectEx返回值也是TRUE,说明更改目标内存的属性也是没问题吧
最后目标内存还是没有被更改,所以实在不明白症结所在,请各位大大指点迷津,谢谢了
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)