[英]Jar File - Prevent Access to Source Code
我想将一个小型Java应用程序移交给一个可运行的jar,但我不希望任何人访问我的源代码。 我是否正确地假设jar文件中没有包含源代码(.java文件)?
User269799
假设你没有将 java文件放在jar文件中,它们不会神奇地出现:)当然,你可以在jar文件中包含你喜欢的任何东西。 您可以列出要检查的内容:
jar tvf foo.jar
请注意,Java可以很容易地进行反编译 - 因此,虽然任何收件人都无法访问带有注释等的实际源代码,但他们可以非常清楚地看到您的逻辑。 您可能希望使用混淆器来帮助保护您的IP。 我个人试图避免使用混淆器 - 考虑到当我们确实拥有通知和测试的真实来源时,我们大多数人都难以维护代码,想象一下当你没有这些东西时有多难啊:)这是你的电话。 只需确保彻底测试混淆代码 - 可能存在细微问题,尤其是在使用反射时。
Jar文件通常只包含.class文件,它们是java字节码文件以及资源。 但是,为了使代码更加安全,您需要关闭调试信息,如果您确实想要安全,请通过混淆器运行它。
编辑 :berry120的评论是对的 - 它们可以包含源文件,但通常它们不包含。 我只想澄清未来的任何读者。 这取决于您用于生成jar的工具的设置。
你是对的,jar中没有源代码(除非你将你的构建系统配置为专门放在那里)。 但是你总是冒着代码从字节码反编译的风险。 一个混淆器可能在这里有所帮助。
是。 通常,jar只包含字节编译的.class文件。 也就是说,它们也可以包含源代码 - 它取决于您(或分别是您的工具)放入它们中的内容。
但请注意,反编译在.class文件上运行得非常好,因此不要使与安全相关的任何内容依赖于代码混淆技术,例如此类。
如果计算机可以运行它,那么人类可以对其进行逆向工程,对Java来说并不是特别困难。
所以技术保护根本行不通。 您需要以具有约束力的合同或类似形式提供法律保护。 您甚至可以将您的作品置于GPL之下,但付费给您的除外,这足以让大多数企业避免窃取您的工作。
你想要避免什么情况?
通常没有,但您可以使用jar -tvf <filename>
命令进行检查。
但是我必须警告你,将大多数.class
文件反编译成合理可读的java源代码非常容易。
为了避免这种情况,你必须使用混淆器,但这需要你做一些额外的努力。 (例如RetroGuard 。)
话虽如此,问自己一个问题:“我的代码真的有价值或特殊,我需要做这一切吗?” 通常答案是否定的,我们编写的大多数代码都没有什么特别之处。
你是对的,但.class文件可以很容易地被反汇编为java代码,并且在大多数情况下它非常准确。
如果你真的需要它以确保安全,那么你需要进行模糊处理。
它将取决于您生成.jar的方式,Eclipse确实可以选择在.jar上包含.java文件,但默认情况下它被禁用,如果需要,您必须激活它。
Jar文件可能包含源(您可以选择是否包含它),因此不包括源特定不是问题。 您需要注意的是,人们可能会对jar文件中的类文件进行逆向工程。
你可以绕过这个混淆器,例如yGuard ,它很容易作为一个蚂蚁任务挂钩,但正如其他人所说,你的代码真的那么重要,没有人能看到它吗?
.jar文件不包含源代码,只包含字节码(.class)。 但由于字节代码与机器无关,因此可以非常容易地进行反编译。 无法阻止他人访问您的源代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.