前面提到好幾次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