如何保护Java/Javafx代码不被最终用户看到



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

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

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

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

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

您可以考虑的一个可能的解决方案是将您认为最敏感的代码重写到C/C++库中。将其编译为相应操作系统的.so/.dll/.dlib文件是可能的,这将使反编译变得困难,并非完全不可能,但也很困难。

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

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

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

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