【问题标题】:Android NDK secure stringsAndroid NDK 安全字符串
【发布时间】:2016-10-25 10:03:46
【问题描述】:

我正在做一个 POC 来使用 android NDK 保护字符串。我在 C++ 代码中保留了一个字符串“我的密钥”,然后使用 JNI 在 Java 中访问它。应用程序运行没有任何问题。 然后我反编译了apk文件。现在我仍然可以在 .so 文件中看到字符串“我的密钥”。 如何使用 NDK 方法保护字符串。

【问题讨论】:

  • 在构建共享库之前,您必须 (1) 破坏字符串 (2) 这样做。要么使用标准预处理器,要么添加一个自定义预处理步骤 (3) 调整您的代码,以便在需要时了解损坏和去错。但是请注意,可以通过监视进程的内存映像来捕获解组后的字符串。
  • 不要打扰 - 任何带有调试器的根 Android 都可以获取您的字符串。
  • @RichardCritten,strings libXXX.so 命令中可见的字符串与涉及 gdb 的字符串之间存在差异。
  • @AlexCohn 这一切都取决于您试图保护的资源的价值以及如果/当​​它受到损害时您必须付出的努力。 OP 的帖子没有描述“我的密钥”的用例——所以我们不知道他试图保护的东西的价值。
  • 请问如何打开.so文件?

标签: android c++ security android-ndk shared-objects


【解决方案1】:

我们有一个在 NDK 中存储密钥的开源工作实现。你可以在这里找到所有的细节:https://github.com/klaxit/hidden-secrets-gradle-plugin

本插件使用NDK和XOR运算符隐藏字符串键,避免基于apk反编译的逆向工程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    相关资源
    最近更新 更多