独孤游侠附带了一个测试程序Demo.exe,DEMOS中增加功能所在地址是00451F60
原机器码为@FFh,80h,FCh,02h,00h,00h
NOP功能机器码为@90h,90h,90h,90h,90h,90h
以下是使用 Microsoft Visual Studio 2005 产生自己的 trainer 程式作弊为例
1.在 Microsoft Visual Studio 2005 VC++ 的主选单中选择 File/New,PROJECT
2.选择VC++的MFC的 MFC Application
3.在 name: 栏位中输入名称 (我用1为例)
4.接下来会问你应用程式的型态,先选左边APPLICATION,再选择 " Dialog based " ,再选USE OF MFC中的USE MFC IN A STATIC LIBRARY,使其能在其它系统运行,无须带DLL。
5.接下来选FINISH即可
6.最後选择完成即可产生 "1" 这个应用程式专案
7.在resource view窗口,双击IDD_MY1_DIALOG,同TOOLBOX增加两个RADIO BUTTON,
8.双击第一个RADIO1 BUTTON,并找到下列程式段落...
// TODO: Add your control notification handler code here
9.将以下程式码加在 " // TODO: " 这行下面...( "//" 之後为程式注解)
HWND hWnd =::FindWindow(NULL,"Demos"); //得到窗口句柄
if(hWnd ==FALSE) MessageBox("游戏没有运行!"); //如果没找到窗口句柄,显示"游戏没有运行!"
DWORD openProcId;//定义一个双字名为openProcId
GetWindowThreadProcessId(hWnd,&openProcId); // 从窗口句柄得到进程ID
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS|PROCESS_TERMINATE|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE,FALSE,openProcId); //打开进程并得到读与权限
DWORD GamedataAddress1 = 0x00451F60;//定义一个双字名为GamedataAddress1,GAME内存地址
DWORD GameData1 = 0x90909090;//定义一个双字名为GameData1,16进制表示5F5E0FF=99999999,与下面的4联用
WriteProcessMemory(hProcess, (void *)GamedataAddress1, (void *)&GameData1, 4, NULL); //在内存地址写入数值,4为双字
DWORD GamedataAddress2 = 0x00451F64;//定义一个双字名为GamedataAddress2,GAME内存地址
WORD GameData2 = 0x9090;//定义一个双字名为GameData2,16进制表示,与下面的4联用
WriteProcessMemory(hProcess, (void *)GamedataAddress2, (void *)&GameData2, 2, NULL);
//...........可一直加下去,LONG,SHORT,DWORD,WORD,BYTE,CHAR等和VB用法差不多
//注意的是DWORD双字NULL前的数为4,WORD字NULL前的数为2,BYTE字节NULL前的数为1
10.双击第2个RADIO2 BUTTON,并找到下列程式段落...
// TODO: Add your control notification handler code here
11.将以下程式码加在 " // TODO: " 这行下面...( "//" 之後为程式注解)
HWND hWnd =::FindWindow(NULL,"Demos"); //得到窗口句柄
if(hWnd ==FALSE) MessageBox("游戏没有运行!"); //如果没找到窗口句柄,显示"游戏没有运行!"
DWORD openProcId;//定义一个双字名为openProcId
GetWindowThreadProcessId(hWnd,&openProcId); // 从窗口句柄得到进程ID
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS|PROCESS_TERMINATE|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE,FALSE,openProcId); //打开进程并得到读与权限
DWORD GamedataAddress3 = 0x00451F60;//定义一个双字名为GamedataAddress3,GAME内存地址
DWORD GameData3 = 0xFF80FC02;//定义一个双字名为GameData3,16进制表示5F5E0FF=99999999,与下面的4联用
WriteProcessMemory(hProcess, (void *)GamedataAddress3, (void *)&GameData3, 4, NULL); //在内存地址写入数值,4为双字
DWORD GamedataAddress4 = 0x00451F64;//定义一个双字名为GamedataAddress4,GAME内存地址
WORD GameData4 = 0x0000;//定义一个双字名为GameData4,16进制表示,与下面的4联用
WriteProcessMemory(hProcess, (void *)GamedataAddress4, (void *)&GameData4, 2, NULL);
//...........可一直加下去,LONG,SHORT,DWORD,WORD,BYTE,CHAR等和VB用法差不多
//注意的是DWORD双字NULL前的数为4,WORD字NULL前的数为2,BYTE字节NULL前的数为1
12。最后BUILD,也可加入一些其他功能,信息。
PS:里面有VC++制作EXE教程FLASH。。。TRAINER。EXE,DEMOS。EXE,README,源代码(有简易说明),。。。。。。。。。。,上次那个VB需要装VB2005。。。。。。。。。。。。。。。还有就是前后两次由于我疏忽,把名字和地址,数值改成你样的GAME就可以了。造成不便,请见谅。
以及怎样使用GAMEMASTER8。0的机械码追综功能。使其能在TRAINER中得于运用
由于空间问题放到这里了。 复仇者
2004。11。13
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)