-
-
[原创]追凶者也 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
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!