码迷,mamicode.com
首页 > Windows程序 > 详细

【Reverse_Win】SQCTF 2015 Reverse 250

时间:2015-04-26 12:15:43      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:

大神做题目从来都喜欢炫技,把大神手脱壳(就是一个ESP而已233)的小题目整理一下发上来,自动过滤所有炫(dou)技(bi)部分~

ps 大神现在做题都国际化了233

ps2 以后可能转Linux了,做windows被嫌弃【捂脸】

来源: Securinets Quals CTF 2015

题目:找到程序中的flag

类型: Reverse

分数: 250

难度:中(难中易三个级别)

描述:

Hint : Find the serial (Trouvez le céréale)

题目链接:

https://github.com/ctfs/write-ups-2015/tree/master/securinets-ctf-2015/crack/reverse

答案: BZ9dmq4c8g9G7bAY

?

?

解题思路:

这里只给了一个rev文件,那就先看看文件类型,看来exe后缀被去掉了

技术分享

放到peid里面看看

技术分享

这里虽然查出了壳,但是到网上找了个软件根本脱不了,没办法,手脱。OD载入,可以看到pushad指令,这是大多数带壳程序都会用的指令

技术分享

这里我们用esp定律来确定入口点,f8执行pushad指令,此时的esp变成了0012ffa4,跟踪到堆栈,在这里下个硬件断点,这里不能下内存断点,因为内存断点会被程序检测出来

技术分享

下完断点直接运行,程序果断停在了0041416处,上一条指令就是popad指令,程序已经解压完成,OEP已经不远

技术分享

执行玩return我们就可以到达OEP

技术分享

往下翻一翻,我们可以看到call GetCommandLineA,通过它我们可以找到IDA表

技术分享

这里就是整个IAT表(起点和终点均已标出)

技术分享

现在先把程序dump下来

%%%%%%%过滤了用不到的部分(=%%%%%%%%%%%%

重新用OD载入,我们可以看到程序已经脱壳成功

技术分享

既然已经脱壳成功,索性直接用IDA6.6来进行分析,点击start函数,按F5,点开sub_401000(不难看出,这里就是main函数)

技术分享

点开DialogFunc函数

技术分享

经过分析,我们可以得出下图(其中serial表示序列号的第一个字符,s1到是5依次表示序列号的第2个到第15个字符),到达这里我们就算是快要大工告成了,我们所需要做的就是人工进行序列号的拼装。

拼装结果如为BZ9dmq4c8g9G7bAY

技术分享

好吧,运行程序测试一下

技术分享

?

?

过滤部分如下,虽然用不着,但是了解PE结构和为了后面手脱更复杂的壳还是用得到的。

?

技术分享

这里需要注意的是去掉重建输入表的勾选,然后点脱壳并指定文件名即可

技术分享

然后打开import RECconstructor,attach到被调试进程

技术分享

这里重新看一下IAT表

技术分享

可以得出OPE = 0x4016bb - 0x0400000(段地址) = 0x16bb

RVA = 0x40c000 - 0x400000 = 0xc000

Size = 0x40c110 - 0x400000 = 0x110

接下来点击import我们可以在import function found中找到IAT中的函数,最后点击fix dump并选择我们刚刚dump下来的文件就可以了

技术分享

【Reverse_Win】SQCTF 2015 Reverse 250

标签:

原文地址:http://www.cnblogs.com/windcarp/p/4457509.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!