抱歉,我不太清楚如何说明问题标题。我的问题是这样的,我开发了一个Java程序,我希望将它分发给我的朋友。所以我将它导出到Jar文件,但我不希望他们提取jar文件来查看代码。无论如何都要制作程序,以便没有人可以获得源代码而只是启动程序。
答案 0 :(得分:11)
您始终可以从已编译的类文件中获取原始代码。但是,通过使用混淆器,您可以使那些希望反编译此类代码的人的生命变得非常困难,因此反编译代码几乎无法读取。以下是您可能希望调查的open-source java obfuscators列表。
答案 1 :(得分:6)
如果计算机可以运行它,人类可以对其进行逆向工程。
答案 2 :(得分:4)
事实是,没有人想要你的源代码。认为将它们排除在外需要付出的努力是非常傲慢的。
你能做的最好的就是混淆。
答案 3 :(得分:3)
At best, obfuscation merely makes it time-consuming, but not impossible,
对程序进行逆向工程。
答案 4 :(得分:2)
Jar文件通常不包含代码。它们通常只包含运行程序所需的.class
(字节码)文件。
答案 5 :(得分:0)
您可以在服务器上执行部分程序。基本上,为了执行程序的一些重要的,大的和中心功能,客户端会联系您的服务器来计算此功能。
然后,您可以将客户端分发给每个人,并为自己保留服务器代码。只需保持服务器运行。然后其他人无法访问整个源,但可以执行该软件。
这是唯一确定的方法。其他方式可以通过一些方式以足够的努力来规避。
答案 6 :(得分:0)
您似乎将安装应用程序与可执行文件混淆。而且我也认为你混淆了一个普通的.exe的java jar应用程序。
即便如此,这些都只是仍然可以反编译的代码捆绑,它不像解压缩jar文件那么容易,它被设计为易于提取。
Java被设计为在JVM上运行,因此将它打包在.exe中是一种糟糕的形式,因为它会立即将其锁定到Windows上,这首先打败了Java。所以我会建议反对。
正如大家所说的那样,如果您的程序运行良好并且您的用户喜欢它,他们甚至会想到反编译它是很少见的。但是如果他们想要他们只是一个网络搜索,无论如何(无论语言)。关于商业发行,在大多数情况下,软件被混淆并分发在它的.jar中,具有.exe,.app,.bin等形式的体系结构特定的启动器。不要将这些与实际可执行文件混淆,通常是.jar文件。