-
-
[原创]2021腾讯PC客户端初赛题解(对大佬解题手法的学习)
-
发表于:
2021-4-14 16:24
8327
-
[原创]2021腾讯PC客户端初赛题解(对大佬解题手法的学习)
这道题,我当时没有做出来,有思路,但是感觉总差一点东西。最近看到了一些帖子,是关于这个,写的很好。我也学到了很多。今天这个帖子,一方面是由于很久没有发了,另一方面也是希望可以学到东西。
——题记
前期的准备
a. 查壳
通过工具,发现没有壳,同时也可以知道一些段的信息。这里不多做赘述。
b. 运行观察
直接正常运行程序,发现该程序有一下的特点。第一,标题是XDDDDDDDD;第二,有一个画布,上面有一个箭头,感觉是一种提示;第三,鼠标光标消失,并且屏幕随鼠标移动。
c. 发现线索
在上面的基础上,认为可以有一下的线索。第一,搜索字符串,“XDDDDDDDD”;第二,搜索读取桌面鼠标的IPA,WindowsFromPoint;第三,可能存在ASLR。
验证以上猜想,打开OD,ALT+T,搜索字符串,果然结果如下:
这里很显然,这个函数,需要压入5 个参数,大胆认为,这里是构造窗口的。
搜索WindowsFromPoint,得到的结果如下:
然后这里的上下文还有很多其他的API及作用,也一并将它们贴出来,分享一下。
载入OD,动态调试一下,发现每次的基地址都不一样,所以很显然,这里存在ASLR。需要我们使用PE工具,来关闭ASLR。对于什么是ALSR,文章的最后面,我会回答大家。
2. 关闭ASLR,分析主函数
通过ALSR disabler来关闭ALSR。
然后重新载入IDA,通过动态调试,可以定位到winmain(这个地方,如果没有看到,那就就需要载入后,逐步单步跟踪,那麽一定会看到的。)
F5得到如下的伪代码:
为了更加清晰,这里采用OD,来动态调试一下,ctrl+G,搜索GetModuleFileNameA,然后F2,下断点。然后运行。
然后通过OD插件:用来将内存窗口中按照指定字节数选中数据并将数据保存到硬盘 ,点击可以下载。题目需要我们找到flag,所以我们需要把这些图的内存找到。注意到这一部分,很特殊,这里存储的是浮点数,如下图;
很显然,这里存储的就是这些图的内存。这个时候,寄存器的值如下:
选择相应的内存格式,发现这一部分,存储的都是坐标。
这个时候,就需要使用上面的插件,将这里的内存数据给dump下来,然后将它们使用代码,转换成数字。(下面,是我借鉴别人的代码)
然后通过python来显示,画图。
最后就得到了flag
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)