原理就是动态改变程序在内存中的值来实现。要用到一下汇编的知识。
用工具跟踪程序的代码
[0012FED0]这个就是要修改的值得内存地址,每次启动都不同。
DWORD hProcId;
HWND hWnd =::FindWindow(NULL,"游戏名"); //得到窗口句柄
DWORD A1=100;//值要改为100
if(hWnd ==FALSE){
MessageBox("游戏没有运行!");
}
else
{
GetWindowThreadProcessId(hWnd,&hProcId); // 从窗口句柄得到进程ID
HANDLE nOK =OpenProcess(PROCESS_ALL_ACCESS|PROCESS_TERMINATE|PROCESS_VM_OPERATION|PROCESS_VM_READ| PROCESS_VM_WRITE,FALSE,hProcId); //打开进程并得到读与写权限
if(nOK ==NULL)
MessageBox("打开进程时出错");
else
{
WriteProcessMemory(nOK,(LPVOID)0x0012FED0,&A1,1,NULL);
CloseHandle(nOK); //关闭进程句柄
}
}
汇编语言和机器码对照表
叛乱袭击者.夜鹰行动--无敌和无限弹药