// TODO: Add your control notification handler code here
HWND hGame = ::FindWindow(NULL,"植物大战僵尸中文版");
/* if(!hGame)
{
AfxMessageBox("游戏还没运行");
return;
}*/
DWORD id;
GetWindowThreadProcessId(hGame,&id);
HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,id);
LPCVOID lpOneBase= (LPCVOID)0x006A9EC0;
DWORD dwOne,number;
ReadProcessMemory(hProcess,lpOneBase,(LPVOID)&dwOne,4,&number);
LPCVOID lpTwoBase = (LPCVOID)(dwOne+0x768);
DWORD dwTwo;
ReadProcessMemory(hProcess,lpTwoBase,(LPVOID)&dwTwo,4,&number);
LPVOID lpThreeBase =(LPVOID)(dwTwo+0x5560);
LPVOID lpBuff=(LPVOID)0x0000270F;
WriteProcessMemory(hProcess,lpThreeBase,lpBuff,4,&number);
CloseHandle(hProcess);咋不起作用我调试了半天也没调试出来,希望过路大侠指点下
HWND hGame = ::FindWindow(NULL,"植物大战僵尸中文版");
/* if(!hGame)
{
AfxMessageBox("游戏还没运行");
return;
}*/
DWORD id;
GetWindowThreadProcessId(hGame,&id);
HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,id);
LPCVOID lpOneBase= (LPCVOID)0x006A9EC0;
DWORD dwOne,number;
ReadProcessMemory(hProcess,lpOneBase,(LPVOID)&dwOne,4,&number);
LPCVOID lpTwoBase = (LPCVOID)(dwOne+0x768);
DWORD dwTwo;
ReadProcessMemory(hProcess,lpTwoBase,(LPVOID)&dwTwo,4,&number);
LPVOID lpThreeBase =(LPVOID)(dwTwo+0x5560);
LPVOID lpBuff=(LPVOID)0x0000270F;
WriteProcessMemory(hProcess,lpThreeBase,lpBuff,4,&number);
CloseHandle(hProcess);咋不起作用我调试了半天也没调试出来,希望过路大侠指点下
解决方案 »
- ShowWindow(SW_HIDE);后仍然在任务栏显示 图标
- 现在用MFC编程还是用SDK编?
- ftp创建文件夹的问题
- 这种是什么错误?望高手指点,怎么样改正!谢谢!!
- 编译通过后,再按F7,为什么只生成dll文件而没有lib文件?
- 我希望写在视上的文字可以通过鼠标进行移动,请问该如何实现
- 求一个网络编程的项目?
- 请问什么是this指针?
- 如果程序运行中途需要退出(如某个硬件不可用而出错),我用exit(0)安全吗?PostQuitMessage(0)在这时如何使用呢?有其他好的方法吗?谢谢!
- 在VC中如何运行bat文件,使之不出现控制台窗口
- 有人做 MPI 的吗?
- 菜鸟高分求解:一道基础题目
sun的地址是*(*(*0x006A9EC0+0x768)+0x5560)
UINT addr = ( UINT )( *0x006A9EC0 );
.......
LPCVOID lpOneBase= (LPCVOID)0x006A9EC0;
DWORD dwOne,number;
ReadProcessMemory(hProcess,lpOneBase,(LPVOID)&dwOne,4,&number);
LPCVOID lpTwoBase = (LPCVOID)(dwOne+0x768);
int iTemp;
DWORD dwAdress = 0x384ae8;
SIZE_T dwRead = 0;
ReadProcessMemory(hProcess,(LPVOID*)dwAdress,&iTemp,sizeof(iTemp),&dwRead);
//原来错误的写法:ReadProcessMemory(hProcess, &dwAdress,&iTemp,sizeof(iTemp),&dwRead);
WriteProcessMemory(hProcess,lpThreeBase,lpBuff,4,&number);改成
DWORD x=0x0000270F;
WriteProcessMemory(hProcess,lpThreeBase,&x,4,&number);
试试
插几个断点看看变量的值和最后的就OK了呵呵原来是参数搞错了
LPVOID lpBuff=(LPVOID)0x0000270F;
WriteProcessMemory(hProcess,lpThreeBase,lpBuff,4,&number); //这里lpBuff没取地址但是
编译能通过
LPCVOID lpBuff=(LPCVOID)0x0000270F; //这里是LPCVOID
WriteProcessMemory(hProcess,lpThreeBase,&lpBuff,4,&number);
这里要是不加&的话编译就会出错
为什么会这样呢?
LPVOID 和LCPVOID在VC6.0中的定义是
typedef void far *LPVOID;
typedef CONST void far *LPCVOID;
都是一个远指针(32位下已经没有意义了),就一个是const指针,一个不是,为什么不是const指针时不加取地址符会通过编译呢?