从反编译和开发人员那里保护 Android 应用程序的密钥

Securing key into Android app from decompilation and developers

我正在做一个项目,需要将密钥隐藏在Android应用程序的某个地方,这样即使在反编译后也无法将其取出。 该要求甚至声明密钥不应该对开发人员可见,这意味着它应该嵌入到一些预编译的库中。 我尝试了以下操作:

  1. 制作 Jar 并对 jar 进行混淆,之后变得无法使用。以及它处理字符串的无用方法(它不加密字符串)。

  2. 制作 C 库并使用该库 (NDK)。使用 linux 命令可以轻松读取字符串。示例:'$ strings'.

我正在尝试找出其他方法来完成此操作。 请帮我解决一下这个。如果您有任何想法,请分享。我非常乐意。

谢谢。

您的应用程序可以做的任何事情,也可以由有决心的有能力的黑客进行逆向工程,所以不要指望有什么神奇的方法可以永久保护此密钥。

如果您的目标是提供将许可给不同开发人员的 SDK,那么简单的方法是为每个开发人员分配一个唯一的密钥,并让他们负责对黑客隐藏它。

另一方面,如果我从字面上看你的要求,密钥字符串不会以明文形式出现在APK中就足够了。简单的解决方案是对其进行编码。您可以做一些像密钥的 base64 编码一样简单的事情,也可以像提供一个 C 函数一样棘手地计算这个密钥(因此 strings 的输出中不会出现密钥的痕迹)。

这是一道难题。您正在与对您的应用程序进行逆向工程作斗争。有为此构建的工具,特别是 DexGuard and Arxan。 Arxan 确实非常聪明,但它的成本要比 DexGuard 这样的解决方案高得多。

再见,

对于反编译的 aar 和 jar 保护,您可以使用 Quixxi。当然努力就是尽可能的提高整体的防护,不可能是没有的。但是这个解决方案结合了你提出的两点中最好的一点。发生的是以下转换:

输入:未受保护的jar文件

输出:java调用原生层的文件

您[或需要管理包含您的库的应用程序的开发人员] 稍后可以按照相同 link 中的描述集成它。此外,如果需要保护整个应用程序的其他部分,则可以使用同一工具保护整个应用程序

希望对您有所帮助,祝您有个愉快的一天,
安东尼奥