我的全部代码想要实现的功能为:
已知某程序运行后用OD调试得到以下语句。
0x0045097f mov mov [esi+254],ecx (6字节)
0x00450985 ..................
然后欲修改这语句为:
0x0045097f NOP (一字节)
0X00450980 jmp xxxxxxxx (转跳到执行我们自己的函数DispFunc ) (5字节)
执行完我们自己的函数在跳回原程序继续向下执行。
我的源码为:
const DWORD conaddress=0x450985;
const DWORD A1=0xE9;
DWORD hp;
_declspec(naked)DispFunc()
{
_asm
{
mov [esi+254],ecx
mov hp,ecx
jmp conaddress (跳回原程序代码继续往下执行)
}
}
void my5::OnButton2()
{
HWND hwnd;
DWORD pid;
hwnd =::FindWindow(NULL, "xxxx程序");
if(hwnd)
{
GetWindowThreadProcessId(hwnd,&pid);
HANDLE hProcess=::OpenProcess(PROCESS_ALL_ACCESS, false, pid);
WriteProcessMemory(hProcess,(LPVOID)0x0045097f,(LPVOID)0x90,1,NULL);
WriteProcessMemory(hProcess,(LPVOID)0x00450980,(LPVOID)&A1,1,NULL);
FARPROC p=(FARPROC)DispFunc;(这个地方是否也会出问题?)
DWORD dwOldFlag;
VirtualProtect((void*)0x450981,4,PAGE_READWRITE,&dwOldFlag);
*((DWORD*)0x450981)=(DWORD)p; //经调程序运行到这出错450981内存不能为写。。
VirtualProtect((void*)0x450981,4,dwOldFlag,&dwOldFlag);
}
else
{
AfxMessageBox("程序没有运行");
}
此源码编译没有问题但是运行后出现“遇到问题,需要关闭“
[课程]Linux pwn 探索篇!