我开发了一个 Android 应用程序,在 C 库 (NDK) 中处理了一些数据。
为了保护库代码:
- 我已经使用 ProGuard 混淆了代码并将其导出为发布版本。
- 我用随机字母序列替换了 C 库中的函数和变量名称,使其不可读。
- 我用
readelf -a命令验证了库。 - 我使用 ApkTool 验证 apk
如何验证它是否被正确混淆?
有什么方法可以探索和反转库(.so)?
我开发了一个 Android 应用程序,在 C 库 (NDK) 中处理了一些数据。
为了保护库代码:
readelf -a命令验证了库。如何验证它是否被正确混淆?
有什么方法可以探索和反转库(.so)?
我不确定验证代码是否已正确混淆是什么意思,但您可以进行简单的差异分析。编译不带 proguard 的源代码并确定重要代码,然后查看启用 proguard 的相同代码。您已经使用了我在分析 Android 应用程序时使用的一些工具。但是,我建议将dex2jar与JD-GUI结合使用。
所以你有你的apk文件。使用 dex2jar 提取内容。
sh ~/android_re/dex2jar-0.0.9.15/d2j-dex2jar.sh ~/androidAPKs/myapp.apk
这将为您生成一个 jar 文件。您使用 JD-GUI 打开这个 jar 文件并确定您混淆的包和类的位置。如果您能够找到该类的名称,那么您的混淆就没有成功。这些信息不应该以您编写代码的方式随时可用。
就您的 .so 文件而言。它可以使用 IDA pro 和十六进制编辑器来反转。我实际上正在进行一项研究项目,该项目旨在创建一种成功地将代码功能添加到 .so 文件的技术。如果我的方法有效,我将向社区公开发布此信息。但是现在,它需要一些 ARM 组装技巧。另一个缺点是实际上添加代码有点困难,因为在 elf 共享对象中没有很多空位置可以添加有用的代码。
但是我已经能够成功地更改 .so 文件中的一些逻辑代码,从而改变应用程序的行为,所以如果你有一些关键代码,我会注意这一点。
验证逆转某事“有多难”的唯一方法是尝试自己手动逆转它。如果您是编写它的人,那会有点棘手。我知道没有自动化工具可以做到这一点。