Android 反編譯程式碼
反編譯程式碼
要想將APK檔案中的程式碼反編譯出來,我們需要用到以下兩款工具:
- dex2jar 這個工具用於將dex檔案轉換成jar檔案
下載地址:http://sourceforge.net/projects/dex2jar/files/ - jd-gui 這個工具用於將jar檔案轉換成java程式碼
下載地址:http://jd.benow.ca/
將這兩個工具都下載好並解壓,然後我們就開始對Demo程式進行反編譯。解壓dex2jar壓縮包後,你會發現有很多個檔案,如下圖所示:
其中我們要用到的是d2j-dex2jar.bat這個檔案,當然如果你是linux或mac系統的話就要用d2j-dex2jar.sh這個檔案。
然後我們將Demo.apk檔案也進行解壓,如果不知道怎麼直接解壓的可以先將檔案重新命名成Demo.zip,然後用解壓軟體開啟。解壓之後你會發現裡面有一個classes.dex檔案,如下圖所示:
這個classes.dex檔案就是存放所有java程式碼的地方了,我們將它拷貝到dex2jar解壓後的目錄下,並在cmd中也進入到同樣的目錄,然後執行:
d2j-dex2jar classes.dex
- 1
執行結果如下圖所示:
沒有報任何錯誤,這就說明我們已經轉換成功了。現在觀察dex2jar目錄,你會發現多了一個檔案,如下圖所示:
可以看到,classes-dex2jar.jar這個檔案就是我們藉助工具之後成功轉換出來的jar檔案了。但是對於我們而言,jar檔案也不是可讀的,因此這裡還需要再借助一下jd-gui這個工具來將jar檔案轉換成java程式碼。
下面就很簡單了,使用jd-gui工具開啟classes-dex2jar.jar這個檔案,結果如下圖所示:
OK,由此可見,我們的程式碼反編譯工作已經成功了,MainActivity中的程式碼非常清晰,基本已經做到了90%以上的還原工作。但是如果想要做到100%的程式碼還原還是非常有難度的,因為像setContentView()方法傳入的引數,其實就是一個資源的id值而已,那麼這裡反編譯也就只能將相應的id值進行還原,而無法變成像R.layout.activity_main這樣直觀的程式碼展示。 --------------------- 本文來自 guolin 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/guolin_blog/article/details/49738023?utm_source=copy