1. 程式人生 > >Android安全/應用逆向--24--反編譯classes.dex檔案

Android安全/應用逆向--24--反編譯classes.dex檔案

7-1、反編譯classes.dex

Java原始碼首先被編譯成.class檔案,然後Android SDK自帶的dx工具會將這些.class檔案轉換成classes.dex。所以我們只需要想辦法反編譯classes.dex即可得到java原始碼。運用安卓反編譯工具dex2jar可將dex檔案反編譯成.jar檔案,然後運用jd-gui工具即可檢視反編譯後得到的Java原始碼。

檢視classes.dex檔案的smali程式碼:將其對應的APK檔案解包,然後就能看到classes.dex的smali程式碼了。也可以使用baksmali工具直接將classes.dex轉換為smali程式碼。

Baksmali的用法:

cd到baksmali安裝目錄下。Baksmali2.X版本命令已換,不知道具體是多少

java –jar baksmali-2.1.3.jar –o <輸出資料夾> <目標dex檔案>  //將dex反編譯為smali程式碼資料夾
java –jar smali-2.1.3.jar –o <目標dex檔名> <smali資料夾> //將smali程式碼資料夾編譯為指定的dex檔案

目前幾乎所有工具在反編譯上都只是給apktool套了一個外殼,因此apktool是根本的。

工具:

1、Android killer、APKIDE、Apktoolkit等圖形化整合工具
2、Jd-gui、JEB、dex2jar、Jadx、逆向助手等
3、Smali2java(注意。它實質上只支援apktool 1.x版本,不支援apktool 2.x版本)
4、Apktool (注意。使用不當會導致區域格式化)
5、Xposed框架、CydiaSubstrate框架(主要進行native下的HOOK)
6、ZjDroid、IDA

靜態分析Smali程式碼

步驟:

1、先在AndroidManifest.xml檔案下設定為可除錯模式。

2、理清程式碼邏輯,一般會結合頁面進行分析,得到目標資訊。如程式碼類名、Activity名、判斷邏輯等。

3、修改程式碼繼續跟蹤。如注入程式碼跟蹤邏輯,輸入模糊值看輸出值做對比等。

4、如果回編譯之後發現存在問題,有可能是內部做了校驗,此時就要分析程式碼看是否做了校驗。在分析程式碼的時候,要先看它有沒有自己定義Application,如果定義的話,就需要看它自己的Application類。或者搜尋“signature”等關鍵字或許會有發現。

5、如果程式碼做了混淆,但系統回撥方法肯定不會做混淆的,比如onCreate。分析這些系統回撥方法的構造方法、週期方法等。

6、可以在每個方法中加上日誌資訊,得到期望的資訊輸出。

7、找到核心問題,修改程式碼。如註釋校驗程式碼、修改邏輯程式碼、新增自定義程式碼等。