Mac平臺反編譯Unity編譯的安卓apk

weixin_34138377發表於2017-09-06

Mac平臺反編譯Unity編譯的安卓apk

時間: 2017.09.06

參考資料:

  1. Android APK 反編譯實踐 http://www.jianshu.com/p/9e0d1c3e342e
  2. 提取Unity遊戲資源和指令碼 http://www.cnblogs.com/AaronBlogs/p/6853179.html

個人總結

一. 獲取java程式碼(dex2jar-2.0工具)

  1. 拿到apk
  2. 修改字尾名(如 apple.apk 該成 apple.zip) 然後對.zip進行解壓
    解壓出來的額檔案中的 classes.dex是安卓程式碼的核心部分,,dex是在Dalvik虛擬機器上可以執行的檔案。如果發現裡面有多個(如 classes2.dex, classes3.dex)的都需要進行相同的操作, 但是我實踐時只有一個, 因為工程方法數沒有超過64k.
  3. 將這些 classes.dex 拷貝到 dex2jar-2.0目錄下(dex2jar-2.0 是之前好的, 根據參考資料1, 中下載的)
  4. 開啟終端, 進入dex2jar-2.0目錄下
  5. 執行命令 sh d2j-dex2jar.sh classes.dex 得到classes-dex2jar.jar
  6. 開啟JD-GUI 這個app(參考資料1中有下), 將剛得到的 classes-dex2jar.jar 拖到軟體中
  7. 如果apk 沒有進行混淆的話, 裡面有個com檔案, 然後結合apk 的公司名和 apk對應的應用名,就大概知道哪裡是有用的程式碼(編寫的, 不是一些lib上的程式碼)

二. 獲取res資源(如: layout樣式, 動畫, 文字values, 圖片(應該是些UI圖片) (apktool工具)

  1. 拿到apk
  2. 開啟終端, 進入apk所在的路徑下
  3. 執行命令 apktool d carIabTest.apk
  4. 這時候生成的 檔案中, res 下面就可以找到你需要的資源還可以看到 AndroidManifest.xml裡面的東西

說明:

* original資料夾是原始的AndroidManifest.xml檔案
* res資料夾是反編譯出來的資源
* smali資料夾是反編譯出來的程式碼 (smali是有點類似於彙編的語法,是Android虛擬機器所使用的暫存器語言。)

注意: 如果是Unity專案, 那麼在assets/bin/Data/Managed/Assembly-CSharp.dll 就是Unity的程式碼了. 如果要看的話可以將它拖到mono裡面看, 但是好像看不了方法的具體實現什麼的.只能看有哪些類, 方法和一些變數

三. 如何拿到 apk(Unity製作的遊戲) 的資源呢?

四. 如果apk 進行了程式碼混淆, 那麼如何處理呢?

相關文章