9

可以轻松提取.jar文件并查看源代码。我想保护源代码不被看到。一种可能的答案是对文件进行密码保护,就像我们对 zip 文件所做的那样。

但是,如果知道密码,则可以很容易地看到源代码。

有什么方法可以隐藏源代码并且仍然可以运行吗?类似于 a.exe在 Windows 中所做的事情。这应该在 Windows 和 Linux 环境中运行。

4

5 回答 5

5

看看ProGuard,它是一个流行的 java 混淆器。至于将您的 java 程序打包为 windows 可执行文件,这篇文章可能会对您有所帮助:如何将我的 Java 程序转换为 .exe 文件?

于 2013-01-24T01:30:06.633 回答
5

您要搜索的是“java 混淆”。有很多工具可以帮助解决这个问题,但如果想要你的代码的人真的想要它,那将是一场失败的战斗。如果这是一个严重的问题,您应该用 C++ 编写。

于 2013-01-24T01:32:09.170 回答
5

可以轻松提取 .jar 文件并查看源代码。

严格来说,这是不正确的。除非您实际上已将源代码文件包含在 JAR 中,否则有人看不到原始源代码。但他们可以(通常)将 JAR 文件中的“.class”文件反编译为功能上与原始源代码等效的 Java 源代码。

正如其他答案所述,您可以让试图对您的代码进行逆向工程的人更难;例如,通过使用混淆器或自定义类加载器来解密以加密形式存储在 JAR 文件中的代码。但是,您无能为力,不足以阻止一个坚定的黑客打败您的措施。没有什么。

保护您的代码免受逆向工程的唯一实用方法是不发布它。或者使用软件许可或其他合法手段来达到你的目的。

于 2013-01-24T03:34:11.857 回答
3

如果您打算简单地阻止普通观众,那么 Java 的许多代码混淆工具中的任何一个都可能会有所帮助。它会使字节码混乱到足以使您的算法不那么明显。

另一方面,如果您需要“绝对”保护,那么任何加密/混淆工具都是无用的 - 如果您的计算机可以运行它,那么一个坚定且知识渊博的攻击者最终将能够弄清楚您的代码是如何工作的。

几个可能的解决方案:

  • 使用客户端/服务器架构在您拥有的计算机上运行专有部分,这样您就不必在客户端应用程序中包含代码中更有趣的部分。当然,由于各种原因,这种解决方案并不总是可行的。

  • 聘请几位专门研究知识产权问题的律师并为您的算法申请专利。在我看来,这远比试图在非技术问题上强制采用技术解决方案的替代方案......

于 2013-01-24T01:39:16.653 回答
0

搜索“java 混淆”。有很多工具可以帮助解决这个问题,但如果有人真的一心想检索源代码,你就无法阻止他。要实现与安全相关的内容,您应该用 C++ 编写代码,然后创建动态库(Windows 为 .dll,Linux 为 .so)并使用 java jni 来使用它们。

在 Windows 上,您可以使用 mingw 来编译代码。

看看这个 https://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface.html

于 2016-03-23T07:35:48.750 回答