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

时间:2012-03-01 15:37:24

标签: java grails groovy jvm playframework

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

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

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

谢谢。

4 个答案:

答案 0 :(得分:7)

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

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

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

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

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

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

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

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

答案 1 :(得分:2)

也许您应该看到thisthis

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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