直接進(jìn)入正題,如果要在mac下反編繹apk跟在window下還是有點(diǎn)區(qū)別的,但是大體原理是一樣的鞋邑。首先下載三個工具:
分別介紹下這幾個應(yīng)用在mac下的安裝
Apktool洼滚,官方有明確的文檔說明:
Download Mac wrapper script (Right click, Save Link As apktool)
Downloadapktool-2
Rename downloaded jar toapktool.jar
Move both files (apktool.jar & apktool) to/usr/local/bin(root needed)
Make sure both files are executable (chmod a+x filename)
Try running apktool via cli
這樣你就配置了bash權(quán)限瞒渠,可以執(zhí)行apktool命令,回車可以查看其命令集
1
apktool d file.apk
這樣就能生成一個file的文件夾疑俭,就生成了資源文件粮呢,smile文件,如果修改了生成apk文件
1
apktool b file
上面的build和dist就是回編譯apk過程中生成的東西钞艇,編譯出來的apk在dist目錄下啄寡,打開build/apk文件夾會發(fā)現(xiàn)少了original文件夾下的META-INF文件夾,也就意味著dist里的apk文件是沒有簽名的。
dex2jar,我們把.apk重命名成.zip,解壓哩照,取出classess.dex挺物。我們要用dex2jar將apk轉(zhuǎn)成jar文件,實(shí)質(zhì)是將apk里的classes.dex轉(zhuǎn)成jar飘弧。然后進(jìn)到dex2jar這個文件夾下運(yùn)行:
1
sh d2j-dex2jar.sh classes.dex
可能會出現(xiàn)
1
d2j-dex2jar.sh: line 36: ./d2j_invoke.sh: Permission denied
這時(shí)候就將dex2jar里的d2j_invoke.sh/d2j-dex2jar.sh增加可執(zhí)行權(quán)限
1
2chmod +x ./d2j_invoke.sh
sh d2j-dex2jar.sh classes.dex
這樣就生成了classes-dex2jar.jar,
打開JD-GUI姻乓,將hongbao-dex2jar.jar拖進(jìn)去就看到源碼了嵌溢。 通過看Java源碼對比smali文件,修改后回編譯就ok了蹋岩!
如何手動給apk增加簽名?
回編譯后的apk是安裝不成功的赖草,總是提示
Failure [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION] 實(shí)質(zhì)是沒簽名。
1剪个,生成簽名:
1
keytool -genkey -keystore filename.keystore -keyalg RSA -validity 10000 -alias aliasname
注意:上面-keystore后面跟的是簽名文件的名字秧骑,而-alias是別名,一般情況下-keystore后面跟-alias是一樣的扣囊,但其實(shí)兩者沒有關(guān)系乎折,這也是我故意搞成不一樣的原因。
2侵歇,為apk增加簽名:
1
jarsigner -digestalg SHA1 -sigalg MD5withRSA -tsa -verbose -keystore filename.keystore -signedjar filename-signed.apk filename.apk aliasname
注意:
1骂澄,最后的”aliasname”就是-alias后面帶的,必須保持一致惕虑。
2坟冲,如果不帶-digestalg SHA1 -sigalg MD5withRSA簽名后的apk安裝也是不成功的,說INSTALL_PARSE_FAILED_NO_CERTIFICATES的錯誤溃蔫,如果不帶-tsa會報(bào)一個時(shí)間方面的警告健提。
http://stareme.wang/2016/12/14/Mac%20%E4%B8%8A%20android%20%E5%8F%8D%E7%BC%96%E8%AF%91apk/