1工欲善其事必先利其器
FPS游戏安装包 链接:https://pan.baidu.com/s/1YGm45EoplPgB9r3_bKkxlA?pwd=pxsi 提取码:pxsi
FPS游戏逆向工具 链接:https://pan.baidu.com/s/1PftO4QAfLBTvfH-OQQkZNA?pwd=aka4 提取码:aka4
CE 7.4版本:https://www.cheatengine.org/downloads.php
CS1.6 3248 写代码的工具 visualstudio https://visualstudio.microsoft.com/
2 游戏的操作
`打开作弊窗口
H 打开作弊菜单
G 扔掉武器 bot_stop 1 停止机器人
+ 增加机器人
bot_add_ct 反恐精英
bot_add_t 添加恐怖分子
bot_add_t 在T方增加BOT
bot_add_ct 在CT方增加BOT
3--用ce扫描人物名字 注:扫描类型选:字符串
搜自己的名字得到
cstrike.exe+90F3DA:
01D0F3D6 - 84 C9 - test cl,cl
01D0F3D8 - 74 30 - je cstrike.exe+90F40A
01D0F3DA - 8A 88 C8A6F502 - mov cl,[eax+cstrike.exe+1B5A6C8] <<
01D0F3E0 - 84 C9 - test cl,cl
01D0F3E2 - 74 26 - je cstrike.exe+90F40A
EAX=00000000
EBX=00000000
ECX=00000063
EDX=019C5BCC
ESI=00000000
EDI=00000001
ESP=0019FAEC
EBP=01A3486C
EIP=01D0F3E0
搜敌人的名字得到:
cstrike.exe+90F3DA:
01D0F3D6 - 84 C9 - test cl,cl
01D0F3D8 - 74 30 - je cstrike.exe+90F40A
01D0F3DA - 8A 88 C8A6F502 - mov cl,[eax+cstrike.exe+1B5A6C8] <<
01D0F3E0 - 84 C9 - test cl,cl
01D0F3E2 - 74 26 - je cstrike.exe+90F40A
EAX=0000024C
EBX=00000000
ECX=00000057
EDX=01A34DB8
ESI=00000000
EDI=00000002
ESP=0019FAEC
EBP=01A3486C
EIP=01D0F3E0
第一个队友的名字得到:
cstrike.exe+1B5AB60
cstrike.exe+90F3DA:
01D0F3D6 - 84 C9 - test cl,cl
01D0F3D8 - 74 30 - je cstrike.exe+90F40A
01D0F3DA - 8A 88 C8A6F502 - mov cl,[eax+cstrike.exe+1B5A6C8] <<
01D0F3E0 - 84 C9 - test cl,cl
01D0F3E2 - 74 26 - je cstrike.exe+90F40A
EAX=00000498
EBX=01A34868
ECX=00000054
EDX=01A353D0
ESI=00000002
EDI=00000003
ESP=0019EFDC
EBP=00000000
EIP=01D0F3E0
注意:这个游戏分配就是第一人,第二个人是敌人,第三个认识队友
分析:第一个人 第二个人 第三个人
eax=0 24C 498
得出结论:24c+24c=498,这样就形成了个数组
4---window中的api的操作
#include#include #include int main() { //获取桌面窗口 FindWindowA(“类名”,“窗口标题”) 利用窗口获取窗口句柄 HWND game_hwnd= FindWindowA(nullptr,"Counter-Strike"); printf("Counter-Strike的窗口句柄:%xn", game_hwnd); //根据窗口句柄,获取进程id。俗称pid DWORD proc_id = 0; DWORD thread_id=GetWindowThreadProcessId(game_hwnd, &proc_id); printf("Counter-Strike的进程ID:%dn", proc_id); printf("Counter-Strike的线程ID:%dn", thread_id); //根据进程id返回进程句柄 OpenProcess(访问权限,是否继承句柄,进程id) PROCESS_ALL_ACCESS所有权限 HANDLE g_hprocess = OpenProcess(PROCESS_ALL_ACCESS,FALSE, proc_id); printf("Counter-Strike的线程句柄:%dn", g_hprocess); //ReadProcessMemory (远程进程句柄,远程进程中的内存地址,本地进程中的内存地址,要写入的字节数,实际读取的字节数) DWORD address = 0x1400000; DWORD value; DWORD nSize = 4; DWORD read_Size; ReadProcessMemory(g_hprocess,(LPCVOID)address, &value,nSize,NULL); printf("Counter-Strike在0x1400000的值是:%xn",value); //CreateToolhelp32Snapshot 建立一个快照 CreateToolhelp32Snapshot(“指定系统获取进程快照类型”,指定要获取进程快照的id,获取系统内所有进程快照id时是0)这个函数包含在 中, HANDLE snap= CreateToolhelp32Snapshot(TH32CS_SNAPALL, proc_id);//TH32CS_SNAPALL 指进程的所有模块 printf("Counter-Strike的进程快照是:%dn", snap); //Module32First(用CreateToolhelp32Snapshot函数返回的快照句柄, MODULEENTRY32结构的指针用来返回数据) MODULEENTRY32 module_info; //指针 ZeroMemory(&module_info,sizeof(module_info));//格式化指针 ZeroMemory(内存区域的开始地址,内存区域的大小) module_info.dwSize = sizeof(module_info); //dwSize 这个结构的长度,以字节为单位,初始化一个实例以后调用Process32First函数,设置成员的大小sizeof(PROCESSENTRY32).如果你没用PROCESSENTRY32中的成员dwSize初始化,pricess32First将会失败。) BOOL state= Module32First(snap,&module_info); //Module32First(快照句柄,指针) printf("Counter-Strike第一个模块的基地址:%xn", module_info); state= Module32Next(snap, &module_info); printf("Counter-Strike下一个模块的基地址:%xn", module_info); }



