有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java有没有一种编译隐藏源代码的方法?

使用Play、Grails或任何其他JVM框架

有没有一种方法(或者什么方法)可以完全编译生成的war/jar文件,这样就可以隐藏源代码,而不需要反编译

甚至在编译之后,是否可以轻松地反编译并获取字符串和类?e、 g.db连接等

谢谢


共 (4) 个答案

  1. # 1 楼答案

    也许你应该看看thisthis

  2. # 2 楼答案

    快速搜索grails或groovy代码混淆器,应该会生成一系列结果。如果你知道自己在做什么,那么事后反编译是相当容易的。没有万无一失的办法

  3. # 3 楼答案

    你要找的是模糊处理。java有几种流行的字节码混淆器

  4. # 4 楼答案

    不,如果没有反编译的可能性,你不能编译任何东西。也就是说,你可以做一些事情来提高这个过程的成本

    真正的诀窍是让成本对你来说很低,而对其他人来说很昂贵。简言之,期待付出更多的时间/金钱/不便,并意识到你只是在某种程度上让挑战变得更难(这可能很容易规避)。但是,从好的方面来看,整个软件行业都过得很好,没有绝对的反编译保护

    在JAR文件上签名并盖章。这会阻止人们向JAR文件添加内容,并阻止人们替换部分代码(以便更好地理解操作程序)

    考虑类/方法名称混淆器。这将把类和方法名重命名为一个等价的结构,其中包含像“a.a(…)”这样的小名称而不是“Client.connect(…)”。这使得其他人更难阅读您的代码(在本例中,其他人也包括您自己,因此如果您打算进行调试,这会增加您支持代码的成本)。哦,这会破坏任何反射,所以你必须为反射提供解决方案和修复

    如果您提供了任何一种合适的日志记录,您还需要混淆日志记录,否则只需读取从类发出的日志消息,就可以确定类“h”是数据库连接,类“k”是“用户”数据对象,等等

    类中嵌入的字符串总是可以提取的。所以,如果你想保护它们,你必须嵌入“加扰”字符串,并在使用前对其进行“解扰”。这样做会带来CPU开销,一旦知道“解扰”路由,整个过程就可以绕过

    异国情调的解决方案存在,比如将代码重写为执行类似操作的等效代码。问题是,要使最终交付的产品有用,它仍然必须执行与原始产品相同的操作,但现在调试输出甚至没有遵循原始代码

    通常人们想要保护解决问题的能力,而不是真正的源代码。记住这一点,通过交付一些有效的东西,经常复制已经编译好的元素就足以打破“这段代码是我的”思维模式。如果你真的想控制你的代码,不要发布它,建立一个服务器,并在你自己的硬件上提供“作为服务”的软件解决方案