tgstc-2021-PC-复赛
分析
flag很简单,程序从hack.dat中读取内容解密。
要求解密后对应位置拼起来是ShooterClient.exe。
解密方法就是简单的异或解密。
做到这里hack.exe已经可以工作了,进一步的,程序将解密出来的字符串和2RSRhrofoWtLeLrJCSlTireznrtx.oeLxuehyyAwbpCOZq0tsS7MZyVdOUoE8比较。
求解过程:
其中 t 就是hack.dat中应有的数据。写入之后运行就得到了flag
flag:2RSRhrofoWtLeLrJCSlTireznrtx.oeLxuehyyAwbpCOZq0tsS7MZyVdOUoE8
之后要求分析hack.exe的实现方法。
跟了一下发现hack.exe中实现了一个PEloader,将内存中的一份dll,暂且命名为hack.dll写入了目标进程并且跳转到EP执行。
dump出来hack.dll分析,关键部分是钩了一个类似tick函数的东西,每次暴力从world中取出actor列表,之后匹配字符串来判断是不是角色actor。
然后每次函数调用时会检测右键是否按下,如果按下,就寻找一定视角范围内的角色actor,将视角直接写过去。
hack.dll分析就差不多了。
回过头看游戏程序本身,是ue4写的,而且就是ue4的一个射击游戏demo,这很好,立刻下载源码。
既然题目要求说了不能用相同的方法实现,那么就不从world结构体去枚举actor获取敌人坐标,而是维护一个存活列表,列表中的元素由构造函数添加,并且由onDeath函数删除。然后钩取Camera的update函数,在每次刷新时检测是否处于targeting的状态,如果存在就自瞄,自瞄的逻辑和hack.exe中是相同的。
具体钩取函数如下:
(构造函数)
(onDeath函数)
(updateCamera)
具体函数如何找到偏移就根据字符串信息和ce中寻找的地址交叉引用寻找。
注意的是退出到主界面是要把列表清空。
总的来说实现有点复杂了。