使用 apktool 反编译安卓 apk 文件、重新打包与签名

您所在的位置:网站首页 Androidapk签名组件库下载 使用 apktool 反编译安卓 apk 文件、重新打包与签名

使用 apktool 反编译安卓 apk 文件、重新打包与签名

2024-07-13 17:02| 来源: 网络整理| 查看: 265

摘要

当你对一个安卓 apk 应用比较感兴趣,可能会想了解学习一下它的源码内容,甚至希望可以稍作修改后重新打包再安装体验。此时你可能会需要 apktool 这个工具。本文介绍了使用 apktool 反编译安卓 apk 文件、重新打包与签名的基本方法。本文内容仅供技术研究学习参考,请尊重原应用版权,切勿作破解再分发等事宜,避免惹上不必要的麻烦。

目录[隐藏] 1 配置 apktool 工具环境2 使用 apktool 解压、重新打包与签名2.1 密钥证书:生成一个 keystore 文件2.2 签名示例:使用 jarsigner 重新签名 apk 文件2.3 jarsigner 签名问题之一:找不到证书链2.4 签名示例:使用 apksigner 重新签名 apk 文件4 小结5 相关参考 1 配置 apktool 工具环境 安装 java jdk 8+ oracle 官网下载(需注册账号) jdk-8u261-windows-x64.rar(百度网盘,提取码: qfer) 下载并配置 apktool 详细请参考:https://ibotpeaches.github.io/Apktool/install/ 2 使用 apktool 解压、重新打包与签名 解压 apk 文件。执行命令示例: apktool d -f -s -o a_dev a.apk 重新打包为 apk,执行命令示例: apktool b a_dev -o a_unsigned.apk 对重新打包的 apk 文件签名。示例: jarsigner -verbose -keystore [证书存放路径] -signedjar [签名后文件存放路径] [未签名的文件路径] [证书别名]

jarsigner 参数说明:

keystore 参数指定您的私钥的绝对路径,例如:a.keystore signedjar 参数指定签名后apk文件存放的路径,例如 a_signed.apk [未签名的文件路径] 指定要签名apk文件的路径,例如 a_unsigned.apk [证书别名] 是指创建密钥时设置的证书名称。 2.1 密钥证书:生成一个 keystore 文件

执行如下命令,生成 abc.keysotre 文件。需要输入密码时,输入为 123456。

keytool -genkey -alias abc.keystore -keyalg RSA -validity 20000 -keystore abc.keystore 2.2 签名示例:使用 jarsigner 重新签名 apk 文件

使用 jarsigner 基于 abc.keystore 对 a_unsigned.apk 签名,生成已签名的 a_signed.apk 文件:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -storepass 123456 -keypass 123456 -keystore abc.keystore -signedjar a_signed.apk a_unsigned.apk abc.keystore

查看文件 a_signed.apk 的签名信息:

keytool -printcert -jarfile a_signed.apk 2.3 jarsigner 签名问题之一:找不到证书链

在使用 Android Studio 生成的密钥执行签名命令时,遇到如下错误提示:

jarsigner: 找不到a.keystore的证书链。a.keystore必须引用包含私有密钥和相应的公共密钥证书链的有效密钥库密钥条目。

这是因为证书别名不对。可以执行如下命令查看其别名:

# 假若安装了 Android Studio, 则会生成一个默认的密钥证书: # - 其默认位置在 /.android/debug.keystore # - 默认别名为: androiddebugkey # - 默认密码为: android # 查看 debug.keystore 信息 keytool -list -v -keystore debug.keystore # 查看 xxx.jks 密钥证书信息 keytool -list -v -keystore xxx.jks

输出信息参考如下:

输入密钥库口令:

密钥库类型: JKS 密钥库提供方: SUN

您的密钥库包含 1 个条目

别名: androiddebugkey 创建日期: 2019-1-7 条目类型: PrivateKeyEntry 证书链长度: 1 证书[1]: 所有者: C=US, O=Android, CN=Android Debug 发布者: C=US, O=Android, CN=Android Debug 序列号: 1

可以看到这里的证书别名为 androiddebugkey。

2.4 签名示例:使用 apksigner 重新签名 apk 文件

jarsigner 是 Java JDK 提供的 jar 文件通用签名工具,只支持 V1 签名校验。

从 Android 7.0 开始, 谷歌增加新签名方案 V2 Scheme (APK Signature)。在 Android SDK 中提供了 apksigner 等用于 apk 签名。

Android SDK/build-tools//apksigner Android SDK/build-tools//zipalign

使用 zipalign 执行包对齐优化:

# 4字节对齐优化 zipalign -v 4 a_unsgined.apk a_unsgined_4.apk # 检查 APK 是否对齐 zipalign -c -v 4 a_unsgined.apk

使用 apksigner 执行 V2 签名:

apksigner sign --ks abc.keystore --ks-key-alias abc.keystore --out a_signed_v2.apk a_unsigned_4.apk

查看签名信息:

apksigner verify -v --print-certs a_signed_v2.apk 4 小结

上面介绍的使用 apktool 解压、重打包与签名 apk 的方法和流程,可以总结为如下几个步骤及命令:

# 1. 解包: a.apk 至 a_dev 目录 apktool d -f -s -o a_dev a.apk # 2. 打包:a_dev 目录打包为 a_unsigned.apk apktool b a_dev -o a_unsigned.apk # 3. 生成证书 abc.keystore keytool -genkey -alias abc.keystore -keyalg RSA -validity 30000 -keystore abc.keystore # 4. 签名:a_unsigned.apk -> a_signed.apk jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -storepass 123456 -keypass 123456 -keystore abc.keystore -signedjar a_signed.apk a_unsigned.apk abc.keystore 5 相关参考 https://ibotpeaches.github.io/Apktool/install/ http://www.dayanzai.me/apktool.html https://www.jianshu.com/p/a5af94a963d0 https://blog.csdn.net/weixin_44212888/article/details/111396635 相关文章: 自定义 Windows Terminal 终端界面与配色方案 Default Thumbnail在 gitlab 项目仓库中使用 Git LFS 存储二进制大文件 音视频字幕生成:基于 openai-whisper 提取音视频文件文字 Default ThumbnailICP信息备案流程图 Default Thumbnail菜鸟必读 笔记本卖场验机史上最全攻略 Default Thumbnailubuntu 8.04 root用户下的中文环境配置 Default Thumbnail配置IIS使用ASP.NET 相关问题 Default Thumbnail在Ubuntu 8.10中使用dnsmasq提供DNS和DHCP服务 Default Thumbnailati2dvag蓝屏提示:STOP 0x0000000A(0x8289BA10,0x825A9008 Default Thumbnailubuntu设置/etc/environment环境变量后账号无法登陆解决方法


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3