注意:ida6.1没有F5查看伪代码功能。本篇全程使用ida7.0版本
做题过程
下载后打开文件
1、双击打开,显示无法执行代码
2、查壳(文件为64位)
运行完后结果如下
2、放入ida64分析(前面查壳已知文件是64位的)
Shift+F12查看字符串,发现有可能是flag的地方
双击this is the right flag!,查看包含该字符串的位置
双击红框处(红框处为引用该字符串的位置)
跳转到下面这个界面(这个界面是流程视图,可以看出程序的执行流程)
这个界面比较难看懂,所以按F5一键反汇编(查看伪代码)
先找到关键字“this is the right flag!”,不难推测出sub_1400111D1可能是类似printf的作用
。。。。。。在伪代码界面编辑注释的方法(可跳过)
1、先用鼠标选中要编辑的那一行代码,然后右键选择edit comment
输入要编辑的内容,点击ok
ida会自动把编辑的内容判断为注释,并自动添加“//”,所以在编辑时,不需要自己在文段内容前加“//”
生成结果如下
。。。。。。
继续分析代码
因为得到的最终结果是this is the right flag!所以可知Str1和Str2是相等的
继续往上看代码
按下R键后可知,字符串Str2中的o都被改成了0
接下来查看Str2字符串的内容
鼠标选中Str2 ,按下键盘“X”键查看Str2这个变量的交叉引用(或者选中Str2后,右键选择Jump to xref..)
可以知道Str2字符串的内容是{hello_world},所以将该字符串中的o改为0,即可得到正确的flag
(前文已推出Str1和Str2字符串内容相等)
得到flag:flag{hell0_w0rld}
ida使用技巧总结:IDA Pro7.0使用技巧总结 - 先知社区 (aliyun.com)
过程总结
题目条件:
- PE文件(exe文件是属于PE文件的一种)
做题步骤:
- 双击exe文件看有无信息
- 使用查壳软件查壳,了解程序是多少位的(64位或32位)
- 使用ida进行分析(用Shift+F12查看一下字符串,寻找关键词(如flag等))
ida分析过程:
- Shift+F12查看一下字符串,寻找关键词(如flag等)
- 双击字符串,查看包含该字符串的位置
- 查看引用该字符串的详细地址
- 使用F5反汇编,查看伪代码
- 分析伪代码(选中数字后按键盘“R”键,即可将数字转换为字符;选中变量后 ,按下键盘“X”键查看该变量的交叉引用)