【问题标题】:Android - Unpack, edit and repack an apkAndroid - 解压、编辑和重新打包 apk
【发布时间】:2015-11-05 06:55:42
【问题描述】:

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

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

我知道你可以只编辑一个类文件,因为没有其他依赖项就无法编译。我错过了什么?

【问题讨论】:

  • 您不必转换 APK 文件,您可以简单地编辑 dex 文件并添加额外的预 dexed 类。您只需要合适的工具。

标签: java android reverse-engineering


【解决方案1】:

最简单且最有可能的方式是,SDK 代码由原始开发人员构建到 Android 应用程序中或直接构建到 DEX 文件中。然后,拆解成smali。

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

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

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

还有一个叫做dexmerge的工具,它是Android SDK自带的,可以组合两个dex文件而无需反汇编成smali。我相信它用于 IntelliJ 中的“增量”编译。

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

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

【讨论】:

  • 用java编码和构建然后转换成smali有效吗?转换后的 smali 文件用于替换原来的 smali 文件。
  • 我不明白“有效”是什么意思。从某种意义上说,您可以做到这一点是有效的,并且该方法具有实用性。如果需要修改一个dex文件,不要一路反编译成java。那样你会丢失太多信息。您只需反汇编为 smali,修改 smali(通过替换或更改文件),然后重新编译回 dex。 smali 写很乏味,所以如果你需要写很多,那就用 java 写,然后用 javac 和 dx 或 jack 编译成 dex。
猜你喜欢
  • 2015-06-09
  • 1970-01-01
  • 1970-01-01
  • 2012-04-26
  • 2016-10-25
  • 1970-01-01
  • 2011-09-15
  • 2012-09-28
  • 1970-01-01
相关资源
最近更新 更多