日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

Android之使用IDA Pro静态分析so文件

發(fā)布時(shí)間:2023/12/4 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android之使用IDA Pro静态分析so文件 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?? 安卓應(yīng)用程序的開發(fā)語(yǔ)言是java,但是由于java層的代碼很容易被反編譯,而反編譯c/c++程序的難度比較大,所以現(xiàn)在很多安卓應(yīng)用程序的核心部分都使用NDK進(jìn)行開發(fā)。關(guān)于NDK的開發(fā)知識(shí)點(diǎn),請(qǐng)看這篇博客:Android之NDK開發(fā)。

? ? ? ? 關(guān)于NDK環(huán)境搭建的知識(shí)點(diǎn),請(qǐng)看這篇博客:Android NDK開發(fā)篇(一):新版NDK環(huán)境搭建(免Cygwin,超級(jí)快)

? ? ? ? 使用NDK開發(fā)能夠編譯c/c++程序,最終生成so文件。而so文件是一個(gè)二進(jìn)制文件,我們是無法直接分析so文件的,所以這里需要用到一個(gè)反編譯工具IDA Pro。IDA Pro能夠?qū)o文件進(jìn)行反匯編,從而將二進(jìn)制代碼轉(zhuǎn)化為匯編語(yǔ)言,利用IDA Pro神奇的F5功能還能將匯編語(yǔ)言反編譯成c/c++程序。這里使用的IDA Pro的版本為6.5版本。下面就介紹一下如何利用IDA Pro靜態(tài)分析so文件的步驟:

? ? ? ? (0) 打開IDA Pro,將libTestJniSo.so直接拖入到IDA Pro中,在彈出的”load a new file”窗口中,

? ? ? ?選擇”ELF for ARM(Shared object)[elf.ldw]”選項(xiàng),然后再點(diǎn)擊ok按鈕。如圖1所示:




? ? ? 等待一段時(shí)間后,我們就能看到反匯編libTestJniSo.so文件所得到的匯編代碼了。

? ? (1) 這里我們主要介紹幾個(gè)主要窗口,其中IDA View-A窗口顯示匯編代碼;Hex View-A窗口顯示機(jī)器碼(16進(jìn)制格式);Function window窗口中保存著各個(gè)函數(shù)的名字,找到對(duì)應(yīng)函數(shù)名字,再雙擊即可定位到對(duì)應(yīng)函數(shù)的匯編代碼。

例如我們想要查看Java_com_example_testjniso_MainActivity_helloFromJni函數(shù)的匯編代碼,

只需在Function window窗口中找到Java_com_example_testjniso_MainActivity_helloFromJni函數(shù)再雙擊即可。如圖2所示:


? ? ? ?如果想要查看某條指令的16進(jìn)制代碼,只需要單擊該指令,再切換到Hex View-A窗口即可。
? ? (2)如果IDA Pro帶有F5插件,那么我們可以按鍵盤上的F5,就可以將匯編代碼轉(zhuǎn)換為C代碼。例如我們想要查看forTest0函數(shù)的C代碼,我們只需要定位到forTest0函數(shù)的匯編代碼后,再按F5就會(huì)生成一個(gè)Pseudocode窗口,該窗口就會(huì)顯示forTest0函數(shù)的C代碼,如圖3所示:



? ? ?(3)我們一般是在Text View模式中查看匯編代碼,這樣很難看出程序的設(shè)計(jì)流程。另外IDA Pro還提供了一個(gè)Graph View,能夠幫助我們更好地查看代碼的設(shè)計(jì)流程。只需要在對(duì)應(yīng)的函數(shù)處右擊再點(diǎn)擊”Graph View”即可切換到Graph View模式,forTest0函數(shù)的Graph View如圖4所示:


? ? ? 等待一段時(shí)間后,我們就能看到反匯編libTestJniSo.so文件所得到的匯編代碼了。

? ? (1) 這里我們主要介紹幾個(gè)主要窗口,其中IDA View-A窗口顯示匯編代碼;Hex View-A窗口顯示機(jī)器碼(16進(jìn)制格式);Function window窗口中保存著各個(gè)函數(shù)的名字,找到對(duì)應(yīng)函數(shù)名字,再雙擊即可定位到對(duì)應(yīng)函數(shù)的匯編代碼。

例如我們想要查看Java_com_example_testjniso_MainActivity_helloFromJni函數(shù)的匯編代碼,

只需在Function window窗口中找到Java_com_example_testjniso_MainActivity_helloFromJni函數(shù)再雙擊即可。如圖2所示:


? ? ? ?如果想要查看某條指令的16進(jìn)制代碼,只需要單擊該指令,再切換到Hex View-A窗口即可。
? ? (2)如果IDA Pro帶有F5插件,那么我們可以按鍵盤上的F5,就可以將匯編代碼轉(zhuǎn)換為C代碼。例如我們想要查看forTest0函數(shù)的C代碼,我們只需要定位到forTest0函數(shù)的匯編代碼后,再按F5就會(huì)生成一個(gè)Pseudocode窗口,該窗口就會(huì)顯示forTest0函數(shù)的C代碼,如圖3所示:

? ?從圖4可以看出,BLE loc_E42這條語(yǔ)句后面跟了兩個(gè)箭頭,其中綠色箭頭表示當(dāng) BLE loc_E42 條件成立后所跳轉(zhuǎn)到的地方,紅色箭頭表示當(dāng)條件不成立后所跳轉(zhuǎn)到的地方。如果想要切換到Text View模式,則只需在對(duì)應(yīng)函數(shù)處右擊再點(diǎn)擊“Text View”即可。

? ? ? ?本文簡(jiǎn)單介紹了如何通過IDA Pro靜態(tài)分析so文件,從而查看對(duì)應(yīng)的匯編代碼。另外需要注意的是IDA Pro只能查看匯編代碼,不能修改匯編指令對(duì)應(yīng)的機(jī)器碼。如果想要修改so文件,需要使用UltraEdit等二進(jìn)制編輯軟件。逆向分析so文件,需要熟練掌握ARM匯編語(yǔ)言。這里有一篇介紹ARM匯編語(yǔ)言的博客ARM匯編編程基礎(chǔ)(一) -- ARM CPU寄存器,有興趣的同學(xué)可以看看。
? ? ? ?本文資源下載地址:安卓逆向?qū)W習(xí)筆記(3)


? ? ? 等待一段時(shí)間后,我們就能看到反匯編libTestJniSo.so文件所得到的匯編代碼了。

? ? (1) 這里我們主要介紹幾個(gè)主要窗口,其中IDA View-A窗口顯示匯編代碼;Hex View-A窗口顯示機(jī)器碼(16進(jìn)制格式);Function window窗口中保存著各個(gè)函數(shù)的名字,找到對(duì)應(yīng)函數(shù)名字,再雙擊即可定位到對(duì)應(yīng)函數(shù)的匯編代碼。

例如我們想要查看Java_com_example_testjniso_MainActivity_helloFromJni函數(shù)的匯編代碼,

只需在Function window窗口中找到Java_com_example_testjniso_MainActivity_helloFromJni函數(shù)再雙擊即可。如圖2所示:

? ? ? ?如果想要查看某條指令的16進(jìn)制代碼,只需要單擊該指令,再切換到Hex View-A窗口即可。
? ? (2)如果IDA Pro帶有F5插件,那么我們可以按鍵盤上的F5,就可以將匯編代碼轉(zhuǎn)換為C代碼。例如我們想要查看forTest0函數(shù)的C代碼,我們只需要定位到forTest0函數(shù)的匯編代碼后,再按F5就會(huì)生成一個(gè)Pseudocode窗口,該窗口就會(huì)顯示forTest0函數(shù)的C代碼,如圖3所示:

總結(jié)

以上是生活随笔為你收集整理的Android之使用IDA Pro静态分析so文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。