有没有办法以不可反向工作的格式部署Java程序?
我知道如何将我的应用程序转换为可执行的JAR文件,但我想确保代码不能进行逆向工程,或者至少不容易.
源代码的混淆不计算......它使得理解代码变得更加困难,但不会隐藏它.
一个相关的问题是如何锁定已编译的Java类以防止反编译?
一旦我完成了程序,我仍然可以访问原始源代码,因此维护应用程序不会成为问题.如果应用程序是分发的,我不希望任何用户能够反编译它.混淆不能实现这一点,因为用户仍然可以对其进行反编译,虽然他们很难跟踪操作流程,但他们将能够看到代码,并可能从中获取信息.
我关心的是代码中是否有与远程访问相关的信息.应用程序使用用户提供的用户标识和密码连接主机.有没有办法从用户隐藏主机的地址,如果该地址位于源代码内?
简短的回答是"不,它不存在".
逆向工程是一个并不意味着完全依赖代码的过程.它基本上试图理解底层机制,然后模仿它们.例如,通过复制Netscape的JavaScript行为,无需访问代码即可从MS实验室中看到JScript.副本非常完美,即使是错误也被复制了.
您可以使用YGuard对JAR文件进行模糊处理.它不会混淆您的源代码,而是编译后的类,因此以后维护代码没有问题.
如果你想隐藏一些字符串,你可以加密它,使得通过查看源代码变得更难(如果你混淆JAR文件,它会更好).
如果您知道要定位的平台,那么可以将Java编译为本机代码,例如Excelsior JET或GCJ.
除此之外,你永远无法隐藏源代码,因为用户总是拥有你的字节码并且可以Jad它.
你正在用一种内省的语言写作核心语言的一部分.它生成.class
其规范广为人知的文件(从而使其他供应商能够生成Java编译器和解释器的洁净室实现).
这意味着有公开的反编译器.所需要的只是一些谷歌搜索,你有一些Java代码与你的相同.只是没有注释,一些变量名称(但函数名称保持不变).
实际上,无论如何,混淆是关于所有你能得到的(虽然反编译的代码已经被轻微混淆),而不是去C或其他一些完全编译的语言.