汇编语言与逆向技术基础 八、静态逆向技术
汇编语言与逆向技术基础 八、静态逆向技术
知识点
逆向技术
IDA Pro 简介
IDA Pro 窗口
IDA Pro 的操作
交叉引用
函数分析
图形化显示
增强反汇编的相关功能
逆向技术
逆向工程
逆向工程(又称 逆向技术 ),是一种产品设计技术再现过程
- 对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能特性及技术规格等设计要素,以制作出功能相近,但又不完全一样的产品。
逆向工程源于商业及军事领域中的硬件分析
其主要目的是在不能轻易获得必要的生产信息的情况下,直接从成品分析,推导出产品的设计原理
软件逆向工程
软件逆向工程(Software Reverse Engineering)是指根据软件程序的反汇编代码(静态)和执行过程(动态),通过逆向分析来推导出软件具体的实现方法。
软件逆向工程可能会被误认为是对知识产权的严重侵害,但是在实际应用上,反而可能会保护知识产权所有者。
- 漏洞发掘
- 取证
- 性能分析
- 软件保护
逆向分析技术
静态分析
- IDA Pro
动态分析
- OllyDbg
- WinDbg
IDA Pro 简介
IDA Pro 是 Hex Rays 公司出品的一款交互式反汇编工具支持 32 位 和 64 位 程序的反汇编
IDA Pro
函数发现
栈分析
call 和 jmp 指令的区别:call指令会对当前指令的下一条指令进行压栈操作,来实现函数的返回,而jmp不会压栈
A函数调用B函数,A叫caller,B叫callee
局部变量的识别
FLIRT 快速的库函数识别与标记
- Fast Library Identification and Recognition Technology
IDA Pro 除了支持 PE 文件格式 ,还支持 DOS 、 UNIX 、Mac 、 Java 、 .NET 等平台的文件格式
IDA Pro 会自动识别处理器类型
IDA 是 按区块装载 PE 文件的,例如 .text 代码块 、 .data 数据块 、 .rsrc 资源块 等。
在默认情况下, IDA Pro 的反汇编代码中不包含 PE 头或资源节。
IDA Pro 窗口
图形模式(代码块):在图形模式中,IDA Pro 默认不显示行号 、 操作码,显示一个一个基本块的关系
文本模式
反汇编窗口
箭头
红色:False 分支
绿色:True 分支
蓝色:无条件跳转
循环:向上的箭头
文本模式
函数窗口
列举所有函数
- 可以发现 规模庞大的函数 、 规模很小的函数。
名字窗口
列举 内存 地址的名字 ,包括函数名 、代码 的名字 、数据 的名字 和字符串
字符串窗口
显示内存中识别出来的所有字符串
导入表窗口
列出程序导入的所有函数
导出表窗口
列出一个函数所有导出的函数
其它窗口
IDA Pro 操作
Import 和 Strings 窗口的导航
双击字符串会跳转到反汇编窗口
链接 Link
在反汇编窗口双击地址, IDA Pro 会跳转到地址所在的反汇编窗口
链接类型
sub 前缀的链接
- 函数的地址
loc 前缀的链接
- 跳转地址
IDA Pro 的操作纪录(History)
前进、后退按钮,跳转到之前或者周后的操作状态
导航栏 Navigation Band
浅蓝色 : 链接库的代码 Library code
红色 : 编译器代码 Compiler generated code
深蓝色 : 用户写的代码 Analyze this
跳转到指定地址
快捷键 g
跳转到内存地址或者地址名
搜索
在反汇编窗口搜索
- 立即数
- 字符串
- 字节
- 字节序列
交叉引用 Cross References
代码的交叉引用 CODE XREF
CODE XREF 显示该函数在什么地方被调用了
默认设置只显示两处被调用的内存地址
鼠标 放置在 CODE XREF 的地址上,会弹出引用该数据地址上的反汇编信息
双击 CODE XREF 的地址,会跳转到该地址的反汇编窗口
查看所有的 XREF 地址
点击函数名,然后按“ X ”键
数据的交叉引用 DATA XREF
鼠标 放置在 DATA XREF 的地址上,会弹出引用该数据地址上的反汇编信息
双击 DATA XREF 的地址,会跳转到该地址的反汇编窗口
函数分析
函数和参数的识别
IDA Pro 会自动识别函数,并给函数、函数的参数、函数的局部变量进行命名
地址从高到低:参数、返回值、(基地址ebp)、变量
默认的命名规则
局部变量(local variable)
前缀 : var_
后缀 : 相对 EBP 的偏移值
偏移值为负值
参数(argument)
前缀: arg
后缀:相对于 EBP 的偏移值
偏移为 正值
参数和局部变量
图像化显示
IDA Pro 的 Graphing Options
Flow chart
- 显示当前函数的控制流图
Function calls
- 显示整个程序的函数调用图
增强反汇编的相关功能
内存地址的重命名
在 IDA Pro 中把一个函数名重命名为一个有意义的字符串,例如 sub_401000 重命名为 ReverseBackdoorThread
重命名后,所有交叉引用的信息会自动更新
注释
冒号 (:),添加注释,不更新交叉引用 XREF
分号 (;),添加注释,并更新交叉引用 XREF 的信息
数字格式的转化
默认显示十六进制的数字
右键菜单中可以选择其它的数字格式
使用符号常量
- 使 Windows API 函数的参数更加清晰
重新定义代码和数字
U : 撤销 IDA 对函数、数字的定义
C : 把原始数据定义为代码
D : 把原始数据定义为 BYTE, WORD, DWORD
A : 把原始数据定义为 ASCII 字符串
Plug-ins 脚本
IDC (IDA‘s scripting language) 和 Python scripts available (link Ch6a)