IDA靜態分析

一: 分析「getText」函數ide

1.首先任意打開一個函數,以getText函數爲例,以下圖所示。函數

IDA靜態分析

2.雙擊打開該函數,開始分析彙編指令,箭頭所指位置是指令的開始處,以下圖所示。3d

IDA靜態分析

.text:00001148 STMFD SP!,{R3-R5,LR}blog

壓棧操做,把R3-R5,LR分別壓到棧頂。get

.text:0000114C MOV R5, R1源碼

把R1賦值給R5。it

.text:00001150 LDR R3, [R0]class

將R0的地址給R3。im

.text:00001154 MOV R4, R0d3

將R0給R4。

.text:00001164 BLX R3

跳轉帶連接狀態切換到R3。

.text:0000117C ADD R3, PC, R3

將PC和R3相加給R3。

IDA靜態分析

已經知道他的操做流程,那麼它的這些操做爲了實現什麼邏輯呢?帶着這個疑問繼續分析。

二:對比分析源碼、僞代碼、彙編指令三者對應關係

1.以下圖所示爲源代碼的邏輯,它在獲取字段的值。

IDA靜態分析

2.在反彙編窗口中找到getText函數,按「F5」,將彙編指令切換爲僞代碼,經過查看IDA裏的僞代碼發現:默認傳入的參數類型須要修改才能查看,以下圖所示。

IDA靜態分析

3.選中getText函數的參數,右鍵N對名稱進行修改。第一個參數就是剛剛看到的env,直接改成env;右鍵Y對類型的修改,將類型修改成JNIEnv*。這樣就識別完成了,效果以下圖所示。

IDA靜態分析

分析此處的邏輯:

第一個跳轉是:Findclass

第二個跳轉是:GetFindID

第三個跳轉是:GetObjectFieId

第四個跳轉是:GetStringUTFChars

第五個是返回一個:NewStringUTF

接着修改參數,以下圖所示。

IDA靜態分析

4.參數修改完成後,右鍵選擇copy將僞代碼拷貝到反彙編窗口,也就是getText函數的彙編指令,以下圖所示。

IDA靜態分析

這就是最終的效果,分析最終效果,即可以瞭解這些指令的做用,以下圖所示。

IDA靜態分析

小結

本次主要分享了靜態分析的流程:

一、分析函數,查看ARM彙編指令。

二、對比分析源碼、僞代碼、彙編指令三者對應關係。

三、查看跳轉,理清邏輯。

四、總結邏輯,實現過程。

相關文章
相關標籤/搜索