APK的反编译,签名,对齐 – WhiteNight's Site
2023年9月22日
标签:Android, 应用开发
记录下相关的命令行参数。
APK的打包与解包
java -jar apktool.jar
首先,需要一个jar包,以我在用的为例:apktool_2.8.1.jar。并且你的机子要有java环境。为了方便操作,我把所有需要用到的工具都放同一个文件夹内,这里先放上集齐了三相之力(apktool,apksigner,zipalign)的图片
再来说下前情提要:我已经受够了某些应用的开机摇一摇广告,还有那种把“×”放的奇小无比的坑人广告。所以就开始自学Android的反编译。
其中,假设要对demo.apk解包,那么需要用到该指令(CMD):
java -jar apktool_2.8.1.jar d demo.apk -o test
解包完成后,在test文件夹中就能看到反编译的结果了。如果反过来,把反编译的APK重新打包回去的话,需要用到以下指令:
java -jar apktool_2.8.1.jar b test -o demo_repackage.apk
不过这么做还不够,要想在手机上安装重打包的apk还需要进行签名。
APK的对齐
zipalign
在签名之前,建议下个Android Studio,跟着网上步骤安装就行。不过安装SDK的时候记得翻墙,不然大概率下载失败。
在签名之前,APK还需要对齐,不然在Android 11及以上的版本会装不上报错。对齐的话则需要用到zipalign。这东西在安装Android Studio的时候就会自带在build_tool文件夹下。
对齐apk的话要用到该指令,如果对已经有签名的apk对齐的话,记得重新打一次签名。
zipalign -f -v 4 infile.apk outfile.apk
zipalign -c -v 4 outfile.apk //查看APK是否对齐
APK的签名
apksign与keytool
要签名的话,需要用到keytool和apksigner。前者在安装java环境的时候一般来说会自带,可以CMD输入keytool看看能不能正常运行。
而后者在安装java环境的时候可能自带,也可能没有。我就属于后者。但这个工具在Android Studio里头安装SDK的时候自带了,路径一般为:
(你选择安装SDK的文件夹)\build-tools\34.0.0\lib
而生成签名,需要先通过keytool生成签名文件.keystore。比如这里生成了一个密钥库密码为123456(该密码最少要六位,也可以自己设置)的签名文件,这个密码后面还要用到。
keytool -genkey -v -keystore adam.keystore -alias adam -storepass 123456 -keypass 123456 -keyalg RSA -validity 36000
接下来就是通过apksigner给apk签名了
apksigner sign --ks adam.keystore --ks-key-alias adam demo_repackage.apk
签完名后就可以扔回手机了,能安装就算OK。
写者注
有的APK在反编译前,建议先扔进模拟器或者虚拟机里看看能不能跑。比如我在弄的这个A.apk,扔进模拟器本身就无法启动,只能扔进真机环境里面跑。搞得我还以为是我反编译哪一步出错了。