Android 反编译二次打包
android studio打包导出未签名apk
现在的androidstudio选择debug打包的apk是有debug签名的。
所以新建一个buildType比如
unsigned{
buildConfigField “int”, “REQUEST_TYPE”, “1”
minifyEnabled false
useProguard false
}
然后在右侧gradle命令选择other -> assembleXxxxUnsigned
执行后在build/output/apk/Xxxx/unsigned里面生产的apk就是未签名的。
结果验证:
更改apk后缀zip,解压,打开META-INF文件夹,里面没有CERT文件则未签名。
解压缩apk包
apktool d /Users/wangzhongli/Desktop/apktool/unsigned.apk -o newapk
上面这样解压的时候,重新生成apk包会报错
Exception in thread “main” brut.androlib.AndrolibException: brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 1): [/tmp/brut_util_Jar_7346229083806801174.tmp, p, --forced-package-id, 127, --min-sdk-version, 15, --target-sdk-version, 26, --version-code, 1, --version-name, 1.0, --no-version-vectors, -F, /tmp/APKTOOL6548347216162541619.tmp, -0, arsc, -0, arsc, -I, /root/.local/share/apktool/framework/1.apk, -S, /root/Desktop/test1/res, -M, /root/Desktop/test1/AndroidManifest.xml]
at brut.androlib.Androlib.buildResourcesFull(Androlib.java:492)
at brut.androlib.Androlib.buildResources(Androlib.java:426)
at brut.androlib.Androlib.build(Androlib.java:305)
at brut.androlib.Androlib.build(Androlib.java:270)
at brut.apktool.Main.cmdBuild(Main.java:227)
at brut.apktool.Main.main(Main.java:75)
Caused by: brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 1): [/tmp/brut_util_Jar_7346229083806801174.tmp, p, --forced-package-id, 127, --min-sdk-version, 15, --target-sdk-version, 26, --version-code, 1, --version-name, 1.0, --no-version-vectors, -F, /tmp/APKTOOL6548347216162541619.tmp, -0, arsc, -0, arsc, -I, /root/.local/share/apktool/framework/1.apk, -S, /root/Desktop/test1/res, -M, /root/Desktop/test1/AndroidManifest.xml]
at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:456)
at brut.androlib.Androlib.buildResourcesFull(Androlib.java:478)
… 5 more
Caused by: brut.common.BrutException: could not exec (exit code = 1): [/tmp/brut_util_Jar_7346229083806801174.tmp, p, --forced-package-id, 127, --min-sdk-version, 15, --target-sdk-version, 26, --version-code, 1, --version-name, 1.0, --no-version-vectors, -F, /tmp/APKTOOL6548347216162541619.tmp, -0, arsc, -0, arsc, -I, /root/.local/share/apktool/framework/1.apk, -S, /root/Desktop/test1/res, -M, /root/Desktop/test1/AndroidManifest.xml]
at brut.util.OS.exec(OS.java:95)
at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:450)
… 6 more
解决方案 加上 -r 就可以了
apktool -r d /Users/wangzhongli/Desktop/apktool/unsigned.apk -o newapk
压缩apk包
apktool b newapk
到对应的Java bin 目录下重新签名
首先先进入到签名文件所在的目录,然后执行命令:
jarsigner -verbose -keystore qianmingwenjian.jks -signedjar android_signed.apk android.apk keyAlias
-digestalg SHA1 -sigalg MD5withRSA
整个过程是jarsigner -verbose -keystore 签名文件 -signedjar 签名后apk名称 签名前apk名称 别名。
输入完这条命令按回车,会让输入密钥库的密码短语,这个时候输入storePassword。
然后输入key的密钥口令,即keyPassword。
输入完以后就开始执行重签名的操作。
例如:
jarsigner -verbose -keystore /Users/wangzhongli/Downloads/ZZBankPro/pibp-android-MobileBank/keystore/gzrytong.keystore -signedjar /Users/wangzhongli/Downloads/ZZBank.apk /Users/wangzhongli/test/dist/unsigned.apk gzrytong.keystore -digestalg SHA1 -sigalg MD5withRSA
rytong00