1

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

问题是,当软件在最终客户手中时,我正在与之合作的公司希望代码无法访问,因为 Java 代码包含一些极其敏感的信息,如果最终客户碰巧知道这些信息,可能会对公司产生非常糟糕的后果. 客户实际上可以执行他们无权执行的操作。

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

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

4

1 回答 1

0

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

您可以考虑的一种可能的解决方案是将您认为最敏感的代码重写为 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 编写了我们的代码。

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

我很想知道其他人可能会在这个解决方案中看到什么问题。

于 2019-01-19T00:42:22.397 回答