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

时间:2015-11-02 11:14:45

标签: java android security android-ndk obfuscation

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

  1. 制作Jar并混淆jar,之后变得无法使用。并且它使用Strings无用的方法(它不加密字符串)。

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

  3. 我试图找出其他方法可以做到这一点。 请帮我解决一下这个。如果您有任何想法,请分享。我不仅仅是有责任。

    感谢。

3 个答案:

答案 0 :(得分:2)

你的应用程序可以做的任何事情,也可以由一个坚定的有能力的黑客进行逆向设计,所以不要期望一些神奇的方法来使这个密钥永久保护。

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

另一方面,如果我按字面意思读取您的要求,则密钥字符串不会以纯文本形式出现在APK中。简单的解决方案是对其进行编码。你可以做一些像key64的base64编码一样简单的事情,或者像提供一个动态计算这个键的C函数一样棘手(因此strings的输出中不会出现任何键的痕迹)。 / p>

答案 1 :(得分:1)

这是一个难题。您正在与逆向工程应用程序进行斗争。有针对此构建的工具,尤其是DexGuardArxan。 Arxan非常非常聪明,但它比DexGuard这样的解决方案要花费更多。

答案 2 :(得分:0)

Ciao

对于防反汇编的Aar和Jar保护,可以使用Quixxi。当然,努力是要尽可能提高整体保护,没有什么是没有的。但是,此解决方案结合了您提出的两点优点。发生了以下转换:

输入:未受保护的jar文件

input jar file

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

output jar file

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

希望这对您有所帮助,并祝您过得愉快, 安东尼诺