创建非逆向工程Java程序

创建非逆向工程Java程序,java,jar,compilation,Java,Jar,Compilation,有没有办法以不可反向工程的格式部署Java程序 我知道如何将我的应用程序转换成可执行的JAR文件,但我想确保代码不能被反向工程,或者至少不容易 对源代码的混淆不算数。。。它使代码更难理解,但不会隐藏代码 一个相关的问题是 一旦我完成了程序,我仍然可以访问原始源代码,因此维护应用程序将不是问题。如果应用程序是分布式的,我不希望任何用户能够对其进行反编译。模糊处理无法实现这一点,因为用户仍然能够对其进行反编译,尽管他们很难遵循操作流,但他们能够看到代码,并可能从中获取信息 我关心的是代码中是否有任

有没有办法以不可反向工程的格式部署Java程序

我知道如何将我的应用程序转换成可执行的JAR文件,但我想确保代码不能被反向工程,或者至少不容易

对源代码的混淆不算数。。。它使代码更难理解,但不会隐藏代码

一个相关的问题是


一旦我完成了程序,我仍然可以访问原始源代码,因此维护应用程序将不是问题。如果应用程序是分布式的,我不希望任何用户能够对其进行反编译。模糊处理无法实现这一点,因为用户仍然能够对其进行反编译,尽管他们很难遵循操作流,但他们能够看到代码,并可能从中获取信息


我关心的是代码中是否有任何与远程访问相关的信息。应用程序使用用户提供的用户id和密码连接到一个主机。如果主机地址位于源代码中,是否有方法向用户隐藏该地址?

您可能会用以下代码混淆JAR文件它不会混淆源代码,而是编译的类,因此以后维护代码没有问题


如果你想隐藏一些字符串,你可以对它进行加密,这样通过查看源代码就更难获得它(如果你把JAR文件弄糊涂就更好了)。

我很想问你为什么要这样做,但我不想说了


我看到的问题是,JVM和CLR一样,需要能够插入代码,以便JIT编译和运行它。您可以将其变得更“复杂”,但鉴于字节码规范有很好的文档记录,并且存在于比x86汇编程序规范更高的级别,您不可能“隐藏”流程,因为它必须在那里,程序才能首先工作。

您使用的语言将内省作为核心语言的一部分。它生成规范广为人知的
.class
文件(从而使其他供应商能够生产Java编译器和解释器的洁净室实现)

这意味着有公开可用的反编译器。只需要几次谷歌搜索,你就有了一些Java代码,可以做和你一样的事情。只是没有注释和一些变量名(但函数名保持不变)


实际上,不管怎么说,模糊处理就是不必使用C或其他完全编译的语言就可以得到的(尽管反编译的代码已经有点模糊了)。

如果您知道要使用的是哪种平台,那么可以获得一些将Java编译成本机代码的东西,例如或

除此之外,您永远无法隐藏源代码,因为用户总是拥有您的字节码,并且可以隐藏它。

这是不可能做到的

任何可以编译的东西都可以反编译。你所能做的就是把它弄糊涂

话虽如此,在量子密码学中发生了一些有趣的事情。本质上,任何试图读取消息的行为都会改变它。我不知道这是否适用于源代码。

简短的回答是“不,它不存在”


逆向工程是一个完全不需要查看代码的过程。它基本上是试图理解潜在的机制,然后模仿它们。例如,微软实验室通过复制Netscape的JavaScript行为而不访问代码,JScript就是这样出现的。副本非常完美,连bug都被复制了。

不要使用解释语言?你到底想保护什么?如果它足够有价值,任何东西都可以逆向工程。有人足够关心,对大多数项目进行逆向工程的机会微乎其微。模糊处理至少提供了一个最小的障碍


确保您的(IP)通过其他机制得到保护。特别是对于安全代码,人们能够检查实现非常重要,这样安全性就在算法中,而不是源代码中。

即使您将代码编译成本机语言,也有各种各样的程序可以让您从本质上将其反编译成汇编语言并遵循流程(OlyDbg,IDA Pro)。

将其转换为一个web服务。然后,您是唯一可以看到源代码的人。

如果在某个时候解释了任何内容,则必须“以清晰的方式”对其进行处理。一旦代码通过JAD运行,字符串将显示为day。您可以在应用程序中部署加密密钥,或者执行基本的ceasar密码来加密主机连接信息,并在运行时解密

但在处理过程中的某个时刻,必须清除主机连接信息,以便您的应用程序连接到主机


所以你可以静态地隐藏它,但是如果他们运行调试器,你就不能在运行时隐藏它。这是不可能的。CPU必须执行你的程序,也就是说,你的程序必须是CPU可以理解的格式。CPU比人要笨得多。因此,如果CPU可以理解你的程序,人就可以。这是不可能做到的这不是Java的问题。任何可以编译的语言都可以用Java进行反编译,这样更简单


你试图在没有实际显示的情况下向某人显示一张图片。这是不可能的。即使你在应用程序级别隐藏,你也不能隐藏你的主机。有人仍然可以通过或任何其他网络嗅探器对其进行绘图。

考虑到隐藏代码的问题,我无论如何都会运行。

正如有人所说,反向工程公司uld始终反编译您的可执行文件。保护您的源代码(或算法)的唯一方法