【安卓】APK反编译、修改、重打包、签名

Posted by Qfrost on 2021-09-21
Estimated Reading Time 3 Minutes
Words 754 In Total
Viewed Times

有的时候做安卓逆向,需要脱壳、patch SO、改代码等操作,需要对安卓apk包做修改。APK包是一个带签名的Package,对其做修改,需要进行反编译解包、修改其中内容、重打包、重签名四步操作。以下记录过程。

0x01 反编译解包

现有一APK,需对其进行调试,但是jadx解析其BuildConfig发现APK Debug的标志为false。需对其进行修改,而修改的第一步就是要先反编译解包。

搜了一些资料,发现使用apktool进行解包、打包操作是比较方便的。

1
java -jar .\apktool_2.4.0.jar d .\Crakeme01.apk

即可在当前目录生成该apk的解包文件夹

0x02 修改

可以用IDEA、Android Studio等工具打开解包出来的文件夹。打开AndroidManifest.xml文件,在Application标签中添加上一项:android:debuggable=“true”。比如这样

1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="utf-8" standalone="no"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" android:compileSdkVersion="23" android:compileSdkVersionCodename="6.0-2438415" package="com.wolf.ndktest" platformBuildVersionCode="23" platformBuildVersionName="6.0-2704002">
<application android:allowBackup="true" android:debuggable="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme">
<activity android:name="com.wolf.ndktest.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>

修改后记得保存文件

0x03 重打包

用apktool对其打包

1
java -jar .\apktool_2.4.0.jar b .\Crakeme01 -o new.apk

0x04 签名

因为对apk进行了重新打包的操作,所以之前的签名已经失效了,若想安装使用这个apk,需要对其重新签名。最开始使用了apksigner进行签名,但是测试后发现这样签上名后APK仍无法安装。

1
.\apksigner.bat sign --ks C:\Users\Qfrost\Desktop\code\Android\Key\Key.jks E:\ReverseEngineering\cm\Crakeme01.apk\new.apk

后面查了一些资料发现可以用jarsigner进行签名

1
keytool -genkey -alias abc.keystore -keyalg RSA -validity 20000 -keystore abc.keystore  // 生成密钥库

将APK同生成的keystore文件放到JDK/bin目录下,用jarsigner即可完成签名

1
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即可调试任意程序

1
2
3
4
adb shell                            //adb进入命令行模式
su //切换至超级用户
magisk resetprop ro.debuggable 1 //设置debuggable
stop;start; //一定要通过该方式重启