首页
社区
课程
招聘
[原创]2016看雪CrackMe攻防大赛第一题WP
发表于: 2016-11-2 20:07 5568

[原创]2016看雪CrackMe攻防大赛第一题WP

2016-11-2 20:07
5568
先运行了下程序,如图1,随便输入,点“OK”,提示“some thing you lost!”,并且左下侧数字随按钮点击次数自加。

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


调用位置在sub_402120中,如果Msg为0x111,WPara为1035则正确。简单看下,不难发现此call为重载的消息预处理函数。当Msg为111,WPara不为1035时就弹出不同提示的弹窗。
那就找消息发送函数的调用了。发现SendMessageW有5个地方call,但是参数WPara都不为1035。PostMessageW有两个call,发现1035的遗迹。一切看图,其中含有的字符”PB“和最后一位的比较是动态跟出来的,因为在比较"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掉。其它不在话下。

本人渣渣。不知所云,见笑。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 13719
活跃值: (2851)
能力值: ( LV15,RANK:2663 )
在线值:
发帖
回帖
粉丝
2
在动态过程中,我看到了I.LOVE.YOU。还看到处理过的字串,似乎用于检测的。
2016-11-2 20:20
0
雪    币: 226
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼主,为什么跟到401c38处的call GetWindowTextW,按F8,程序就一直在运行~
2016-12-4 12:28
0
雪    币: 13719
活跃值: (2851)
能力值: ( LV15,RANK:2663 )
在线值:
发帖
回帖
粉丝
4
这一段是取输入,然后检查是不是含有"b",如果没有返回0,就game over了。
2016-12-6 22:00
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
请问,动态分析是怎么找到那两个call的,offset 2BC9和offset 227B
2017-3-24 16:33
0
雪    币: 243
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
之幽灵 请问,动态分析是怎么找到那两个call的,offset 2BC9和offset 227B
基址+偏移
2017-6-3 08:31
0
游客
登录 | 注册 方可回帖
返回