re1,输入正确的flag,和IDA的简单用法
1.题目介绍
描述:菜鸡开始学习逆向工程,首先是最简单的题目
来源:DUTCTF
场景:暂无
附件:Windows上的可执行文件,名称为“b5c583c7d2664a4da42ef2d790732f09.exe”,大小约为89KB。

2.文件分析
分析外壳:先将exe文件拖动到“Exeinfo PE”中。知道这个exe文件没有被加壳而且使用C++语言编写的,推测开发环境可能是Microsoft Visual Studio 2012左右的版本。如下图所示。

打开程序:界面显示“欢迎来到DUTCTF哟,这是一道很可爱很简单的逆向题哟,输入flag吧:”,如果输入错误则会提示“flag不太对哟,再试试呗,加油哟”。按下任意键后程序会退出。由此可以推测如果输入了正确的flag,那程序很有可能会显示flag正确之类的话语。

3.逆向分析
基于以上的分析——该程序没有加壳,说明可以直接进行反汇编操作。Exeinfo PE推荐的反汇编工具是OllyDbg,笔者在这里使用的是IDA Pro(32位或64位的),因为IDA可以清楚地显示出结构化的汇编代码框图,特别在遇到跳转指令的时候,有助于新手理清程序的逻辑。
先用IDA Pro 64打开这个exe文件,会出现如下的窗口。一般像这种用VS C/C++写的“控制台应用程序”都会有一个main函数。所以可以先尝试在IDA中靠左的Function Name(函数名)小窗口里寻找含有“_main”字样的函数,随后双击就可以跳转到该程序的main函数了。

3.1 附加调试器
为了获得这个程序的flag,需要在动态调试程序以观察寄存器中的值。程序代码中一定会有判断语句或模块来检测输入的flag是否正确,所以寄存器(或内存)中会存在你输入错误的flag和正确的flag。
在工具栏(有很多图标的那一栏)红色方框标注的下拉列表中选择,“Local Windows Debugger”(本地Windows调试器)

如此设置之后就能把调试器附加到进程调试了。
3.2 插入断点并逐语句观察
IDA简单用法:在IDA Pro中,光标选中某一行指令,再按下F2即可插入断点,此时该指令会以红色高亮显示。就像下面这张图片。

图片显示在 call _scanf 指令处插入一个断点。此外按下Ctrl+Alt+B组合键可以查看已插入断点的列表。
按下F9就可调试附加进程,在程序启动后会在断点处停下。要使得程序的指令逐语句执行,可以按下F7或F8,其中F7为“Step into”,F8为“Step over”。Step into意味着在遇到call指令(调用函数指令)时会跳转到函数内部,而Step over则不跳转到函数内部,直接执行call指令之后的指令。当前执行语句会以“浅蓝色高亮”显示。【下图红色方框框定的那一行】

要终止进程,可以按下Ctrl+F2组合键。
以上大致介绍了以下IDA的简单用法,下面就该开工了。
在程序中随便输入一个“错误”的flag(一开始输入肯定是错误的),笔者输入的“222”。在指令lea eax, [ebp+var_24]中的eax寄存器发现了输入错误的flag“222”。(鼠标指针放在eax单词这里,旁边就会显示当前eax的值)

但是在下一句指令lea ecx, [ebp+var_44]中的ecx寄存器中发现疑似是flag的字符串,“DUTCTF{We1c0met0DUTCTF}”。

不管那么多,先试试再说。把这段看起来像flag的字符串输入到程序里观察。结果还就是那一段字符串。程序提示“flag get√”。





