版權聲明:本文為HaiyuKing原創文章,轉載請注明出處!
概述
安卓應用程序的開發語言是java,但是由於java層的代碼很容易被反編譯,而反編譯c/c++程序的難度比較大,所以現在很多安卓應用程序的核心部分都使用NDK進行開發。使用NDK開發能夠編譯c/c++程序,最終生成so文件。而so文件是一個二進制文件,我們是無法直接分析so文件的,所以這里需要用到一個反編譯工具IDA Pro。IDA Pro能夠對so文件進行反匯編,從而將二進制代碼轉化為匯編語言,利用IDA Pro神奇的F5功能還能將匯編語言反編譯成c/c++程序。
--摘自《安卓逆向學習筆記 (3)- 使用IDA Pro靜態分析so文件》
下載
鏈接: https://pan.baidu.com/s/1c3R6iZY 密碼: tvsn
備用鏈接:https://pan.baidu.com/s/1MvisS6uzwnR9hiAcA2Fz8g 密碼:kljo

下載IDA_Pro_v7.0_Portable.zip即可。
安裝
直接解壓縮即可。
注意:綠色版解壓縮路徑不要含有中文或者路徑長度不能超過72字符。(python模塊自身的bug)

使用
雙擊ida64.exe,打開軟件IDA Pro
本來按照我的理解,如果想要反編譯的so文件是在arm64-v8a目錄下,則只能打開ida64.exe文件;如果想要反編譯的so文件是在armeabi目錄下,則只能打開ida.exe文件。但是我這邊的測試結果時:
ida64.exe:打開arm64-v8a目錄下的so文件正常(可以找到調用的方法名),打開armeabi目錄下的so文件不正常(無法找到調用的方法名);
ida.exe:打開arm64-v8a目錄下的so,打開armeabi目錄下的so文件都不正常(無法找到調用的方法名);
所以我目前的操作是雙擊打開ida64.exe,然后反編譯arm64-v8a目錄下的so文件!




將so文件拖拽到上面的空白區域,選擇”ELF64 for ARM64(Shared object)[elf64.ldw]”選項,然后再點擊ok按鈕
注意,因為我雙擊打開的是ida64.exe,所以需要打開的so文件是arm64-v8a目錄中的,不能是armeabi目錄中的。(以HelloWorld項目為例)

等待一段時間后,我們就能看到反匯編so文件所得到的匯編代碼了。

定位到想要查看的函數(一般先定位到項目中調用的第一個函數,比如HelloWorld項目中的stringFromJNI方法)


按鍵盤上的F5,就可以將匯編代碼轉換為C代碼


源代碼如下:

退出(默認即可)

參考資料
安卓逆向學習筆記 (3)- 使用IDA Pro靜態分析so文件
[Disassemblers] IDA Pro 7.0 綠色版
