使您的Jar不被反编译

使您的Jar不被反编译,jar,executable,Jar,Executable,如何将Java应用程序打包到无法反编译的可执行jar中(例如,通过Jadclipse)。如果JRE可以运行它,应用程序就可以反编译它 您所能期望的最好方法是使其非常难以阅读(将所有符号替换为“l”和“1”以及“O”和“0”的组合,并放入大量无用的代码等等)。你会惊讶地发现,即使使用一个相对愚蠢的翻译工具,你也能编写出不可读的代码。 这被称为模糊处理,虽然不完美,但有时已经足够了 记住,你不能阻止坚定的黑客,就像阻止坚定的窃贼一样。你要做的是让那些不经意的攻击者很难对付。当出现符号O001l1ll

如何将Java应用程序打包到无法反编译的可执行jar中(例如,通过Jadclipse)。如果JRE可以运行它,应用程序就可以反编译它

您所能期望的最好方法是使其非常难以阅读(将所有符号替换为“l”和“1”以及“O”和“0”的组合,并放入大量无用的代码等等)。你会惊讶地发现,即使使用一个相对愚蠢的翻译工具,你也能编写出不可读的代码。 这被称为模糊处理,虽然不完美,但有时已经足够了


记住,你不能阻止坚定的黑客,就像阻止坚定的窃贼一样。你要做的是让那些不经意的攻击者很难对付。当出现符号
O001l1ll10O
o001ll10o
OO01l1ll10O
O0Ol11ll10O
O001l1ll10O
,以及似乎没有任何用处的代码时,大多数人都会放弃。

首先,你不能避免人们对代码进行反向工程。JVM字节码必须是普通的才能执行,并且有几个程序可以对其进行反向工程(同样适用于.NET CLR)。您只会使查看和理解代码的门槛(即成本)越来越高

通常的方法是用一些工具找到源代码。类、方法和字段在整个代码库中被重命名,即使使用无效标识符(如果您选择),也会使代码无法理解。我在过去的比赛中取得了很好的成绩。混淆后,使用反编译器查看代码的外观

除了模糊处理,您还可以使用某种方法加密类文件(除了一个小的启动类之外),并使用自定义类装入器对其进行解密。不幸的是,类加载器类本身无法加密,因此人们可能通过读取类加载器的反编译代码来找出解密算法。但是攻击代码的窗口变小了。同样,这并不能阻止人们看到您的代码,只是让偶尔的攻击者更难看到


您还可以尝试将Java应用程序转换为一些windows EXE,这将隐藏它到底是Java(在某种程度上)的线索,或者根据您对JVM功能的需要编译成机器代码。(我没有试过。)

是一个免费工具,可以编译成字节码或本机代码。请记住,这确实有点违背了Java的目的。

我知道有点晚了,但答案是否定的

即使您使用C语言编写并编译为本机代码,也会有一些disassembler/调试器,允许人们逐步完成您的代码。诚然,在没有符号信息的情况下调试优化代码是一件痛苦的事情,但这是可以做到的,我有时不得不这么做

您可以采取一些步骤使这一点变得更加困难-例如,在windows上,您可以在循环中调用API,查看是否有人正在调试您的进程,如果是,并且这是一个发布版本-终止该进程。当然,一个足够坚定的攻击者可以截获您对IsDebuggerPresent的调用,并始终返回false


出现了各种各样的技术——想要保护某些东西的人和想要将其公开的人,这是一场名副其实的军备竞赛!一旦你沿着这条路走下去,你将不得不不断更新/升级你的防御系统,这是没有止境的。

这不是我的实际解决方案,但在这里,我认为好的收藏或资源和教程可以让你达到最高的满意度

(甲骨文社区)

(干净的方式),混淆你的代码,有许多开源和免费的 模糊工具,这里是它们的简单列表:t]。 这些工具使您的代码不可读(尽管您仍然可以反编译) (它)通过改变名字。这是最常见的保护您的安全的方法 代码

2.(不是很干净)如果你有一个特定的目标平台(比如windows),或者你可以为不同的平台提供不同的版本, 您可以在较低的级别编写算法的复杂部分 像C这样的语言(很难反编译和理解)和 将其用作java应用程序中的本机库。不干净,, 因为我们很多人使用java来实现跨平台功能 这种方法会减弱这种能力

下面是一个步骤,如下所示:

享受吧!
添加您的解决方案我们需要更多。

如何、哪些以及在何处应用这样的场景,先生?如果您能分享更多关于您的发现,我将不胜感激,您是否能够在ccoversion之后运行,或者将其称为Library,或者您是否能够从命令行或可执行文件中运行它们?C何时变得“非常难以反编译”?