前面提到好几次IDA,这个工具算是反汇编界的神器了。更加细节的内容可以看《IDA Pro权威指南》 ,这里只是一些笔记而已。
导航条:
蓝色 标识常规的指令函数
黑色 节与节之间的间隙
银白色 数据内容
粉色 表示外部导入符号
暗黄色 表示ida未识别的内容,可能是一些dcb指令,这时候可以选择
C 将当前地址处的数据解析成代码
P
IDA主界面:
IDA View 3种反汇编视图:文本视图,图标视图,路径视图
HexView 十六进制编辑/查看窗口
Imports 导入函数窗口
Structures 结构体窗口
Exports 导出函数窗口
Enums 枚举窗口
Strings 字符串窗口
IDA调试界面:下面的界面是IDA进入调试状态才会出现的,界面显示一些内存,寄存器等动态信息
反汇编窗口: 显示运行指令,数据等
十六进制窗口,用于查看/修改内存数据和代码
寄存器窗口:查看/修改寄存器的值
模块窗口:模块路径和地址
线程窗口:显示线程信息
栈窗口
输出信息窗口
常用功能和快捷键:
空格键: 切换反汇编文本视图和图表视图
ESC: 返回上一个操作地址
G:搜索地址和符号
N:对符号进行重命名
冒号/分号(:;) 常规注释
Alt + M: 添加标签
Ctrl + M: 查看标签
Ctrl + S: 查看段信息
代码数据切换:
C-->代码
D-->数据
A-->ascll 字符串
U-->解析成未定义的内容
X:查看交叉引用
F5:32位中的查看伪代码功能,虽然不太准确,有人说是神奇的F5插件
Alt+T: 搜索文本
Alt+B:搜索十六进制
导入jni.h 分析jni库函数,这里记录下导入方法:
步骤1:
检点修改jni.h,注释第27行的#include<stdarg.h>,还有将1122行的#define JNIEXPORT_attribute_((visibility("default"))) 改成 #define JNIEXPORT ,修改完后可以成功导入
步骤2:
点击IDA Pro 菜单项 "file --> load file --> parse c header file ",选择jni.h 头文件
步骤3:
点击IDA Pro 主界面上的“structures”选项卡,然后按下Insert键打开“create structure/union”对话框导入两个接口体的接口,点击界面上的“add standard structure” 按钮,在打开的结构体选择对话框中选择 JNINativeInterface并点击OK返回,同理JNIInvokeInterface结构体也一样。
步骤4:
在0x29C等调用Env 的地方右键,出现jni函数。因为很多时候只是这样一个0x29C 的数我们很难知道确切的含义。
伪C代码窗口:
右键
comment 添加注释
copy to -assembly 把伪c代码复制到反汇编窗口中的汇编代码,如下所示,可以帮助分析。
IDA可以修改so 的hex 来实现修改so,edit,然后edit --> patch program --> apply patches into file
但是依旧是用winhex 和 notepad++ 这种编辑工具来进行编辑。
IDA调试常用功能:
1、断点和运行:
设置断点 F2
设置断点不可用 Disable breakpoint
编辑断点 Edit breakpoint
删除断点 Delete breakpoint
继续运行 F9
查看当前所有断点 Ctrl + Alt +B
2、单步模式
单步步入 F7
单步步过 F8
运行到函数的返回地址 Ctrl + F7
运行到光标处 F4