【问题标题】:How can I protect Java/Javafx code from being seen by final user?如何保护 Java/Javafx 代码不被最终用户看到?
【发布时间】:2019-01-18 20:20:30
【问题描述】:

两年多以来,我一直在为一家公司单独从事一个项目。该项目是一个非常大的项目,它使用 rxtx 与硬件设备进行通信。我为 UI 使用了 Java 8 和 JAVAFX。现在几乎完成了,我开始研究如何交付公司将分发给客户的最终用户应用程序。

问题在于,与我合作的公司希望在软件在最终客户手中时无法访问代码,因为 Java 代码包含一些极其敏感的信息,如果最终客户发生,这些信息可能会给公司带来非常糟糕的后果认识他们。客户实际上可以执行他们无权执行的操作。

所以在搜索(很多)并相对于我的案例进行思考之后,我明白给一个 JAR 混淆不是解决方案。然后我尝试生成一个 JAR,然后将其转换为 EXE,但我成功的只是将 JAR 包装到 EXE 中,这不会阻止提取 JAR,然后轻松查看所有代码。最后,我发现我应该使用像 GCJ 编译器这样的 AoT 编译来从我的 Java 代码生成本机二进制 exe,但是在这里我被卡住了,因为在观看视频和阅读文章等之后,我没有找到一种清晰的方法来生成本机二进制可执行程序。

我现在很困惑,因为我不知道我是否走在正确的道路和正确的方向上,或者我是否完全错了,还有另一种保护代码的方法(至少不受非专业黑客的影响,我理解它不可能让它 100% 安全,但我只是在寻找一种合理且好的方法)。我应该如何管理我工作的最后一步?

【问题讨论】:

  • “问题是我正在与之合作的公司希望在软件在最终客户手中时无法访问代码,因为 java 代码包含一些极其敏感的信息,这些信息可能非常如果最终客户碰巧认识他们,这会给公司带来不好的后果。客户实际上可以执行他们无权执行的操作。” 这听起来像是一个很大的安全问题,不管你有没有能力都应该解决隐藏“源代码”。无论信息的存储方式如何,在最终产品中包含敏感信息都是一个糟糕的主意。
  • 我同意@fabian。您目前依赖于“通过默默无闻的安全性”,并且您正在询问如何改善默默无闻的部分。您不应该在编译的源代码或二进制文件中隐藏任何您不愿意以纯文本形式保留的内容。如果这个秘密足够有利可图,普通黑客很快就会成为专业黑客。听起来您需要一种硬件方法来验证请求来自您的软件,而不是其他任何地方。从这个角度想一想,看看你能不能想出什么办法。
  • 你试过用 C/C++ 重写它吗?

标签: java security javafx executable confidentiality


【解决方案1】:

我目前为一家公司工作,该公司的代码出于法律原因,我们不希望任何人访问这些代码,以确保我们客户的安全——不太重要。 ;-)

您可以考虑的一种可能的解决方案是将您认为最敏感的代码重写为 C/C++ 库。可以将其编译成 .so/.dll/.dylib 文件以供各自的操作系统使用,这会使反编译变得困难,并非完全不可能,但难以反编译。

麻烦在于学习如何从 Java 访问本机代码,因为大部分文档没有帮助或根本不存在。这将利用 Java 本地接口 (JNI),它允许 Java 与本地(编译的 C/C++)代码进行接口。这将使创建一个 Jar 文件成为可能,该文件将有效地成为一个 Java 库,供您在项目的其余部分中访问。然而,本机代码仍然需要在运行时加载,但这是学习 JNI 如何工作的一部分。我为 JNI 找到的一个有用链接是 http://jnicookbook.owsiak.org/(只要它仍然是一个功能链接)。

我在这里工作的一个客户有一个用 Java 编写的项目,并且需要实现我们的代码,不幸的是这些代码都是用 C 编写的。所以我们需要一种从 Java 访问这个 C/C++ 代码的方法。这就是我们在不重写 Java 代码的情况下解决这个问题的方法。但是我们的好处是(?)已经用 C 编写了代码。

最后一分钟用我可能熟悉或不熟悉的另一种语言编写一堆额外代码的解决方案听起来不是特别有趣。

我很想知道其他人在使用此解决方案时可能会遇到什么问题。

【讨论】:

    猜你喜欢
    • 2020-07-21
    • 2013-02-10
    • 2016-08-26
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多