一、软件介绍
IDA(Interactive DisAssembler)是一款功能强大的逆向工程软件,广泛应用于软件逆向、漏洞分析、恶意代码分析等领域。它具有以下特点和功能:
- 反汇编功能:IDA可以将二进制文件转换为可读的汇编代码,帮助分析人员理解程序的结构和逻辑。
- 交互式界面:IDA提供了友好的图形用户界面,支持多种操作方式,如图形视图、文本视图和交互式调试等,方便用户进行逆向分析。
- 多平台支持:IDA支持多种操作系统和处理器架构,包括Windows、Linux、macOS等,以及x86、ARM、MIPS等多种指令集。
- 插件扩展:IDA提供了强大的插件系统,用户可以根据自己的需求编写插件来扩展软件的功能,例如自动化分析、漏洞检测等。
- 动态调试:IDA可以与调试器集成,支持动态调试功能,帮助分析人员在运行时观察程序的行为和状态。
- 可视化分析:IDA提供了多种图形化分析工具,如函数图、调用图、数据流图等,帮助用户更直观地理解程序的结构和关系。
- 导入导出功能:IDA支持导入和导出多种文件格式,如ELF、PE、Mach-O等,方便与其他工具进行数据交换和协作分析。
- 强大的静态分析能力:IDA内置了多种静态分析算法和技术,如符号执行、数据流分析、模式匹配等,帮助用户深入理解程序的行为和漏洞。
安装
首先打开网页搜索吾爱破jie,进入吾爱破jie官网,找到逆向资源区栏目
在该栏目中找到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)用于提取数据、批量修改数据
打开方式
如何判断可执行文件的位数?
- 用 Linux 的 file 命令
- 用 peid 等查壳软件
常见窗口
- 函数列表窗口: 列举所有已经被 IDA 识别的函数
- IDA-View 窗口: 汇编代码窗口,空格键切换图形模式和文本模式,Tab 和 F5 键切换到伪代码窗口
- Pseudocode 窗口:伪代码窗口,在伪代码位置按下Tab 键可以切换到对应的汇编窗口
- 字符串窗口:列举程序代码所有引用到的字符串常量
- Shift + F12 打开字符串窗口
- Ctrl+F可以弹出底部搜索小窗口
- 其它窗口:HEX View、Exports、lmports、Structures
- 菜单项 View 菜单中可以找到 IDA 绝大部分窗口的入口
二、程序入口点和main函数
1.IDA是一款常用的逆向工程工具,用于分析和反汇编二进制程序。在IDA中,程序的入口点是指程序执行的起始位置,而main函数是C/C++程序的入口函数。
程序的入口点可以是任何一个函数,它是程序执行的起始位置。在IDA中,可以通过查看程序的导入表或者分析程序的启动代码来确定程序的入口点。
main函数是C/C++程序的入口函数,它是程序执行的起始位置。在C/C++程序中,main函数是程序开始执行的地方,它负责初始化程序的运行环境,并调用其他函数来完成具体的任务。
在IDA中,可以通过搜索main字符串或者查找main函数的调用来定位main函数。一般情况下,main函数会被标记为程序的入口点。
#c++程序如果运行失败可以打开PowerShell运行,就不会闪退了。
怎么找到我想要的代码呢
函数定位
在左侧按下Ctrl+F,插找main函数
发现有两个main函数,点进去第一个
到了main函数的真正代码了,然后我们要做合理的猜测
猜测有两个字符串应该是输出函数或是输入函数
先假设为输出函数,选中一个函数按下N来给它重命名
或者右键选这个
猜测这个函数应该是输入函数
更改结果
主意:在c语言里字符串相等的话返回0(不是1而是0)。所有这里要用一个!(不等于)
sub函数加地址,这种命名形式是ida命名的
字符串定位
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脚本进行扩展和自定义。可以编写脚本来搜索和定位特定的字符串,以满足个性化的需求。
通过运行程序,我知道有以下几个重点的字符串
打开字符串shift+F12
然后再字符串表中快速搜索“hi”
然后就找到了
可以按一下"U"键取消定义,在内存中是这样存储的,按“A”可以恢复字符串。
本质上是占用了一段连续的内存,只要找到记录字符串的首地址,标识符名就代表了字符的首地址
只需要问一下ida这个标识符什么代码引用了就可以了
在标识符点击右键,选择红框中的,快捷键X。就弹出了交叉引用的窗口,它就会展示出所有引用的这个字符串的代码
这里只有一处引用,所以直接点击ok就可以跳转过去。
然后再此处按一下F5或者TAB键,就找到了这个伪代码。
程序入口
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: 查看当前函数的栈
按下Ctrl+K即可
进入在Structures栏里, 点击Edit选择添加结构体即可添加结构体
选择结构体名后按d后即可添加成员,再次按d几次与上面d操作一样
选择某一成员,按alt+q可以把该成员变成IDA内所有可识别的其他类型结构体, 这种方法在IDA View窗口内也可以使用
双击结构体名称即可 将其收缩成一行,点击改行选择Ctrl和+(小键盘)即可拓展开
按;可以写入注释, 但是这样会让其他地方跳转到此位置也会显式该注释
Shift+; 则没有上面那种困扰,仅仅是单纯的本行注释
选择函数名按;可以添加函数注释
交叉引用(即所有引用该函数的列表)
如果目标函数不在当前模块,如何找到该函数在哪里调用?
如果有多个对话框调用了多个OnInitDialog, 即可使用交叉引用获取调用该函数的列表:
选中函数名,View+Open subviews+Cross references, 或者右键选中List cross references to..
又或者直接Ctrl+X即可
总结
这道题演示了如何使用 IDA 载入并分析一个可执行的二进制文件,并通过字符串定位的方式在茫茫的代码海洋中找到 main 函数,我们又使用 IDA 的伪代码功能生成 main 函数的伪代码,并修复没有名字的函数使得程序可读性得到极大提升。
思路: 运行程序 ->收集字符串寻找字符串引用代码 ->生成伪代码 ->修复匿名函数 ->分析程序逻辑 ->得到 Flag