首页
社区
课程
招聘
[原创]追凶者也 writeup
发表于: 2018-12-13 07:17 3822

[原创]追凶者也 writeup

2018-12-13 07:17
3822

用ida打开cm.exe之后发现WinMain调用了一个空函数2F1280,去start函数里看了看也没发现什么,但在使用ctrl+e跳转到入口点时发现存在TlsCallback函数:

首先是modi_mainfunc函数

其中304014指向函数2F1220,304018处指向的是函数2F1280;

结合断点分析发现这个函数改写了函数2F1280,使其跳转到函数2F1220;

之后还有一个modi_getext函数

在断点跟踪过程中能够发现该函数通过对比hash的方式找到GetDlgItemTextA函数地址,之后将该函数改写,让其去调用函数2F1A10

TlsCallback函数最后开启了一个线程:

将dword_3047FC作为开关,只要其为1就再次修改GetDlgItemTextA函数。

在TlsCallback函数结束后进入WinMain函数,之后:

2F1280->2F1220->DialogFunc->2F1040

2F1040会去调用修改后的GetDlgItemTextA,即会调用2F1A10函数。

2F1A10函数是验证输入的主要函数,结合断点跟踪分析函数流程如下:

do_move函数将byte-3047D0的数据作为3x3的九宫格,
首先根据第二个参数的值找到byte-3047D0中该值对应的行列位置:

之后根据wasd的方向,将该值向该方向移动一格(该格处的值必须是0才能移动)

再根据do_check函数中的初值和move函数中最后的检查,就是要通过移动将
413
725
860
变为
123
456
780
就可以了。根据初态容易判断先将第一行的1左移再将2上移就能整理好第一行,4 7 8 6可以先依次移开,于是

经过d6d8s7s4a1w2后变为

123
405
786

再之后 a5w6即可整理好第二行,同时第三行也完成了。

则最后的flag为d6d8s7s4a1w2a5w6


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 4
支持
分享
最新回复 (2)
雪    币: 181
活跃值: (621)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
有意思
2018-12-13 15:23
0
雪    币: 31
活跃值: (87)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
3
有想法
2018-12-14 23:45
0
游客
登录 | 注册 方可回帖
返回
//