整体流程参考如上描述
- 获取软件列表:在手机有线连接到电脑的情况下在任意位置cmd,要求已安装adb并运行
adb shell pm list packages -f -3
- 复制出apk到电脑
在第一步获取到的列表中找到需要拷贝的应用,移除.apk后的=com.xxxxx(如果有)作为拷贝路径PATH导出apk
adb pull PATH //adb pull /data/app/~~0G1inQaszOmFyQ6_gL8FXw==/com.mypackage-0bbMNtW7uMoucJFqS710qA==/base.apk
导出的apk默认在C:/Users/(username)路径中
- 反汇编apk,要求已安装apktool且配置环境变量。如果是新安装的需要重启cmd,需要在导出的apk同路径下运行cmd
//-o后的参数为当前路径下导出的文件夹的名字。例子中将会在base.apk所在路径中创建output-dir文件夹并导出 apktool d -o output-dir base.apk
- 修补AndroidManifest文件
找到AndroidManifest.xml文件,打开后增加或修改如下值: debuggable\allowBackup\extractNativeLibs都设置为true
<application android:debuggable="true" android:allowBackup="true" android:extractNativeLibs="true">
- 重新组合apk文件,需要在导出的apk同路径下运行cmd
-o 后是新的apk文件名,即com.mypackge.patched.apk
新版需要额外执行zipalign的操作,zipalign包含在sdk内
apktool b output-dir -o com.mypackge.patched.apk
- 创建自签名库,要求已安装keytool且配置环境变量,keytool包含在JDK标准版中,需要安装JDK。需要在keytool.exe同路径下运行cmd
- (存疑)必须是密钥文件(无后缀格式)
- (存疑)不能为空(不能通过创建空txt文件实现)
- 路径不能带空格(比如Program Files)
- (存疑)在安装好的标准版JDK路径下lib/security/cancerts文件是一个已写入信息的密钥文件,可以拷贝到外部路径后通过代码覆盖用作新的密钥文件
-keystore后参数resign.keystore是密钥文件,要求
-alias后参数alias_name为包体别名,通常格式类似于com.mycomany.myname
$ keytool -genkey -v -keystore resign.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
- 对apk进行签名,要求已安装apksigner并在其目录运行,apksigner是SDK目录下build-tools/<版本号>/apksigner.bat文件,Android Studio内SDK manager可以看到安装SDK的路径
apksigner sign --ks resign.keystore com.mypackge.patched.apk
- 文件安装回设备,要求在apk路径执行cmd,要求先卸载原apk
$ adb uninstall com.mypackage $ adb install com.mypackage.patched.apk
- 作者:Reguluz
- 链接:https://reguluz.site/article/c75f68ef-0a9c-4dc7-9b30-6c3e6325cbf9
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章