Android使用IDA Pro靜態(tài)分析so文件

      網(wǎng)友投稿 1646 2022-05-28

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

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

      使用NDK開發(fā)能夠編譯c/c++程序,最終生成so文件。而so文件是一個二進(jìn)制文件,我們是無法直接分析so文件的,所以這里需要用到一個反編譯工具IDA Pro。IDA Pro能夠?qū)o文件進(jìn)行反匯編,從而將二進(jìn)制代碼轉(zhuǎn)化為匯編語言,利用IDA Pro神奇的F5功能還能將匯編語言反編譯成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]”選項,然后再點擊ok按鈕。如圖1所示:

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

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

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

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

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

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

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

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

      Android之使用IDA Pro靜態(tài)分析so文件

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

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

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

      本文資源-:安卓逆向?qū)W習(xí)筆記(3)

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

      (1) 這里我們主要介紹幾個主要窗口,其中IDA View-A窗口顯示匯編代碼;Hex View-A窗口顯示機(jī)器碼(16進(jìn)制格式);Function window窗口中保存著各個函數(shù)的名字,找到對應(yīng)函數(shù)名字,再雙擊即可定位到對應(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就會生成一個Pseudocode窗口,該窗口就會顯示forTest0函數(shù)的C代碼,如圖3所示:

      Android ARM 匯編語言

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:新型存儲介質(zhì)對數(shù)據(jù)管理的影響
      下一篇:基于多用戶共享的Spark集群彈性擴(kuò)縮容
      相關(guān)文章
      亚洲av无码一区二区三区人妖| 亚洲色偷偷色噜噜狠狠99| WWW亚洲色大成网络.COM| 亚洲国产中文在线视频| 久久综合亚洲色一区二区三区| 亚洲AV无码国产丝袜在线观看| 国产亚洲人成无码网在线观看| 国产亚洲美日韩AV中文字幕无码成人| 亚洲成人影院在线观看| 亚洲AV色无码乱码在线观看| 色偷偷噜噜噜亚洲男人| 国产精品亚洲一区二区三区 | 亚洲福利在线观看| 亚洲国产综合精品中文第一区| 亚洲∧v久久久无码精品| 久久亚洲私人国产精品vA| 久久久国产精品亚洲一区| 亚洲综合激情另类小说区| 亚洲理论在线观看| 亚洲乱码中文字幕小综合| 亚洲人成综合网站7777香蕉 | 国产亚洲精品a在线观看app| 亚洲av永久无码精品漫画 | 久久久久亚洲AV无码专区首| 亚洲综合日韩中文字幕v在线| 在线免费观看亚洲| 亚洲免费网站在线观看| 亚洲人成网亚洲欧洲无码| 国内成人精品亚洲日本语音| 亚洲一本大道无码av天堂| 亚洲狠狠婷婷综合久久久久| 亚洲国产二区三区久久| 亚洲人成在线播放| 亚洲熟妇无码一区二区三区导航 | 亚洲av乱码中文一区二区三区| 亚洲av午夜精品一区二区三区| 亚洲中文字幕伊人久久无码| 国产亚洲免费的视频看| 久久久亚洲裙底偷窥综合| 亚洲国产系列一区二区三区| 国产亚洲一卡2卡3卡4卡新区|