工具的使用
自己的记性不太好,所以做了一个笔记,总结了一下逆向常用工具IDA和OD的使用,用来平时的翻阅,也希望可以帮助到大家。
第一章 IDA使用介绍
简介
空格:切换代码窗口的显示方式(在图形窗口与文本窗口之间切换)
窗口介绍:“View”–“open subviews”, 可以看到IDA的各个子窗口
常用快捷键:
![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20210303191810237.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70
基本使用:1.静态分析功能
2.函数控制流图显示
3.F5 Hex-Rays插件
4.变量类型指定 快捷键y
5.变量重命名 点住这个变量 快捷键n
显示设置
可在“Options”-“Gemeral”-"Disassembly"窗口中设置反汇编的显示内容模式
代码定位:
1、交叉引用
函数调用关系
字符串引用关系
2、字符串定位
提取所有字符串shift+f12
查看交叉引用 :快捷键X
栈帧分析
双击任意局部变量将进入栈帧窗口视图
结构体分析:
IDA可对结构体进行自定义并对结构体数据进行解析, 以增强程序的可读性,步骤如下:
1、Shift + F1:打开本地类型;
2、insert:插入自定义的结构体;这里可以直接复制c语言定义;
3、Shift + F9:打开结构体;
4、Insert:添加上面创建的结构体;
5、选取相应数据,Alt + Q 将其上面的结构体进行解析。
程序Patch:
- Patch指修改程序中的指令达到一些目的
绕过反调试
绕过验证
其他 - 将光标置于某条指令
- Edit -> Patch Program -> Change bytes来修改代码,如果这里你安装了keypatch插件,那么是可以直接通过修改汇编指令来实现程序Patch的。
- 应用Path:Edit -> Patch Program -> Apply patch to input file
程序与代码的转换:
- 若某个函数未被引用,可能无法被IDA识别
- 导航窗
- 手动定位,识别为函数:快捷键 p
- 将代码转换为数据:快捷键 d
- 将数据转换为代码:快捷键 c
通常用来清除花指令等
IDA没有撤销功能,慎重转换
IDA的动态调试:
IDA也提供了动态调试的功能,调试步骤如下:
- Debugger -> Select debugger
选择local windows debugger - F2对入口点处或者其他地方下断点
- Debugger -> Start process 启动调试
- 优点
可以在F5的窗格中单步跟踪伪代码 - 缺点
调试功能没有OllyDBG等强大,没有反调试、dump、硬件断点、内存断点等功能。
IDA安装插件
插件安装:复制相应文件到ida安装目录plugin文件夹
-
Hex-Rays Decompiler:F5插件
支持x86与x64
6.8支持arm
6.9支持arm64
6.95支持PowerPC -
IDAPython:IDC脚本的Python接口
IDA其他常用的一些插件
IDA FLIRT Signature Database – 用于识别静态编译的可执行文件中的库函数
Find Crypt – 寻找常用加密算法中的常数(需要安装 yara-python)
IDA signsrch – 寻找二进制文件所使用的加密、压缩算法
Ponce – 污点分析和符号化执行工具
snowman decompiler – C/C++反汇编插件(F3 进行反汇编)
CodeXplorer – 自动类型重建以及对象浏览(C++)(jump to disasm)
IDA Ref – 汇编指令注释(支持arm,x86,mips)
auto re – 函数自动重命名
nao – dead code 清除HexRaysPyTools – 类/结构体创建和虚函数表检测
DIE – 动态调试增强工具,保存函数调用上下文信息
sk3wldbg – IDA 动态调试器,支持多平台
idaemu – 模拟代码执行(支持X86、ARM平台)
Diaphora – 程序差异比较
Keypatch – 基于 Keystone 的 Patch 二进制文件插件
FRIEND – 哪里不会点哪里,提升汇编格式的可读性、提供指令、寄存器的文档等
SimplifyGraph – 简化复杂的函数流程图
bincat – 静态二进制代码分析工具包,2017 Hex-Rays 插件第一名
golang_loader_assist – Golang编译的二进制文件分析助手
IDA脚本功能
File->Script command ,打开IDA的脚本执行窗口,脚本语言类型默认是IDC,可以修改成Python
第二章 OD的简介
OllyDBG可在动态调试过程中实时查看程序反汇编、内存、数据等信息,并可对其进行修改编辑等操作。
目前市面上有很多OllyDBG个人修改版,主要是为了防止被反反调试检测到而做的定制修改,并且自己搭配了一些常用的插件,这里我们使用一款Olly4st的修改版OD来作为演示。我们也统一称其为OllyDBG。
OD的窗口
反汇编窗口:显示被调试程序的反汇编代码,标题栏上的地址、HEX 数据、反汇编、注释可以通过在窗口中右击出现的菜单 界面选项->隐藏标题 或 显示标题 来进行切换是否显示。用鼠标左键点击注释标签可以切换注释显示的方式。
寄存器窗口:显示当前所选线程的 CPU 寄存器内容。同样点击标签 寄存器 (FPU) 可以切换显示寄存器的方式。
信息窗口:显示反汇编窗口中选中的第一个命令的参数及一些跳转目标地址、字串等。
内存窗口:显示内存或文件的内容。右键菜单可用于切换显示方式。
堆栈窗口:显示当前线程的堆栈。
常用快捷键
断点功能
- 设置断点
Int3断点:可以有多个,设置在代码上
内存断点:通过设置内存页面属性异常来实现的断点功能,不去修改程序代码
硬件断点:使用调试寄存器设置断点,不会修改程序代码,最多设置4个
希望大家可以有所收获!!!