天天看點

Android反編譯(Mac系統下的ApkTool、dex2jar、JD-GUI)

嘗試多個文章效果不好,好容易找到一個可行的,做一個記錄,怕原帖删除。轉載來源

hopper Mac版

一、對資源檔案的反編譯(Apktool)

Android中對資源檔案的反編譯一般使用ApkTool這個工具,它可以反編譯resources. arsc、9.png和XML等檔案。同時它也可以将經過修改的反編譯檔案重新打包成APK檔案。

ApkTool支援windows/linux/mac

首先打開ApkTool官網安裝說明+下載下傳位址,找到對應的系統響應的安裝說明

Android反編譯(Mac系統下的ApkTool、dex2jar、JD-GUI)
  1. 将wrapper script另存為apktool.bat檔案
  2. 下載下傳apktool.jar 建議新版,并命名為apktool.jar
  3. 将兩個檔案放入同一路徑的檔案夾中,同時通過指令chmod +x給這兩個檔案增加可執行權限。
appledeMacBook-Pro:~ apple$ chmod +x  /usr/local/bin/apktool.jar
           

注意apktool這個腳本是為了友善我們在指令行Terminal中直接執行apktool指令而增加的,不使用這個腳本,則運作ApkTool工具的指令為:

appledeMacBook-Pro:~ apple$ java -jar /usr/local/bin/apktool.jar
           

使用apktool

//進入檔案所在目錄
appledeMacBook-Pro:Desktop apple$ cd /Users/apple/Desktop/androddemo/ProguardDemo/app/build/outputs/apk/release

//執行指令
appledeMacBook-Pro:release apple$ java -jar /usr/local/bin/apktool.jar d app-release.apk


//如果配置了apktool 則為apktool d app-release.apk
//将檔案打包成apk的指令(會在app-release下生成dist檔案,裡面有apk)
appledeMacBook-Pro:release apple$ java -jar /usr/local/bin/apktool.jar b app-release
// 生成簽名:coolapk.keystore是簽名檔案名
keytool -genkey -keystore coolapk.keystore -keyalg RSA -validity 10000 -alias coolapk
//終端進入dist目錄,執行指令
jarsigner -verbose -keystore [your_key_store_path] -signedjar [signed_apk_name] [usigned_apk_name] [your_key_store_alias] -digestalg SHA1 -sigalg MD5withRSA
//字段說明:
[your_key_store_path]:密鑰所在位置的絕對路徑
[signed_apk_name]:簽名後安裝包名稱
[usigned_apk_name]:未簽名的安裝包名稱
[your_key_store_alias]:密鑰的别名
           
到這裡會回去如下檔案:
Android反編譯(Mac系統下的ApkTool、dex2jar、JD-GUI)

AndroidManifest.xml,清單檔案;

assets資源目錄,包含了圖檔和字型等資源;

build和dist為重新編譯生成的,新apk在dist目錄;

lib為so檔案目錄;

original儲存了原簽名和反編譯前的清單檔案;

res主要為layout,strings等xml檔案;

unknown不用管;

  • arm64-v8a:arm最新的64cpu構架,如骁龍810,820,835等都是基于此構架的,同時相容A32,T32指令集;
  • armeabi-v7a:32位cpu構架,如骁龍800,801等,相容armv5,armv6;
  • armeabi:armv5,armv6構架,基本已經淘汰了;
  • x86:intel的32位cpu構架,即windows平台的32位cpu構架;
  • x86_64:其實是amd出的相容64位的32位cpu構架;
  • arm構架都是向下相容的,例如如果CPU是armv8,沒有對應arm64-v8a檔案夾,則會執行armeabi-v7a中的so檔案。

二、Java代碼的反編譯(dex2jar+JD-GUI)

反編譯java代碼的常用工具是dex2jar,檢視反編譯後的結果是JD-GUI。

JD-GUI下載下傳位址

dex2jar下載下傳位址

JD-GUI安裝後意外退出的解決:
//使用 brew 進行安裝
brew cask install jd-gui
//如果沒有brew指令,則進行安裝
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
           
1. 将apk包修改成zip包并且解壓,如果不能正常解壓用指令:
appledeMacBook-Pro:~ apple$ unzip /Users/apple/Desktop/反編譯工具/app-release.zip -d /Users/apple/Desktop/反編譯工具
           
2. 将classes.dex拷貝到dex2jar-2.0中
3. 執行dex2jar指令進行反編譯
//進入dex2jar的目錄
appledeMacBook-Pro:release apple$ cd /Users/apple/Desktop/反編譯工具/dex2jar-2.0
//聲明d2j-dex2jar.sh檔案執行權利
appledeMacBook-Pro:dex2jar-2.0 apple$ sudo chmod +x d2j-dex2jar.sh
// 進行反編譯
appledeMacBook-Pro:dex2jar-2.0 apple$ ./d2j-dex2jar.sh  classes.dex
           
4. 檢視反編譯結果

用JD-GUI打開它。

将xx.jar拖拽到JD-GUI中即可檢視

Android反編譯(Mac系統下的ApkTool、dex2jar、JD-GUI)