導航條:
藍色 表示常規的指令函數
黑色 節與節之間的間隙
銀白色 數據內容
粉色 表示外部導入符號
暗黃色 表示ida未識別的內容
IDA主界面:
IDA View三種反匯編視圖:文本視圖、圖表視圖、路徑視圖
Hex View 十六進制窗口
Imports 導入函數窗口
Struceures 結構體窗口
Exports 導出函數窗口
Enums 枚舉窗口
Strings 字符串窗口
常用功能及快捷鍵:
空格鍵:切換文本視圖與圖表視圖
ESC:返回上一個操作地址
G:搜索地址和符號
N:對符號進行重命名
冒號鍵:常規注釋
分號鍵:可重復注釋
Alt+M:添加標簽
Ctrl+M:查看標簽
Ctrl+S:查看段的信息
代碼數據切換
C-->代碼/D-->數據/A-->ascii字符串/U-->解析成未定義的內容
X:查看交叉應用
F5:查看偽代碼
Alt+T:搜索文本
Alt+B:搜索十六進制
導入jni.h分析jni庫函數。
偽C代碼窗口:
右鍵
comment-注釋偽c代碼。
copy to -assembly-把偽c代碼復制到反匯編窗口的匯編代碼。
IDA可以修改so的hex來修改so,edit,然后edit-patchrogram,
在這里建議使用winhex來實現。
1.反匯編窗口
C 將當前地址處的數據解析成代碼
P
2.十六進制窗口
編輯內存數據和代碼
3.寄存器窗口
修改寄存器的值
4.模塊窗口
模塊路徑和地址
5.線程窗口
6.棧窗口
7.輸出信息窗口
ID調式常用功能:
1.斷點和運行
設置斷點 F2
設置斷點不可用 Disable breakpoint
編輯斷點 Edit breakpoint
刪除斷點 Delete breakpoint
繼續運行 F9
查看當前所有斷點 Ctrl+Alt+B
2.單步調式
單步步入 F7
單步步過 F8
運行到函數的返回地址 Ctrl+F7
運行到光標處 F4
3.IDC腳本
static main(void)
{
auto fp, dexAddress, end, size;
dexAddress = 0x77607640;
size = 0x19E118;
end = dexAddress + size;
fp = fopen("D:\\classes.dex", "wb");
for ( ; dexAddress < end; dexAddress++ )
fputc(Byte(dexAddress), fp);
}
4.修改內存數據
5.修改寄存器
7.NOP函數或代碼
NOP函數mov R0,R0(00 00 AO E1/00 1C)
清空指令(00 00 00 00/00 00)
函數頭直接返回mov pc,lr(0E F0 A0 E1/F7 46)
8.改變執行流程
修改寄存器的值
修改跳轉指令
注意:修改內存和修改代碼的時機選擇不同,因為修改內存和寄存器,必須調式到某一處,才能讓寄存器和內存是想要的值,此時修改,而且數據的值一般對程序影響不大,而修改代碼就
不同了,如果已經走到了那一句代碼,才去修改代碼,是要報錯的,提前在它運行到前面1-2條
指令時修改代碼。
ADD R6,PC,R6 //R6=PC+R6=847C+1840=9CBC+8? 9CC4
PC指令預讀
----讀取指令