版權聲明:本文爲HaiyuKing原創文章,轉載請註明出處!html
安卓應用程序的開發語言是java,可是因爲java層的代碼很容易被反編譯,而反編譯c/c++程序的難度比較大,因此如今不少安卓應用程序的核心部分都使用NDK進行開發。使用NDK開發可以編譯c/c++程序,最終生成so文件。而so文件是一個二進制文件,咱們是沒法直接分析so文件的,因此這裏須要用到一個反編譯工具IDA Pro。IDA Pro可以對so文件進行反彙編,從而將二進制代碼轉化爲彙編語言,利用IDA Pro神奇的F5功能還能將彙編語言反編譯成c/c++程序。java
--摘自《安卓逆向學習筆記 (3)- 使用IDA Pro靜態分析so文件》python
連接: https://pan.baidu.com/s/1c3R6iZY 密碼: tvsnc++
備用連接:https://pan.baidu.com/s/1MvisS6uzwnR9hiAcA2Fz8g 密碼:kljosass
下載IDA_Pro_v7.0_Portable.zip便可。函數
直接解壓縮便可。工具
注意:綠色版解壓縮路徑不要含有中文或者路徑長度不能超過72字符。(python模塊自身的bug)學習
雙擊ida64.exe,打開軟件IDA Pro測試
原本按照個人理解,若是想要反編譯的so文件是在arm64-v8a目錄下,則只能打開ida64.exe文件;若是想要反編譯的so文件是在armeabi目錄下,則只能打開ida.exe文件。可是我這邊的測試結果時:spa
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代碼
源代碼以下: