環(huán)境配置
Apktool的安裝
- 在官網鏈接里下載一個shell腳本,保存的名字就是”apktool”,不要帶.sh后綴。
- 下載最新的apktool-2,在bitbucket上,并重命名為:"apktool.jar"。
- 將”apktool”和”apktool.jar”放到 “/usr/local/bin”目錄下
- 增加這兩個文件可執(zhí)行權限,chmod a+x apktool ;chmod a+x apktool.jar
- 執(zhí)行apktool(測試:apktool -version可以看到版本信息)。
dex2jar和JD-GUI的安裝
直接下載并解壓:dex2jar JD-GUI
反編譯步驟
- 新建個apk文件夾,將待破譯的apk放進去,之后進到這個目錄運行命令: apktool d test.apk
- 再運行命令回編譯apk: apktool b test,build和dist就是回編譯apk過程中生成的東西,dist里的apk文件是沒有簽名的。
- 我們要用dex2jar將apk轉成jar文件,將dex2jar里的d2j_invoke.sh、d2j-dex2jar.sh增加可執(zhí)行權限。然后進到dex2jar這個文件夾下運行: ./d2j-dex2jar.sh /Users/xxx/apk/test.apk ,得到test-dex2jar.jar文件。
- 打開JD-GUI,將hongbao-dex2jar.jar拖進去就看到源碼了。通過看java源碼對比smali文件,修改后回編譯就ok了!
回編譯apk簽名
回編譯后的apk是安裝不成功的,總是提示:Failure [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION] 實質是沒簽名。
- 生成簽名:
keytool -genkey -keystore test.keystore -keyalg RSA -validity 10000 -alias test - 為apk增加簽名:
jarsigner -digestalg SHA1 -sigalg MD5withRSA -tsa https://timestamp.geotrust.com/tsa -keystore test.keystore -signedjar test-signed.apk test.apk test
注意:
- 最后的”test”就是-alias后面帶的,必須保持一致。
- 如果不帶-digestalg SHA1 -sigalg MD5withRSA簽名后的apk安裝也是不成功的,說INSTALL_PARSE_FAILED_NO_CERTIFICATES的錯誤,如果不帶-tsa會報一個時間方面的警告。