下载程序,运行一下:

再用PEiD看一下有没有加壳:

发现是MFC编程的软件并没有加壳,再用IDA打开它:

F5反编译伪代码,发现并没有源代码,这就是上面我们说的MFC编程的原因。
只能看汇编代码了,先搜索文本:flag、CTF:

刚好.text代码段中找到了MCTF{N3t_Rev_1s_E4ay}。提交的flag是flag{N3t_Rev_1s_E4ay}。
用OD打开,程序停在入口处:

在这搜索字符串flag、CTF:
并没有发现flag。

这时候我们发现程序的注释中写着:“下面的call跳转到00401A50”,暗示我们程序还有另外的程序领空,
而且我们可以在程序的断点和线程中也可以看到:在00401238有一个一次性的断点,有一条线程的入口地址是00401238:

直接在断点上右击,在反汇编窗口中跟随,就可以看到00401238,之后就可以直接开始搜索字符串了。

如果要让程序也按正常步骤运行到00401238,点击运行按钮17次,也就是外层代码运行17次之后,会跳转到地址00401238,也就是vb6chs.dll程序领空(动态链接库(Dynamic Link Library或者Dynamic-link library)缩写为vb6chs.dll,又称为动态链接库,是微软公司在微软视窗操作系统中实现共享函数库概念的一种实作方式。这类文件中封装了系统正常运行所不可或缺的大量代码。VB6CHS.DLL是VB的中文语言包的动态链接库文件)。

到了地址00401238之后,使用插件中文搜索引擎->智能搜索:

找到MCTF{N3t_Rev_1s_E4ay}

和它在IDA中的地址是一致的。

本文详细解析了一次MCTF挑战的过程,从下载并运行程序开始,通过PEiD检查软件是否加壳,使用IDA进行反编译,发现软件由MFC编程且未加壳。在IDA中搜索关键字如'flag'、'CTF',最终找到隐藏的MCTF{N3t_Rev_1s_E4ay}
4万+

被折叠的 条评论
为什么被折叠?



