1-基本分析
目标 T1.exe
使用 IDA 打开
找 main 函数
先运行一下该程序
可以发现该程序要求输入一个字符串,输入1直接退出。说明该题要求找到正确的输入使程序运行结果不为"you are wrong!"
C语言的入口函数是 main 函数,main 符号名在编译阶段已经删除,如何在该程序的 5385 个函数中找到 main 函数呢?这时候就需要用到【代码定位】技巧中的【字符串定位】。
通过运行 T1.exe 程序,我们已知该程序会输出
等字符串,我们可以搜索这些字符串,来找到引用这些字符串的代码。
菜单 View -> Open SubViews -> Strings,ctrl+f, 输入 Hi CTFer,双击跳转到相应位置
单击 aHiCtferInputYo 标识符名字,按 X 找到引用 aHiCtferInputYo 标识符的代码,跳转到目标
直接跳转过去后是汇编代码,按 tab 将这段代码转换成伪代码
根据伪代码逻辑分析
sub_45A1C0 是 main
sub_456502 是 printf 或 puts
sub_4554EF 是 scanf
sub_454086 是 strcmp
还原结果类似如下:
如果输入与 flag{YOU_FIND_IT} 相等,则 strcmp 返回 0,否则返回非0。
strcmp 返回 0 则执行 printf("you are right!\n");
Source & Reference