Java 反编译和开发人员将密钥保护到Android应用程序中

Java 反编译和开发人员将密钥保护到Android应用程序中,java,android,security,android-ndk,obfuscation,Java,Android,Security,Android Ndk,Obfuscation,我正在做一个项目,该项目要求将密钥隐藏在Android应用程序的某个地方,这样即使在反编译后也无法取出。 该要求甚至规定开发人员不应该看到密钥,这意味着它应该嵌入到一些预编译的库中。 我试过以下几件事: 制作罐子并混淆罐子,之后就无法使用了。这是一种处理字符串的无用方法,它不加密字符串 制作C库并使用该库NDK。使用linux命令可以轻松读取字符串。示例:“$strings” 我正试图找到其他方法来做到这一点。 请帮我做这个。如果你有任何想法,请分享。我将不胜感激 谢谢。你的应用程序可以做的任何

我正在做一个项目,该项目要求将密钥隐藏在Android应用程序的某个地方,这样即使在反编译后也无法取出。 该要求甚至规定开发人员不应该看到密钥,这意味着它应该嵌入到一些预编译的库中。 我试过以下几件事:

制作罐子并混淆罐子,之后就无法使用了。这是一种处理字符串的无用方法,它不加密字符串

制作C库并使用该库NDK。使用linux命令可以轻松读取字符串。示例:“$strings”

我正试图找到其他方法来做到这一点。 请帮我做这个。如果你有任何想法,请分享。我将不胜感激


谢谢。

你的应用程序可以做的任何事情,也可以由一个有决心的黑客进行反向工程,所以不要指望有什么神奇的方法使这个密钥永远安全

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


另一方面,如果我逐字阅读您的需求,那么密钥字符串在APK中不会以纯文本形式出现就足够了。简单的解决办法是对其进行编码。您可以做一些简单的事情,比如对密钥进行base64编码,也可以做一些棘手的事情,比如提供一个C函数来动态计算该密钥,这样在字符串的输出中就不会出现密钥的痕迹。

这是一个难题。您正在与应用程序的逆向工程作斗争。有一些为此而构建的工具,尤其是和。Arxan非常非常聪明,但它的成本比DexGuard这样的解决方案要高很多。

再见

对于aar和jar反编译保护,您可以使用。当然,努力是为了尽可能地提高整体保护,不可能什么都不是。但是这个解决方案结合了你提出的两个观点的优点。发生的是以下转换:

输入:未受保护的jar文件

输出:调用本机层的java文件

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

希望对你有帮助,祝你有一个愉快的一天,
安东尼诺

根据定义,该要求是不可能的。如果该应用程序可以执行并且可以访问密钥,那么其他任何人都可以获得密钥。例如,他们可以运行应用程序并使用调试器。或者,他们也可以通过应用程序解码密钥的相同步骤。谢谢回复。如果我对密钥使用其中一种编码,调试器不可能以明文形式取出并显示密钥。不,调试器程序不会这样做,但调试器人员可以相对轻松地完成。谢谢。谢谢你的建议。在过去的几天里,我一直在研究Arxan,它可能会对我有所帮助。您好@lang_android,您对使用Arxan在android中进行根检测有什么想法吗?