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中寻找的地址交叉引用寻找。

​ 注意的是退出到主界面是要把列表清空。

​ 总的来说实现有点复杂了。