有的时候做安卓逆向,需要脱壳、patch SO、改代码等操作,需要对安卓apk包做修改。APK包是一个带签名的Package,对其做修改,需要进行反编译解包、修改其中内容、重打包、重签名四步操作。以下记录过程。
0x01 反编译解包
现有一APK,需对其进行调试,但是jadx解析其BuildConfig发现APK Debug的标志为false。需对其进行修改,而修改的第一步就是要先反编译解包。
搜了一些资料,发现使用apktool进行解包、打包操作是比较方便的。
java -jar .\apktool_2.4.0.jar d .\Crakeme01.apk
即可在当前目录生成该apk的解包文件夹
0x02 修改
可以用IDEA、Android Studio等工具打开解包出来的文件夹。打开AndroidManifest.xml文件,在Application标签中添加上一项:android:debuggable=“true”。比如这样
|
|
修改后记得保存文件
0x03 重打包
用apktool对其打包
java -jar .\apktool_2.4.0.jar b .\Crakeme01 -o new.apk
0x04 签名
因为对apk进行了重新打包的操作,所以之前的签名已经失效了,若想安装使用这个apk,需要对其重新签名。最开始使用了apksigner进行签名,但是测试后发现这样签上名后APK仍无法安装。
.\apksigner.bat sign --ks C:\Users\Qfrost\Desktop\code\Android\Key\Key.jks E:\ReverseEngineering\cm\Crakeme01.apk\new.apk
后面查了一些资料发现可以用jarsigner进行签名
keytool -genkey -alias abc.keystore -keyalg RSA -validity 20000 -keystore abc.keystore // 生成密钥库
将APK同生成的keystore文件放到JDK/bin目录下,用jarsigner即可完成签名
jarsigner -verbose -keystore abc.keystore -signedjar testx.apk test.apk abc.keystore
0x05 题外话
用如上的方法每次调试APK都要反编译解包、修改、打包、重签名,实在是太麻烦了。其实想要调试程序,还有些全局的做法,操作了一次即可对所有程序进行调试。
对于Root后的手机,可以使用Magisk对手机设置全局可调式。安装“MagiskHide Props Config”插件,该插件支持我们方便的修改prop值(不需要手动刷mprop)。该插件在Magisk插件市场中即可搜索安装。安装后,用ADB设置ro.debuggable为1即可调试任意程序
|
|