如何验证 Android 应用程序和库是否被正确混淆

逆向工程 安卓 图书馆 apk
2021-07-01 01:15:28

我开发了一个 Android 应用程序,在 C 库 (NDK) 中处理了一些数据。

为了保护库代码:

  • 我已经使用 ProGuard 混淆了代码并将其导出为发布版本。
  • 我用随机字母序列替换了 C 库中的函数和变量名称,使其不可读。
  • 我用readelf -a命令验证了库
  • 我使用 ApkTool 验证 apk

如何验证它是否被正确混淆?

有什么方法可以探索和反转库(.so)?

2个回答

我不确定验证代码是否已正确混淆是什么意思,但您可以进行简单的差异分析。编译不带 proguard 的源代码并确定重要代码,然后查看启用 proguard 的相同代码。您已经使用了我在分析 Android 应用程序时使用的一些工具。但是,我建议将dex2jarJD-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 文件中的一些逻辑代码,从而改变应用程序的行为,所以如果你有一些关键代码,我会注意这一点。

验证逆转某事“有多难”的唯一方法是尝试自己手动逆转它。如果您是编写它的人,那会有点棘手。我知道没有自动化工具可以做到这一点。