首页
论坛
专栏
课程

[原创]DbAPPSec CTF一道题的分析

2018-3-19 19:16 1744

[原创]DbAPPSec CTF一道题的分析

2018-3-19 19:16
1744
我一年以前去某公司面试的时候出的这道题,题做出来了但是后来没去这家公司,当时解题的过程写了博客的,现在把EXE文件也发出来和大家分享下吧。

首先运行这个程序,观察它的行为。


用exeinfo打开,发现没有加壳。


用IDA打开,查看F5反编译之后的代码。


MSDN上查阅相关函数可以得知WinMain中是一个消息循环,LoadString函数从资源里加载字符串资源到CString对象里。用Resource Hacker打开它。


这里的快捷键是?或/+ALT,按下快捷键就会弹出About窗口。在WinMain中没有看到有关flag的内容,于是在ollydbg中尝试设置消息断点。


当在程序窗口中按下ALT+?之后ollydbg断在这里。


跟进0x00401640,同时在IDA中查看。


可以看到在IDA中这一部分代码左边都是红色的,这是因为IDA没有正确识别它们。


问题出在这里,有两条重复的指令。用16进制编辑器把下面那条指令替换成nop,再在IDA中打开。


这次正常了,但是在按下F5时又出现了如图所示的提示。


依次勾选Options->General->Disassembly->Stack pointer,按下ALT+K调整堆栈。


查看F5反编译之后的结果。


0x40101E调用了0x4013A0,从0x4013A0调用的函数和0kk`d1a`55k222k 2a776jbfgd`06cjjb刚好是32位来看,这里应该是MD5加密。


跟进后面调用的0x401005,0x401005又调用了0x401590。


这里把0kk`d1a`55k222k2a776jbfgd`06cjjb和SS做了一个异或操作,编写程序来得到异或运算的结果。


对得到的结果进行MD5解密。


 这个值应该被写到00428C54也就是pbData处。


 但是WinMain会先对这里做一个memset操作,所以在LoadString函数下断点,断在这里之后memset已经执行完了,这时再在内存中写入123321。



为了能让程序顺利执行到弹出flag的地方,还需要修改前面几处跳转条件。


运行到这里,找到了flag{n0_Zu0_n0_die}。






[公告]LV6级以上的看雪会员可以免费获得《2019安全开发者峰会》门票一张!!

上传的附件:
最新回复 (1)
5ilent 2018-4-6 04:43
2
0
这家公司不会是杭州某安全公司吧,
游客
登录 | 注册 方可回帖
返回