一、软件介绍
IDA(Interactive DisAssembler)是一款功能强大的逆向工程软件,广泛应用于软件逆向、漏洞分析、恶意代码分析等领域。它具有以下特点和功能:
反汇编功能:IDA可以将二进制文件转换为可读的汇编代码,帮助分析人员理解程序的结构和逻辑。
交互式界面:IDA提供了友好的图形用户界面,支持多种操作方式,如图形视图、文本视图和交互式调试等,方便用户进行逆向分析。
多平台支持:IDA支持多种操作系统和处理器架构,包括Windows、Linux、macOS等,以及x86、ARM、MIPS等多种指令集。
插件扩展:IDA提供了强大的插件系统,用户可以根据自己的需求编写插件来扩展软件的功能,例如自动化分析、漏洞检测等。
动态调试:IDA可以与调试器集成,支持动态调试功能,帮助分析人员在运行时观察程序的行为和状态。
可视化分析:IDA提供了多种图形化分析工具,如函数图、调用图、数据流图等,帮助用户更直观地理解程序的结构和关系。
导入导出功能:IDA支持导入和导出多种文件格式,如ELF、PE、Mach-O等,方便与其他工具进行数据交换和协作分析。
强大的静态分析能力:IDA内置了多种静态分析算法和技术,如符号执行、数据流分析、模式匹配等,帮助用户深入理解程序的行为和漏洞。
IDA 有一个强大的插件系统,该插件系统支持使用 Python 编写插件,丰富的插件可以增强 IDA!
jiuzixue.com
IDA Python 插件环境:
1.Python 3.8(Python 插件支持环境)
2.如果系统中有多个版本的 Python,可以使用 IDA 根目录下的 idapyswitch.exe 切换 IDA 使用的Python 解释器
插件安装方法: 将 xxx.py 放到 IDA 的 plugins 目录
插件推荐:
1.KeyPatch(https://github.com/keystone-engine/keypatch)用于修改汇编指令 依赖安装: pip install keystone-engine 2. LazyIDA(https://github.com/P4nda0s/LazyIA)用于提取数据、批量修改数据
IDA字符串定位是指在使用IDA Pro进行逆向分析时,通过查找和定位程序中的字符串,来理解程序的功能和逻辑。IDA Pro是一款强大的反汇编工具,它可以将二进制文件转换为可读的汇编代码,并提供了丰富的功能来帮助分析人员进行逆向工程。
在IDA Pro中,可以使用以下几种方法来进行字符串定位:
字符串窗口:IDA Pro提供了一个字符串窗口,可以显示程序中的所有字符串。可以通过菜单栏的"View" -> “Open Subviews” -> "Strings"来打开字符串窗口。在字符串窗口中,可以搜索和过滤字符串,以便快速定位感兴趣的字符串。
文本搜索:在IDA Pro的主界面中,可以使用快捷键"Shift+F12"或者通过菜单栏的"Search" -> "Text"来打开文本搜索对话框。在文本搜索对话框中,可以输入关键字进行搜索,并选择搜索范围(当前函数、整个程序等),IDA Pro会列出所有匹配的字符串,并高亮显示。
反汇编代码中搜索:在IDA Pro的反汇编视图中,可以使用快捷键"Ctrl+F"或者通过菜单栏的"Search" -> "Find…"来打开搜索对话框。在搜索对话框中,可以输入关键字进行搜索,并选择搜索范围(当前函数、整个程序等),IDA Pro会列出所有匹配的代码行,并高亮显示。
脚本扩展:IDA Pro支持使用Python脚本进行扩展和自定义。可以编写脚本来搜索和定位特定的字符串,以满足个性化的需求。
通过运行程序,我知道有以下几个重点的字符串
程序入口
a: 转成ASCII
d: 转成数据, 按一次是db,两次dw,三次dd
c: 转成代码
u: 编程未定义
G: 跳转指令, 跳转到指定地址
ALT+T: 搜索指令,搜索关键字
F5: 把汇编编程C语言, 想回到汇编直接选IDA View即可
N: 按下某个名字并且修改名字,全局有效
ESC: 返回上一个页面
F12: 显示代码的流程图
Shift+F2: IDC脚本窗口
Shift+F3: 弹出Functions窗口
Shift+F9: 弹出Struct窗口
Shift+- 是把IDA代码中的十六进制与十进制互换
Q: 显示操作步长, 比如movsx edx, [esp + 18h]就会变成movsx edx, dword ptr [esp + 18h]
K: 隐藏操作步长
Ctrl+K: 查看当前函数的栈
进入在Structures栏里, 点击Edit选择添加结构体即可添加结构体
选择结构体名后按d后即可添加成员,再次按d几次与上面d操作一样
选择某一成员,按alt+q可以把该成员变成IDA内所有可识别的其他类型结构体, 这种方法在IDA View窗口内也可以使用
双击结构体名称即可 将其收缩成一行,点击改行选择Ctrl和+(小键盘)即可拓展开
按;可以写入注释, 但是这样会让其他地方跳转到此位置也会显式该注释
Shift+; 则没有上面那种困扰,仅仅是单纯的本行注释
选择函数名按;可以添加函数注释
交叉引用(即所有引用该函数的列表)
如果目标函数不在当前模块,如何找到该函数在哪里调用?
这道题演示了如何使用 IDA 载入并分析一个可执行的二进制文件,并通过字符串定位的方式在茫茫的代码海洋中找到 main 函数,我们又使用 IDA 的伪代码功能生成 main 函数的伪代码,并修复没有名字的函数使得程序可读性得到极大提升。
思路: 运行程序 ->收集字符串寻找字符串引用代码 ->生成伪代码 ->修复匿名函数 ->分析程序逻辑 ->得到 Flag