FPS中的cs游戏g制作
时间:2023-04-18 22:07:00
工欲善其事,必须先利用其器具
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 24C498
得出结论:24c 24c=498形成了一个数组
4---window中的api的操作
#include
#include #include int main() { //获取桌面窗口 FindWindowA(类名),窗口标题) 用窗口获得窗口句柄 HWND game_hwnd= FindWindowA(nullptr,"Counter-Strike"); printf("Counter-Strike窗口句柄:%x\n", game_hwnd); ///根据窗口句柄获取过程id。俗称pid DWORD proc_id = 0; DWORD thread_id=GetWindowThreadProcessId(game_hwnd, &proc_id); printf("Counter-Strike的进程ID:%d\n", proc_id); printf("Counter-Strike的线程ID:%d\n", thread_id); //根据过程id返回进程句柄 OpenProcess(访问权限,是否继承句柄,进程id) PROCESS_ALL_ACCESS所有权限 HANDLE g_hprocess = OpenProcess(PROCESS_ALL_ACCESS,FALSE, proc_id); printf("Counter-Strike线程句柄:%d\n", 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的值是:%x\n",value); //CreateToolhelp32Snapshot 建立快照 CreateToolhelp32Snapshot(指定系统获取过程快照类型,指定获得过程快照的指定id,获取系统内所有进程快照id这个函数包含在0) 中, HANDLE snap= CreateToolhelp32Snapshot(TH32CS_SNAPALL, proc_id);//TH32CS_SNAPALL 指过程中的所有模块 printf("Counter-Strike的进程快照是:%d\n", 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第一个模块的基地址:%x\n", module_info); state= Module32Next(snap, &module_info); printf("Counter-Strike下一个模块的基地址:%x\n", module_info); }