# android apk 反编译

对 apk 反编译,并修改后进行打包

# apk 包反编译

我们知道 android 的安装包文件为 APK ,可以理解为就是一个文件压缩包,里边包含了安装包所需的静态文件及类编译后的内容,理论上来讲通过反编译 APK ,能够拿到相关资源及源代码。但是为了安全性,现在几乎所有的安装包都需要进行加固,也就是对代码进行混淆。

目前在应用商店上架 APK ,都会要求对安装包进行加固。

下面我们来操作一下如何对 APK 进行反编译并修改相应内容,但是前提是没有进行加固操作。

# 反编译工具安装

android 反编译工具有好几种,这里以 apktool 为例进行操作。首先进行下载,下载地址: https://apktool.org/docs/install/ (opens new window)

找到相应平台的安装方式,支持Windows、Linux、Mac 这里以 mac brew 安装方式进行安装的,安装完成后在命令行工具输入 apktool 进行验证,如果有信息输出说明成功了。

# 反编译操作

apktool d -s base.apk

base.apk 就是需要反编译的 APK 包,执行命令后,就会在同级目录下生成对应的文件夹,里边就是相应的文件。

修改好相应文件后,重新打包。

apktool b base

# 对安装包进行签名

完成打包后,该 APP 还不能够安装,因为修改了内容需要对安装包重新进行签名,不然安装的时候会提示签名验证失败。

签名的第一步需要证书,我们来制作借助 JDK 提供的 keytool 工具制作一个证书。

# 证书生成命令

keytool -genkey -alias test -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystore

test 为证书别名

test.keystore 为证书名称

# apk 添加证书

jarsigner -verbose -keystore /Users/apk/sig/paperless.keystore -signedjar /Users/apk/sig/2.apk /Users/apk/base/dist/base.apk paperless

jarsigner

这是 Java 提供的一个工具,用于对 JAR 文件进行签名。它主要用于为 Java 应用程序、Android 应用程序(APK 文件本质上是一个特殊的 JAR 文件)等签名,以确保应用程序的完整性和来源的可验证性。

命令参数解释

  • -verbose
    • 作用:显示签名过程中的详细信息,包括正在签名的文件、使用的证书、签名的进度等。这对于调试和查看签名过程的详细信息非常有用。
    • 示例:在执行该命令时,你会看到一系列输出,如 "正在签名:META-INF/MANIFEST.MF" 等,帮助你了解签名操作正在处理哪些文件。
  • -keystore /Users/apk/sig/test.keystore
    • 作用:指定用于签名的密钥库文件的路径。密钥库是存储密钥和证书的安全存储库。
    • 示例:这里 /Users/apk/sig/test.keystore 是一个包含了签名所需的私钥和证书的文件。在签名过程中,jarsigner 会从这个文件中提取相应的私钥。
  • -signedjar /Users/apk/sig/2.apk
    • 作用:指定签名后的输出文件路径。
    • 示例:生成的已签名的 APK 文件将存储在 /Users/apk/sig/2.apk 位置。这是签名操作的最终产物,将包含原始 APK 文件的内容和签名信息。
  • /Users/apk/base/dist/base.apk
    • 作用:指定要进行签名的原始 APK 文件。
    • 示例:/Users/apk/base/dist/base.apk 是未签名的 APK 文件,jarsigner 将对其进行签名操作。
  • paperless
    • 作用:指定在密钥库中使用的别名。
    • 示例:这个别名对应于存储在 /Users/apk/sig/test.keystore 中的一组公钥 / 私钥对和证书。在签名过程中,jarsigner 会根据这个别名找到相应的私钥,并用它来对 APK 进行签名。
上次更新: 2025/1/17