有没有办法编译隐藏源代码?

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

有没有办法(或者是什么方式)完全编译生成的war / jar文件,以便隐藏源代码,而不可能反编译?

或者甚至在编译之后,是否可以轻松地反编译并获取字符串和类? 例如db connection等。

谢谢。

不,如果没有反编译的可能性 ,你就无法编译任何东西 。 也就是说,你可以做一些事情来使这个过程更加昂贵。

真正的诀窍是让成本低,而其他成本高昂。 简而言之,期望支付更多的时间/金钱/不便,并意识到你刚刚以一种方式(可能变得容易规避)更难以应对挑战。 但是,从好的方面来看,整个软件行业已经很好地完成了没有绝对保护反对反编译。

签名并密封您的JAR文件。 这可以防止人们向JAR文件中添加内容并阻止人们更换部分代码(以便更好地了解操作程序)。

考虑一个类/方法名称混淆器。 这会将您的类和方法名称重命名为包含小名称的等效结构,例如“aa(..)”而不是“Client.connect(…)”。 这使得其他人更难以阅读您的代码(在这种情况下其他人包括您自己,所以如果您打算调试,这会增加您支持代码的成本)。 哦,这打破了任何reflection,所以你必须为reflection提供解决方法和修复。

如果您提供任何类型的正常日志记录,您还需要对日志记录进行模糊处理,否则只需要读取类中发出的日志消息,以确定类“h”是DatabaseConnection,类“k”是“用户”数据对象等

始终可以提取类中的嵌入字符串。 所以,如果你想保护它们,你必须嵌入“乱码”字符串,并在使用前“解扰”它们。 这样做会产生CPU开销,一旦知道“解扰”路由,就可以规避整个过程。

存在异乎寻常的解决方案,例如将代码重写为执行类似操作的等效代码。 问题是,为了使最终的可交付成果有用,它仍然必须与原始的相同,但现在调试输出甚至不遵循原始代码。

通常人们希望保护解决问题的能力,而不是源代码。 记住这一点,通过提供有效的东西,经常复制已编译的元素足以破坏“这段代码是我的”思维方式。 如果您真的想要控制代码,请不要释放它,设置服务器并在您自己的硬件上“提供服务”软件解决方案。

也许你应该看到这个和这个

你在寻找什么称为混淆。 java有几种流行的字节码混淆器。

快速搜索grails或groovy代码混淆器,它应该生成一堆结果。 如果你知道自己在做什么,那么之后反编译就相当容易了。 没有万无一失的方式。