没有参赛 看了下题目 感觉不太难 蹭个热度 发个WP
然后 今年的题目感觉好敷衍(初赛题是2018年的决赛题 hack.exe内存注入从看雪抄的 flag的算法太简单..)
然后感觉题目分数的提升应该会比较看重功能的实现 (FLAG解题其实都大同小异 没什么好拉开距离的地方 感觉主要还是功能的实现 还有内卷程度)
所以自瞄的另外实现 我用的是子弹穿墙追踪 有兴趣的 可以接着往下看哦~
(1) shootgame是一个游戏,hack.exe是游戏shootergame的一个外挂程序。
(2) 运行shootgame游戏,运行hack.exe,成功执行外挂功能并分析外挂实现过程。
(3) 实现一个与hack.exe的功能相同的,但是游戏逻辑原理不同的外挂程序。
(游戏逻辑原 理不同:指外挂程序对读写游戏数据结构或代码的攻击内容不同,并不是读写内存方 式、注入内存方式、外挂核心核心代码载体差异的不同)
使用工具:IDA Pro 7.2
、CheatEngine 7.2
、x64dbg
、PYArk
直接打开了下hack.exe一闪而过 开游戏 再打开也是一闪而过
IDA载入分析 一路查看执行的流程
对代码前后逻辑分析完以后 发现会读取一个文件 读取失败就会返回
此处为读取出错 进程就退出的逻辑。文件名为hack.dat
接着读取出来的Buffer会跑进一个函数 进行解密 之后会用解密出来的Buffer其中的字符 当做进程名称
然后会从进程列表中 寻找对应的名称 暂不知道是哪个进程(猜测是游戏进程 后面可以确定)。
接着就是一大堆的解密 解密出来的数据 会作为GetProcessAddress的参数(函数名称) 获取函数地址
然后还调用了刚刚解密进程名称的函数 解密一个Buffer 然后这个Buffer会被写进目标进程内 并且
被写入的内存地址 是由hack.exe申请出来的可执行内存 所以把这个Buffer Dump出来看看
首先我们先在main函数下个断点 然后用x64dbg设置新的运行点 单步两下
这时候打个广告欢迎使用PyArk 一个无所不能的Ark 官网:http://www.pysafe.cn/
我们使用Pyark把这个解密以后的内存dump出来
IDA载入 发现这个DLL必须要依附与ShooterClient.exe 验证了前面寻找的进程就是游戏进程的猜测哦~
此时不知道这个dll有没有什么校验、例如判断是不是由hack.exe发起的注入 随手拿起这个dll 用CheatEngine注入到游戏里面 显示了一
行字 并且在游戏中按住右键 可以自瞄敌人。(啊~这~。DLL注入以后竟然可以直接用)
那这个时候回顾题目要求
(1)求flag 这要分析解密hack.dat的函数 看了下原解密代码被优化了。看汇编挺吃力的,于是最后再看。
(2)写个"与hack.exe外挂功能相同,但实现原理与hack.exe不同的程序源码"的功能 那就要分析hack.dll是怎么实现的了
hack.dll既然按住右键能自瞄 那就从这里入手 查看导入表 看看有没有判断热键的API 从而找到自瞄的攻击流程
哦~ 发现个GetAsynKeyState这样的API(判断热键状态) 查找引用 发现整个dll只有这一处引用 并且 下面有写入float内存的操作
看看这个被写入数据的内存地址是怎么来的 IDA查找引用
得到完整的数据 然后在CE中添加这个数据 随便改个值 游戏中的屏幕动了 确认这里就是跟自瞄有关的逻辑了
所以hack.dll攻击的数据结构就是 如上图这里啦~
那这个要写入进去的float类型的数据肯定跟敌人坐标有关了
往上分析以后可以看到敌人对象其实是来源于一个函数
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2021-4-23 10:38
被kanxue编辑
,原因: