Android - 解压、编辑和重新打包 apk

Android - Unpack, edit and repack an apk

我看到一些 SDK 公司(例如 TestFairy)设法将他们的 SDK 自动添加到任何 APK。

因此假设您从 APK 中获取了 dex 文件并将其转换为 jar(通过 dex2jar)。他们是如何设法编辑 jar(class 个文件)、将其编译为 dex 然后重新打包回 jar 的?

我知道您可以只编辑一个 class 文件,因为它不会在没有其他依赖项的情况下编译。我错过了什么?

最简单和最可能的实现方式是由原始开发人员将 SDK 代码构建到 Android 应用程序中或直接构建到 DEX 文件中。然后,反汇编成smali。

要添加到另一个应用程序,将目标应用程序的dex文件反汇编成smali。然后,添加 SDK 的 smali 代码并进行启动 SDK 所需的任何其他更改。这是关键。修改smali很容易,添加类就是复制一个文件到目录下的事情。

这可能需要更改 AndroidManifest.xml 以连接任何接收器、添加服务或活动、元数据等。如果是这样,那么 apktool 可用于转储资源和 smali。

修改完所有内容后,使用smali 或apktool 重建apk 并重新注册apk。这意味着添加 SDK 后,签名应该已经更改。如果它没有被更改,他们要么可以非常快速地破解非常强大的加密(不太可能),要么他们可以访问应用程序的原始源代码和私钥(也不太可能)。

还有一个dexmerge的工具是AndroidSDK自带的,可以把两个dex文件合并起来,不用反汇编成smali。我相信它用于 IntelliJ 中的 "incremental" 编译。

您也可以编写自己的解析器和修改库来执行此操作,但是当您可以使用 smali / baksmali 时,为什么要重新发明轮子。

亚马逊和其他一些公司使用类似的流程来修改应用程序。