apk反編譯步驟

對於軟件開發人員來講,保護代碼安全也是比較重要的因素之一,不過目前來講Google Android平臺選擇了Java Dalvik VM的方式使其程序很容易破解和被修改,首先APK文件其實就是一個MIME爲ZIP的壓縮包,咱們修改ZIP後綴名方式,而後解壓縮能夠看到內部的文件結構,相似Sun JavaMe的Jar壓縮格式同樣,不過不一樣的是Android上的二進制代碼被編譯成爲Dex的字節碼,全部的Java文件最終會編譯進該文件中去,做爲託管代碼既然虛擬機能夠識別,那麼咱們就能夠很輕鬆的反編譯。全部的類調用、涉及到的方法都在裏面體現到,至於邏輯的執行能夠經過實時調試的方法來查看,固然這須要藉助一些咱們本身編寫的跟蹤程序。Google最然在Android Market上設置了權限保護app-private文件夾的安全,可是最終咱們使用修改定值的系統仍然能夠獲取到須要的文件。java

固然了,咱們反編譯的目的是爲了學習。android

1. Apk文件:本身準備apk文件。windows

2. 將xxx.apk擴展名修改成xxx.rar或者xxx.zip,用WinRar解壓縮,你能夠看到內部文件的結構,相似下圖所示:安全

3. 直接打開AndroidManifest.xml會發現是亂碼,這裏面是二進制字符,須要用AXMLPrinter2.jar(http://code.google.com/p/android4me/downloads/list),下載AXMLPrinter2.jar文件,爲了方便,這裏我把它放到了Android SDK文件夾下面的tools文件夾中)app

4. 逆向xml文件:把相應的AndroidManifest.xml放到AXMLPrinter2.jar同一目錄,進入命令行模式,輸入如下命令(注意空格):編輯器

java -jar AXMLPrinter2.jar AndroidManifest.xml ->AndroidManifest.txt工具

5. 而後,打開AndroidManifest.txt,你就能夠看到相應內容了,可是對資源的引用:android:label="@7F080000" android:icon="@7F02002A"(這個是編譯後對應資源R.java中的值),對一些屬性值的設置:android:configChanges="0x000000A0",還有:android:textColor="?android:01010036" android:textColor="?android:01010212",這個還須要查SDK,看到有android字樣,就知道是系統定義的常量,在android sdk Reference android.R.xxx 頁面搜索01010036,找到"?android:01010036" 對應 "?android:attr/textColorSecondary","?android:01010212"對應 "?android:attr/textColorTertiary"學習

6. 在解壓縮後的文件夾中,你會發現還有一個classes.dex文件,這是編譯 後最終生成的dalvik字節碼,還須要另一個工具dex2jar(下載地址:http://code.google.com/p/dex2jar/downloads/list),將Android’s .dex format轉換成Java’s .class format,下載後解壓後有一個dex2jar.bat文件,把你的classes.dex文件拷貝到該目錄中,命令行切換到該目錄,運行命令dex2jar.bat classes.dex,將會在目錄中生成classes.dex.dex2jar.jar文件。ui

7. 最後,還須要用工具去查看反編譯的類,下載JD-GUI工具(綠色無須安裝,下載地址:http://java.decompiler.free.fr/?q=jdgui),將jar文件拷貝到GUI文件夾下,運行JD-GUI,打開這個Jar文件,就能看到相應的類了,一樣裏面有許多很長的數字。google

 然而,咱們發現上述方法對資源文件(drawable、xml等),反編譯的不夠完美,在一些漢化工具中,用到了apktool,能夠從http://code.google.com/p/android-apktool/下載(Windows下須要apktool1.x.x.tar.bz2和apktool-install-windows-r04-brut1.tar.bz2兩個文件),下載後解壓,爲了之後方便使用,能夠把獲得的3個文件都複製到某個文件夾(好比D:\workspace\apktool)下,使用步驟以下:

打開命令行窗口,切換到你複製到的目錄,或者直接把目錄路徑添加到環境變量中;

1)apktool d X.apk Y

反編譯X.apk到文件夾Y

例如在命令行窗口輸入"apktool d E:\game.apk E:\game_out"(不包含引號),就會啓動apktool反編譯E盤根目錄下的game.apk文件,反編譯獲得的文件放在到E:\game_out\文件夾。

2)apktool b Y

從文件夾Y重建爲APK,輸出到Y\dist\out.apk

例如"apktool b E:\game_out",將E:\game_out文件夾下的文件編譯成新的apk文件,新文件會放在E:\game_out\dist\目錄下,文件名爲out.apk。


其餘參數,請輸入apktool -help查看,通過反編譯後,

classes.dex文件被反編譯爲smali文件夾下的文件;resources.arsc被分解成若干xml文件,放在res文件夾下;apk中原有的xml文件也變轉換爲能夠直接用文本編輯器查看的形式。其餘的文件會被解壓到相應的文件夾。

相關文章
相關標籤/搜索