前情回顾
FPS方框透视辅助开发教学1:数据挖掘和基本绘制
https://www.52xuejishu.com/forum-post/337.html
系列完整列表
FPS方框透视辅助开发教学1:数据挖掘和基本绘制
https://www.52xuejishu.com/forum-post/337.html
FPS方框透视辅助开发教学2:编写代码读取玩家数据
https://www.52xuejishu.com/forum-post/339.html
FPS方框透视辅助开发教学3:屏幕坐标转换算法、绘制文本到敌人
https://www.52xuejishu.com/forum-post/340.html
FPS方框透视辅助开发教学4:屏幕坐标转换算法完整解析
https://www.52xuejishu.com/forum-post/345.html
FPS方框透视辅助开发教学5:绘制所有敌人射线和距离
https://www.52xuejishu.com/forum-post/347.html
FPS方框透视辅助开发教学6:实现GDI绘制方框透视(完结)
https://www.52xuejishu.com/forum-post/349.html
想学习游戏辅助开发没地方?
来这里,我们有基础版299和专业版2024
【基础版】包含4套教学,赠送价值158过检测过保护CE
B站平台可直达下单,手机访问效果最佳
包含:
学习游戏安全,加入游戏安全逆向基础版社区,现在优惠价299
游戏安全逆向:入门科普大全解
https://study.163.com/course/courseMain.htm?courseId=1212474809&share=2&shareId=1020678503
游戏安全逆向工程师:CE基础
https://study.163.com/course/courseMain.htm?courseId=1209141829&share=2&shareId=1020678503
C语言0基础入门游戏辅助开发实践
https://study.163.com/course/courseMain.htm?courseId=1213365801&share=2&shareId=1020678503
易语言0基础游戏辅助电脑脚本开发(正在更新ing)
https://study.163.com/course/courseMain.htm?courseId=1213780852&share=2&shareId=1020678503
优惠下单链接,学习游戏修改作弊、辅助脚本开发、飞天遁地透视自瞄辅助技术,您的最佳选择:
平台下单地址https://mall.bilibili.com/neul-next/detailuniversal/detail.html?isMerchant=1&page=detailuniversal_detail&saleType=10&itemsId=11262567&loadingShow=1&noTitleBar=1
下单后承诺以上四套内容全部开通在网易云课堂、永久观看时效、指导答疑
下单后即赠送过网络游戏检测保护的CE游戏修改器一套(价值158)
【专业版】包含12套教学,内容更多,工具更丰富,详情联系i-xiaodi
逻辑分析
如图所示,单独抽离一个函数用来计算测试
获取amxmodx_mm.dll模块地址和hl.exe模块地址
amxmodx_mm.dll+0x97030 == 自身人物地址
自身人物地址 + 0x230 == 第二个除自身外的敌人地址
hl.exe + 0x19E10C8 == 鼠标X
hl.exe + 0x19E10C4 == 鼠标Y
代码整理
void Calc()
{
DWORD Pid = GetProcessIDByName("hl.exe");
DWORD Moudle_amxmodx = (DWORD)GetProcessModuleHandleByName(Pid,"amxmodx_mm.dll");
DWORD Moudle_hl = (DWORD)GetProcessModuleHandleByName(Pid, "hl.exe");
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, Pid);//游戏进程句柄
if (Moudle_amxmodx == NULL || Moudle_hl == NULL || hProcess== NULL)
{
printf("[info]:初始化数据出错 Moudle_amxmodx:%p Moudle_hl:%x hProcess:%x\n", Moudle_amxmodx, Moudle_hl, hProcess);
return;
}
Moudle_amxmodx += 0x97030;
printf("[info]:初始化数据 Moudle_amxmodx:%p Moudle_hl:%x hProcess:%x\n", Moudle_amxmodx, Moudle_hl, hProcess);
//拿到自身坐标和鼠标角度
DWORD Address_me;
float Angle_me_X, Angle_me_Y;
float myX, myY, myZ;
ReadProcessMemory(hProcess, (LPCVOID)Moudle_amxmodx, &Address_me, 4, NULL);
while (true)
{
//拿自己的数据
ReadProcessMemory(hProcess, (LPCVOID)(Moudle_hl + 0x19E10C8), &Angle_me_X, 4, NULL);
ReadProcessMemory(hProcess, (LPCVOID)(Moudle_hl + 0x19E10C4), &Angle_me_Y, 4, NULL);
if (Address_me > NULL)
{
ReadProcessMemory(hProcess, (LPCVOID)(Address_me + 0x88), &myX, 4, NULL);
ReadProcessMemory(hProcess, (LPCVOID)(Address_me + 0x8C), &myZ, 4, NULL);
ReadProcessMemory(hProcess, (LPCVOID)(Address_me + 0x90), &myY, 4, NULL);
printf("[data]:address->%p\n[x:%.3f z:%.3f y:%.3f]\nangle:(%.3f,%.3f)\n\n", Address_me, myX, myZ, myY, Angle_me_X, Angle_me_Y);
}
DWORD Address_enemy;
float enemyX, enemyY, enemyZ;
//拿第二个敌人的数据
ReadProcessMemory(hProcess, (LPCVOID)(Moudle_amxmodx + 0x230), &Address_enemy, 4, NULL);
if (Address_enemy > NULL)
{
ReadProcessMemory(hProcess, (LPCVOID)(Address_enemy + 0x88), &enemyX, 4, NULL);
ReadProcessMemory(hProcess, (LPCVOID)(Address_enemy + 0x8C), &enemyZ, 4, NULL);
ReadProcessMemory(hProcess, (LPCVOID)(Address_enemy + 0x90), &enemyY, 4, NULL);
printf("\n\n[data]:address_enemy->%p\n[x:%.3f z:%.3f y:%.3f]\n\n", Address_enemy, enemyX, enemyZ, enemyY);
}
Sleep(200);
system("cls");
}
}
恭喜你,至此,你已经完成了50%的工作了
剩下的工作:分析绘制算法,并进行透视绘制测试
且听下回分晓
没有回复内容