Important
Work in progress.
使用像 Mixin 一样的 API 将自己的 Java 或 Kotlin 代码注入到 dex 中,同时提供一些修改或替换 APK Resource 的功能。
Dex-Mixin 是 Re-ApkPatcher 的核心。
我希望开发者不仅可以通过它来创建用于使用 Re-ApkPatcher 修改
APK的JAR,还可以创建一个Android 项目,并自动地在项目编译完成后使用Dex-Mixin将代码和资源注入原APK。这样开发者就可以像编写一个Android 应用一样对应用代码进行修改。我会在 Re-ApkPatcher 的第一个版本开发完成后尝试实现它 ^^
Important
由于忙于其他事,以及在此项目构思初,对于方法体指令操作的想法和实现非常不完善、不易用(dexlib2 中的 MutableMethodImplementation 仅支持对 OffsetInstruction 的偏移处理,而完全没有寄存器相关支持),短时间内可能无法继续开发。
由于 dex 字节码的寄存器模型,对方法的操作较困难,并且似乎没有一个用于此用途的库,我想在近期设计一套对 dex 指令、寄存器的分析和 API 封装的思路,随后此项目的进展应该会快速许多。
(大饼)
- 对于一些未混淆的应用或精准的被注入代码匹配规则,可以让用户自行构建任意版本目标应用的修改版
APK或由开发者自动化地修改多个版本的APK - 由于
Dex-Mixin的原理以及使用它开发的方式,可以实现手写smali难以实现的复杂逻辑 - More...
QWearNT 中编写和使用了一个 Gradle Plugin,它通过 Apktool 获得应用代码的 smali,然后解析 smali 文件,对代码进行修改。但由于原开发者编写它时的开发时间不充裕,导致其 API 不太完善,具体实现逻辑有很多待改进或不合理的地方。
最开始我想对其进行改进,但我最终决定尝试完全不同的代码注入方式,提供更好的 API,并使用 Dexlib2 实现对 dex 的修改。这也是这个项目被创建的原因。
由于此项目还在开发中,目前仅能提供大致的开发方法
创建一个 Java/Kotlin 项目,将 dex-mixin-api 与目标应用的代码进行 compileOnly,按需求使用 dex-mixin-api 提供的注解并编写代码,编译 JAR,然后尽情使用 Re-ApkPatcher 对目标 APK 应用您的修改
欢迎向 Re-ApkPatcher 提交 Pull Request!
提交信息遵守 AngularJS Git Commit Message Conventions 。
Note
如果您不知道如何使用 Dexlib2,可以参考项目中使用到它的部分代码或阅读其 源代码。