一: 分析「getText」函數ide
1.首先任意打開一個函數,以getText函數爲例,以下圖所示。函數
2.雙擊打開該函數,開始分析彙編指令,箭頭所指位置是指令的開始處,以下圖所示。3d
.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。
已經知道他的操做流程,那麼它的這些操做爲了實現什麼邏輯呢?帶着這個疑問繼續分析。
二:對比分析源碼、僞代碼、彙編指令三者對應關係
1.以下圖所示爲源代碼的邏輯,它在獲取字段的值。
2.在反彙編窗口中找到getText函數,按「F5」,將彙編指令切換爲僞代碼,經過查看IDA裏的僞代碼發現:默認傳入的參數類型須要修改才能查看,以下圖所示。
3.選中getText函數的參數,右鍵N對名稱進行修改。第一個參數就是剛剛看到的env,直接改成env;右鍵Y對類型的修改,將類型修改成JNIEnv*。這樣就識別完成了,效果以下圖所示。
分析此處的邏輯:
第一個跳轉是:Findclass
第二個跳轉是:GetFindID
第三個跳轉是:GetObjectFieId
第四個跳轉是:GetStringUTFChars
第五個是返回一個:NewStringUTF
接着修改參數,以下圖所示。
4.參數修改完成後,右鍵選擇copy將僞代碼拷貝到反彙編窗口,也就是getText函數的彙編指令,以下圖所示。
這就是最終的效果,分析最終效果,即可以瞭解這些指令的做用,以下圖所示。
小結
本次主要分享了靜態分析的流程:
一、分析函數,查看ARM彙編指令。
二、對比分析源碼、僞代碼、彙編指令三者對應關係。
三、查看跳轉,理清邏輯。
四、總結邏輯,實現過程。