...
Android

Android使用Apktool反编译解包Apk文件

目录

要使用Apktool,需要准备好 apktool.jar 和 apktool.bat。还有java运行环境,自行百度;

一、下载Apktool

官网地址:https://apktool.org/
apktool下载地址:https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.9.3.jar

二、下载apktool.bat

这个脚本是官方给出的,能通过简单的命令行执行apktool.jar
官方下载地址:https://apktool.org/docs/install

三、反编译Apk文件(解包)

1.将apktool.jar 和 apktool.bat还有apk放置同一目录,如下:

2.在地址栏输入cmd调出命令行窗口,输入

apktool d app-release.apk

显示如下图,表示解包成功:

解包后在app-release.apk文件的同级目录下,得到同名文件夹 app-release

然后就可以对apk进行修改了

四、打包Apk

当然有解包也一定会有打包了
1.META-INF文件夹,这里面包含旧的签名文件,用不到该文件夹,因此删除它

2.使用以下命令打包文件夹,生成新的apk文件

apktool b app-release

五、签名Apk文件

当然打包后的apk是不能安装的,会提示解析包错误!!!
此时要对apk进行签名

1.生成密钥库文件,即keystore文件(如果有keystore那么忽略这步)
使用以下命令生成keystore文件:

keytool -genkey -alias android_keystore -keyalg RSA -validity 20000 -keystore android.keystore

以上各个参数的含义如下:

  • genkey:这个参数表示keytool要生成一个新的密钥对和一个自签名的证书
  • alias android_keystore:这个参数指定了生成的密钥对和证书的别名(alias),此处别名为android_keystore,这个别名在密钥库中用于唯一标识这个特定的密钥对和证书
  • keyalg RSA:这个参数指定了用于生成密钥对的算法,即RSA算法。RSA是一种广泛使用的非对称加密算法,它使用一对密钥:一个公钥用于加密数据,另一个私钥用于解密数据
  • validity 20000:这个参数设置了证书的有效期,以天为单位,此处证书的有效期是20000天
  • keystore android.keystore:这个参数指定了密钥库(keystore)的文件名,即android.keystore。密钥库是一个用于存储密钥对和证书的数据库文件

当使用keytool生成密钥对和证书时,命令执行过程需要输入信息:

  • 密钥库的密码:此处我填写为 123456
  • 密钥对和证书的所有者姓名、组织单位、城市或地区、省/州/郡、国家代码等,这些信息将被包含在生成的证书中,用于标识证书的所有者。

此时就在当前目录下,生成了一个android.keystore文件:

2.将刚刚生成的android.keystore文件,拷贝到未签名的apk文件同级目录下,切换到该路径下,输入以下命令,进行签名:

jarsigner -verbose -keystore android.keystore -signedjar app-release-signed.apk app-release.apk android_keystore

以上各个参数的含义如下:

  • jarsigner:这是 Java 开发工具包 (JDK) 中的一个工具,用于对 JAR 文件、APK 文件等进行签名
  • verbose:这个参数用于输出详细的签名过程,当使用这个参数时,jarsigner 会显示更多关于签名步骤的信息,这有助于调试和了解签名过程的具体情况
  • keystore android.keystore:这个参数指定了密钥库文件的路径和名称,即 android.keystore
  • signedjar app-release-signed.apk app-release.apk:这个参数指定了签名后的 APK 文件的输出路径和名称,即 app-release-signed.apk,这个文件是原始 APK 文件 app-release.apk 经过签名后的结果
  • android_keystore:这个参数指定了密钥库中用于签名的密钥对的别名,别名是在使用 keytool 生成密钥对时指定的,它用于在密钥库中唯一标识这个特定的密钥对

此时就在当前目录下,生成了一个app-release-signed.apk文件:

六、可能出现的错误

解包时出现DexBackedDexFile$NotADexFile错误
在命令后加 --only-main-classes 一句话就可以了
如:

apktool d app-release.apk --only-main-classes

届时已大功告成了~

参考:https://blog.csdn.net/aidijava/article/details/136120097

一个简单的nodejs多任务线程池的实现类 uniapp微信小程序隐藏scroll-view滚动条的两种方法
biu biu biu
js 数字转中文 阿拉伯数字转中文大写 LayerUI 子框架关闭父框架 js实现移动端双指缩放和旋转 php 图像压缩 png透明图像压缩 php curl ip伪造