攻防世界reverse新手之re1

攻防世界reverse新手之re1

下载附件后发现是exe文件,运行后显示
攻防世界reverse新手之re1
看来没给什么提示,于是用IDA反编译,按F5能够查看反编译C代码结果
攻防世界reverse新手之re1
阅读代码发现,程序的功能是将用户输入的flag存入v9,然后将v9和v5比较,如果值相同输出aFlag
既然需要比较flag,那正确的flag应该已经作为一个常量保存在程序内部,可以尝试直接查找flag


首先尝试查看IDA的string界面,view -> open subview -> string 打开
攻防世界reverse新手之re1
然而没有找到flag,那就换条路试试
使用vim打开,输入‘/’可进入查找模式
攻防世界reverse新手之re1
emmmm…绕了一圈发现flag直接是明文出现的,按理说是个编辑器打开就能找到,但为什么在IDA里却又找不到了?

查阅资料了解到,反编译的结果不是一定正确的,IDA采用递归下降法进行反编译,它的优点在于很少会在反编译时把数据当作代码来处理,不过这次IDA很明显把flag当成代码,进行了反编译,因此在string界面无法找到flag

解决方法是在IDA打开文件时选择binary file,在此模式下IDA不会进行反编译,此时再打开strings界面就可发现flag
攻防世界reverse新手之re1
由于在程序代码编译产生可执行文件过程中信息量是减少的,导致反编译器在反编译过程中需要做很多“猜”的工作,因此反编译结果也是可能存在错误。