看雪2016CTF第一题WP

这是看雪CTF 2016(原:CrackMe攻防大赛)的第一题。

链接

运行

先运行了下程序,如图1,随便输入,点“OK”,提示“some thing you lost!”,并且左下侧数字随按钮点击次数自加。
运行情况

静态分析

直接拖进IDA,搜索字串“lost”,没有找到。直接搜索text”lost”。将附近的data转成unicode。看到有”oh,good,congratulations!”,查看引用位置。
字串定位
字串定位

调用位置在sub_402120中,如果Msg为0x111,WPara为1035则正确。简单看下,不难发现此call为重载的消息预处理函数。当Msg为0x111,WPara不为1035时就弹出不同提示的弹窗。
那就找消息发送函数的调用了。发现SendMessageW有5个地方call,但是参数WPara都不为1035。PostMessageW有两个call,发现1035的遗迹。一切看图,其中含有的字符”PB“和最后一位的比较是动态跟出来的,原始输入的处理在sub_401A60中。此处伪代码并没有得出全部限制条件,还要往上看。
跟踪流程
跟踪流程
跟踪流程
跟踪流程
跟踪流程
跟踪流程
最后通过在SendMessageW的call附近分别找出,字串长度为7,包含”pb“。
跟踪流程
跟踪流程
跟踪流程
现在条件已经足够了:长度7位,含有”pb”,3-6位含有”15PB”,字母只有两位,前两位为12(第1位+点击数的位置处为2),最后一位为7+点击数。
综合以上条件,只有1215pb8符合条件。
结果

动态调试

下面说说动态调试,没有动态此处结果还不是很好得的,特别是坑人的点击数参与了验证。
OD载入,讲算好动态地址,下断,f9,直接退出。从堆栈找返回地址,最终找到offset 2BC9处的call,直接nop掉,重载继续。发现不断进消息处理,查找发现在offset 227B处的定时器,NOP掉。其它不在话下。
本人渣渣。不知所云,见笑。

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 运行
  2. 2. 静态分析
  3. 3. 动态调试
,