-
-
[原创]WP-2022腾讯游戏安全竞赛PC题
-
发表于: 2022-4-19 15:52 8286
-
比赛地址:https://gslab.qq.com/html/competition/2022/race-pre.htm
PC客户端初赛题目
X64动态调试,首先定位到两个memcpy的调用。
观察其内容,第一个memcpy是一串代码,第二个memcpy是一串数据:
在这个数据存储区域下内存读取断点,看看程序哪里用到了这些数据。发现断点停在了此处:
分析这个函数,发现是一个switch结构,去逐个读取前面的数据内容,在这个switch的case5和case6中发现了一个函数调用,并且参数中两个固定的值引起了我的注意,用颜色版一看这两个值果然是题目中两个方块的颜色。
这段程序的大致流程就清楚了,前面的while循环里应该是不断在通过读取的数字来做一些操作(可能是在计算方块的位置)。
而且还发现这个调用函数,就是前面第一次memcpy的代码。
这段代码看起来很复杂,我先看前面的那块数据。
按照while循环的每次读取字节,遇到5或6这一块就结束,我将所有数据分了段(下图,图里是前三个块),发现数量正好和方块一致,前面11个是最后画了黄色方块,后面就是画蓝色方块。但是前面11个没有显示出来,接着找原因。
观察每一块的不同片段,发现每一个小片段都有一个 03 X 01(比如上图的第四行)
这个X经常遇到一样的,而且每个X都是3C的倍数。
这个很有可能是偏移量。
再来看第一个方块,03后面是0x3E8, 是0x3C的16倍,感觉不太对,因为黄色都在左上角附近,将其改为0试试。还是没画出来。这时就懵了很久,我随意尝试修改这些数据段,无意中发现最后一段的02 03 01 (上图里第14行)将后面的1改为0后,第一个方块竟然就画出来了。
于是我将前面11个方块的数据片段,都按照这两个点修改
1,将看起来有问题的偏移量(比较大的)都改为了0
2,将02 03 01 这个片段的01都改为0。
最终显示出了flag:
方块4秒之后就消失,这个问题很简单。看到getTickCount,可以定位到:
将if的跳转指令由jbe改为jmp即可,使其跳过里面的代码块。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)