声明:纯技术分享,不搞恶意引导!
最近有小伙伴疯狂暗示,想让我出一篇关于逆向神器 IDA Pro 的教程。安排!这篇就来扒一扒 IDA Pro 的那些事儿。内容主要是我个人的理解,再结合网上冲浪搜集来的资料,把 IDA 的各种骚操作、使用技巧啥的都记录下来,方便以后自己复习,也希望能帮到各位。
IDA Pro:安全圈的“显微镜”
简介
交互式反汇编器专业版 (Interactive Disassembler Professional),江湖人称 IDA Pro。这货是个递归下降反汇编器,在逆向分析界那是响当当的存在。它能分析 x86、x64、ARM、MIPS、Java、.NET 等等各种平台的代码,简直是安全分析师的秘密武器!IDA 是 Hex-Rays 公司的王牌产品,这家公司在比利时,能写出这种神器的绝对是大佬中的大佬。
快速上手
为了让大家更容易理解,咱们直接拿 BUUCTF 里面一道叫 easyre 的题来演示 IDA 的用法。
新建工程:像搭积木一样简单
- 面对不同架构的可执行文件,得选对对应位数的 IDA 版本。
2. 打开 IDA,你会看到 “New” 和 “Go” 两个选项。“New” 是直接打开程序,“Go” 是先启动 IDA 界面。
3. 选 “Go”,启动后,在菜单栏里点 “File” -> “Open”,找到你要分析的程序。然后会跳出个窗口,别慌,默认设置就好。
这里 IDA 会列出一堆它觉得可能的文件类型,最上面那个一般是最靠谱的。IDA 会把 loaders 目录里的每个加载器都跑一遍,看看哪个能识别这个文件。
如果 IDA 给了你好几个加载器,选默认的通常没啥问题,除非你心里有数。
4. 继续默认,一路 “OK” 就完事儿了。
5. Duang~ 主窗口就出来了!
窗口介绍:工欲善其事,必先利其器
IDA 的主窗口长这样:
函数窗口 (Functions window):
左边这块就是函数窗口,所有函数都在这儿列着。拿到一个题目,一般从
main
函数开始,但main
函数通常不会直接显示,所以用Ctrl+F
搜一下。
* 汇编窗口 (IDA views):
这块是汇编代码的地盘,有两种显示方式:
图形模式
2. 文本模式
展示汇编代码和地址。
在图形模式下,右键选 “Text view” 或者按空格键就能切换到文本模式。
* 伪代码窗口:在汇编窗口文本模式中,对着函数按
F5
,就能看到伪代码。这玩意儿把汇编语言变成了更易读的伪代码,简直是救星!
* 十六进制窗口:
虽然叫“十六进制窗口”,但它其实能显示各种格式,还能当十六进制编辑器用。默认情况下,它会显示程序的十六进制代码和对应的 ASCII 字符,每行 16 个字节。你可以同时打开好几个十六进制窗口。
* 消息窗口:
这儿会显示 IDA 输出的信息,比如文件分析状态、操作错误等等,就像 Pycharm 的 Console 控制台。
* 导航栏:
导航栏就是那条彩色的水平带,它能线性地展示被加载文件的地址空间。默认情况下,它会显示整个二进制文件的地址范围。右击导航栏,会显示一个提示,告诉你光标所在位置对应二进制文件中的哪个位置。
简单来说,点哪儿跳哪儿,不同的颜色代表不同的数据段,比如 data 段、text 段等等。
修正:哪里不对点哪里
IDA 有时候会犯迷糊,需要我们手动纠正。
函数修正:
通常以
push ebp/rbp
指令开头的地址是函数的起始地址,但 IDA 有时会认错。这时候,在起始地址的汇编代码处,按快捷键P
(或者右键选 “Create Function”),就能把它变成函数。
2. 指令修正:如果 IDA 把某些指令识别错了,选中后按快捷键
D
就能手动修正。
3. 数据修正:在数据段,一个数据的长度可能是 1/2/4/8 字节,用快捷键
D
可以修改类型。如果某部分数据是字符串但没被正确识别,按快捷键A
就能把它变成 ASCII 字符串。
注释和重命名:见名知意很重要
重命名:
在 IDA 里,你可以修改变量名、函数名等等,方便理解代码。在需要重命名的地方右键,选 “Rename” 就行。
* 注释:
快捷键
;
可以在反汇编窗口加注释,快捷键/
可以在反编译窗口加注释。IDA 还能自动给不常用架构的代码加注释,在 “Auto comments” 那里勾选就行。
交叉引用:顺藤摸瓜找关系
IDA 的交叉引用分两种:
代码交叉引用:
表示一个指令把控制权交给另一个指令,能帮你了解指令和指令、指令和函数之间的调用关系。
* 数据交叉引用:用于追踪二进制文件访问数据的情况,能让你知道指令和数据之间有啥关系。
这部分需要比较扎实的汇编知识。
常用快捷键:效率提升 N 倍
F5:
在汇编窗口里按
F5
,能生成对应函数的伪代码。
* Ctrl+F5:可以把伪代码导出保存下来。
* Shift+F12:在汇编窗口里按
Shift+F12
,能打开字符串窗口。所有字符串都在这儿展示,你可以搜一些关键字符串。双击某个字符串,就能跳到汇编窗口中该字符串对应的位置。用Ctrl+F
可以查找字符串。
* Ctrl+X (交叉引用):
在汇编窗口中,用
Ctrl+X
可以查看哪些函数引用了这个字符串或数据。点 “OK” 会跳到相应位置。
* Alt+T (文本搜索):
IDA 文本搜索相当于在反汇编列表窗口文本模式下搜索子字符串。搜到字符串后,会自动跳到汇编窗口中对应的位置。
它只会查找完整的词,包括操作码助记符或常量。
选 “Find all occurences”,IDA 会在一个新窗口里显示所有搜索结果,方便你快速定位。
* G (跳转地址):汇编窗口左边是地址,右边是汇编代码。
在浏览代码的时候,可能会迷路。或者你知道想去的目标地址,但反汇编窗口里没有可供双击导航的名称。这时候,用
G
就能跳到指定位置。
* N (重命名):
可以把一些函数名或者变量名改成方便理解的名字。
* Ctrl+Z (撤回操作):不小心改错了?
Ctrl+Z
帮你回到上一步。
数据类型转换快捷键:关键时刻显身手
之前做过一道逆向题,flag 是 16 进制 ASCII 值,当时就靠这些快捷键搞定的。
D (转换成数据形式):
分析数据时,有时候需要把字符串转换成数据。
* A (转换成字符形式):转换成字符串。
* C (转换成汇编代码):转换成汇编代码。
* U (转成原始字符):转换成最原始的状态。
* Shift+E (导出数据):想导出数据?选中后按
Shift+E
,选你想导出的方式。
* 数据转化形式:
分析伪代码时,有时候要对数据进行类型转化。右键数据,会出现这些选项:
- Hexadecimal: 十六进制
- Octal: 八进制
- Char: 字符
- Enum: 枚举
easyre 怎么破?
其实前面已经剧透了。在 Function window 中找到
main
函数,在汇编窗口中对着函数按F5
得到伪代码界面,分析伪代码,发现只要输入两个一样的数据就能打印 flag。
总结
这篇就介绍了 IDA 的一些常用窗口和功能。当然,IDA 还有很多隐藏技能等着你去挖掘。平时多做题,熟练掌握这些技巧,你也能成为逆向大神!
想更深入了解 IDA?可以找本书啃啃。有需要的可以私聊我。
题外话
黑客&网络安全如何学习
今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。
1.学习路线图
攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我们和网安大厂360共同研发的网安视频教程,之前都是内部资源,专业方面绝对可以秒杀国内99%的机构和个人教学!全网独一份,你不可能在网上找到这么专业的教程。
内容涵盖了入门必备的操作系统、计算机网络和编程语言等初级知识,而且包含了中级的各种渗透技术,并且还有后期的CTF对抗、区块链安全等高阶技术。总共200多节视频,200多G的资源,不用担心学不全。
因篇幅有限,仅展示部分资料,需要见下图即可前往获取
🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源
3.技术文档和电子书
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。
因篇幅有限,仅展示部分资料,需要见下图即可前往获取
🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源
4.工具包、面试题和源码
“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。
还有我视频里讲的案例源码和对应的工具包,需要的话见下图即可前往获取
🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源
最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。
这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。
参考解析:深信服官网、奇安信官网、Freebuf、csdn等
内容特点:条理清晰,含图像化表示更加易懂。
内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…
因篇幅有限,仅展示部分资料,需要见下图即可前往获取
🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。