有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

反编译和开发人员向Android应用程序提供java安全密钥

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

  1. 制作罐子并混淆罐子,之后就无法使用了。还有它处理字符串的无用方法(它不加密字符串)

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

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

谢谢


共 (3) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

    再见

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

    输入:未受保护的jar文件

    input jar file

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

    output jar file

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

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

  3. # 3 楼答案

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

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

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