概述
很遗憾没有进入复赛,不过还是记录一下自己做题的过程叭
PC方向的初赛题目有2道,一道Ring0一道Ring3,由于技术不到位 我只做了简单的Ring3,无缘复赛QAQ
RIng0的题目为:给了一个加了vmp壳的驱动,该驱动无法正常加载,要求在不修改驱动文件的情况下尝试让驱动成功加载,并设法让驱动成功执行print
Ring3的题目为:给了一个扫雷exe和一份dmp文件,要求通过分析得出外挂修改了程序的哪些地方、实现了什么功能
首先拿到winmine.exe于winmine.dmp
尝试windbg加载dmp文件,指定image file为exe,输入指令 !analyze -v ,分析得到结果,崩溃是由int3指令产生(不过这并不重要,重要的是内存转储文件中的程序数据)
使用exepeinfo查看该exe的pe结构,找到text段偏移和大小
使用winhex打开exe文件,将其text段裁剪下来,在这里我采用了text段偏移的基础上再加0x1d4的偏移,故裁剪后得到的文件大小为0x3a2c字节
再使用winhex打开dmp文件,根据特征码搜索定位到text段被映射到的地址偏移,采用同样的方法将0x3a2c大小的块裁剪下来
分析比对2个裁剪后的文件的不同
可以发现,有6个字节的代码被填充为了nop,在IDA上找到该处代码
可以发现,该外挂将inc dword_100579c这条命令跳过了
在Windows消息循环中有一个sub_1002fe0函数,这条被nop的命令就在该函数中,该函数会将dword_100579c与999进行比较,如果小于999,则自增dword_100579c
根据进一步调试,我确定了这是与计时有关的函数,恰好扫雷的时间显示框只能容纳3位数(最高表示数999),自增命令被nop后扫雷的计时功能将停止,数字不会随着时间递增,时间会永远显示为001
第二个被修改的指令为push 0,被修改后的代码为jmp short loc_10035b0,也就是直接跳转至函数尾
正常的执行流程为
而修改后代码的第18行的call sub_100347c(0)没有被执行,该函数的作用是点到雷后的逻辑操作,不执行该函数相当于点到雷以后游戏并不会结束,依然可以继续扫雷
综上所述,该外挂通过patch了2处代码实现了如下功能:
(1)时间锁定为001
FF 05 9C 57 00 01 → 90 90 90 90 90 90
(2)点到雷以后游戏并不会结束
6A 00 → EB 1D
不敢说这是正确答案,只能说是我的解题报告,不足之处还望各位师傅斧正
最后
以上就是精明大雁为你收集整理的【2020腾讯游戏安全技术竞赛】PC方向初赛 WriteUp的全部内容,希望文章能够帮你解决【2020腾讯游戏安全技术竞赛】PC方向初赛 WriteUp所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复