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

Phi*_*hil 1 java grails groovy jvm playframework

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

有没有一种方法(或者是什么方法),以充分编译生成的战争/ jar文件,这样的源代码可以被隐藏,而不会反编译的可能性?

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

谢谢.

Edw*_*uck 7

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

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

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

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

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

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

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

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