作为我研究的一部分,我需要检测任何给定 .apk 文件的 dalvik 字节码,并使用检测过的字节码获取工作的、修改过的 .apk。
我在 Windows 7 下用 Java 1.6 编程。
输入
classes.dexdalvik 字节码。classes.dex.apk的检测字节码(是的,我们假设我们已经检测了字节码)。期望输出
classes.dex字节码而不是原始字节码的 .apk 文件。问题陈述
从 Java 源代码获取所需输出的最直接方法是什么?
关于原始答案的第2步:
当前版本的来源ApkBuilder可以在官方回购中找到,解释为什么应该使用它的评论也可以在官方回购中找到。
在您本地的 Android SDK 安装中,这些类似乎位于 android-sdk/tools/lib/sdklib.jar
要classes.dex首先使用自定义文件重建 .apk,我们需要从中删除原始classes.dex文件。这可以使用Android SDK安装目录中的aapt.exe工具轻松完成,例如位于此处:c:\Program Files (x86)\Android\android-sdk\platform-tools\aapt.exe
命令:
aapt.exe remove <path-to-the-apk> classes.dex
Run Code Online (Sandbox Code Playgroud)
将删除该文件。
由于(...)\android-sdk\tools\apkbuilder.bat脚本已被弃用,因此构建 .apks 存在很多混淆。有关详细信息,请参阅此讨论。
在幕后,脚本ApkBuilderMain调用了 non-deprecated ApkBuilder。
基于不再可用的非官方来源,我想出了以下代码片段:
aapt.exe remove <path-to-the-apk> classes.dex
Run Code Online (Sandbox Code Playgroud)