安卓逆向學習——dex文件

DEX文件實際上就是Dalvik虛擬機的可執行程序,所以這個文件對於逆向分析工程師是十分重要的,因爲我們需要對可執行文件進行調試分析結果。
JAVA文件的編譯過程是由.java文件生成.class文件,然後在進行編譯,編譯成.dex文件的過程。
我們可以隨便在一個文本文件中編寫JAVA程序如下
在這裏插入圖片描述
注意JAVA類名是什麼,這個java文件名應該就是什麼。而且如果出現中文最好用反編譯工具轉換成Unicode防止亂碼。
接下來我們將Java文件編譯成Class文件,如下圖,輸入javac命令後直接將文件拖入命令行
在這裏插入圖片描述
發現桌面生成了一個Class文件
在這裏插入圖片描述
不過使用這種默認編譯的話,生成的Class文件版本比較低,我們可以自己指定編譯版本。、
在這裏插入圖片描述
轉換成class文件後,接下來需要轉換成Android的可執行文件形式也就是dex文件。這個轉換工具在Android的SDK目錄->build-tools目錄->android-4.3目錄下的dx.bat文件
在這裏插入圖片描述
我們將java和class文件都複製到該文件夾下,啓動cmd並切換到該目錄。
在這裏插入圖片描述
在這裏插入圖片描述
生成dex文件
在這裏插入圖片描述
接下來測試是否能在模擬器上運行dex文件,打開模擬器,重啓模擬器服務
在這裏插入圖片描述
檢測是否重啓成功並連接模擬器
在這裏插入圖片描述
如果進的的模擬器shell不是root權限,可以使用su命令進入root權限
在這裏插入圖片描述
接下來要將文件從實體機傳輸到模擬器的文件路徑。需要重新打開一個命令行,輸入以下命令格式adb push 文件路徑 目標文件路徑。我們將它傳到sd卡目錄。
在這裏插入圖片描述
然後回到最開始的虛擬機命令行,執行這個文件
在這裏插入圖片描述
dex文件結構解析
在這裏插入圖片描述
我們使用010Editor查看Dex文件的結構
在這裏插入圖片描述
以下是文件頭的整體佈局
在這裏插入圖片描述
結合010Editor進行觀察數據結構,首先看文件頭,開頭大小佔用了8字節是一個結構體,結構體中由dex字符串,newline佔1字節,3字節的版本號ver和1字節Zero,它們共同組成了dex的magic魔術字。dex字符是跟PE文件結構相同的代表文件類型的標誌,後面的035代表對應的版本號
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
下一個結構是4字節的校驗和,用於校驗文件完整性。這裏顯示0x65335EFD
在這裏插入圖片描述
接下來是一個SHA1算法的數字簽名,佔用20字節,它是使用除了前兩個字段的所有二進制內容計算而成了hash。
在這裏插入圖片描述
第四字段file_size記錄整個文件頭大小
在這裏插入圖片描述
接下來大家按照如上方法挨個校驗各字段學習即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章