環(huán)境配置
Apktool的安裝
- 在官網(wǎng)鏈接里下載一個(gè)shell腳本,保存的名字就是”apktool”,不要帶.sh后綴熊杨。
- 下載最新的apktool-2曙旭,在bitbucket上,并重命名為:"apktool.jar"晶府。
- 將”apktool”和”apktool.jar”放到 “/usr/local/bin”目錄下
- 增加這兩個(gè)文件可執(zhí)行權(quán)限桂躏,chmod a+x apktool ;chmod a+x apktool.jar
- 執(zhí)行apktool(測(cè)試:apktool -version可以看到版本信息)。
dex2jar和JD-GUI的安裝
直接下載并解壓:dex2jar JD-GUI
反編譯步驟
- 新建個(gè)apk文件夾川陆,將待破譯的apk放進(jìn)去剂习,之后進(jìn)到這個(gè)目錄運(yùn)行命令: apktool d test.apk
- 再運(yùn)行命令回編譯apk: apktool b test,build和dist就是回編譯apk過程中生成的東西较沪,dist里的apk文件是沒有簽名的鳞绕。
- 我們要用dex2jar將apk轉(zhuǎn)成jar文件,將dex2jar里的d2j_invoke.sh尸曼、d2j-dex2jar.sh增加可執(zhí)行權(quán)限们何。然后進(jìn)到dex2jar這個(gè)文件夾下運(yùn)行: ./d2j-dex2jar.sh /Users/xxx/apk/test.apk ,得到test-dex2jar.jar文件。
- 打開JD-GUI控轿,將hongbao-dex2jar.jar拖進(jìn)去就看到源碼了冤竹。通過看java源碼對(duì)比smali文件,修改后回編譯就ok了茬射!
回編譯apk簽名
回編譯后的apk是安裝不成功的鹦蠕,總是提示:Failure [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION] 實(shí)質(zhì)是沒簽名。
- 生成簽名:
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的錯(cuò)誤霜定,如果不帶-tsa會(huì)報(bào)一個(gè)時(shí)間方面的警告档悠。