最好的Java混淆器?[关闭]


107

我正在开发安全软件,并希望混淆我的Java代码,因此将无法进行反向工程。什么是最可靠的Java混淆器?


10
@Xinus“变得不可能进行反向工程”-几乎没有,最好是尝试过并且失败了
蚂蚁

212
我有一些同事创建了一些高度混淆的代码。但这不是他们的意图。
史蒂夫·麦克劳德

7
It was once said that if you had an infinate amount of monkeys on typewiters and an infinate amount of time, they would write all of the great works of Shakespeare.-Dilbert
蚂蚁

7
避免反向工程是不可能的。
Mnementh,2010年

11
@Mnementh:对于您的特定应用程序而言,足以使反向工程变得非常昂贵。
德米特里·莱斯科夫

Answers:


99

首先,您确实需要牢记,对某些东西进行逆向工程永远是不可能的。一切都是可入侵的。使用智能IDE的智能开发人员已经可以做得足够多了。

好吧,您可以在这里找到列表。ProGuard非常不错。我曾经使用过它,但是只是“最小化” Java代码。


1
@BalusC:那么,您使用什么工具来混淆Java代码?您会混淆您的Java代码,不是吗?
Thinhbk 2012年

@Thinhbk混淆使获取有用的堆栈跟踪变得更加困难。
托尔比约恩Ravn的安徒生

@ThorbjørnRavnAndersen:同意。海事组织,混淆将使堆栈跟踪变得几乎没有用。在这种情况下,我在日志味精中使用了一些技巧,可以提供帮助。
Thinhbk 2015年

2
@Thinhbk Proguard会生成一个映射,以将混淆的堆栈跟踪信息转换回原始代码。否则,正如您所说,堆栈跟踪将变得无用(但无论如何谁都会遇到未捕获的异常... ;
Matthieu

@Matthieu:是否可以将堆栈跟踪自动转换回原始代码?太好了,对我来说是新的。我只是知道,如果代码库很大,手动翻译可能会很困难。
Thinhbk

33

如果计算机可以运行它,那么有适当动机的人可以对它进行逆向工程。


3
有多少人可以阅读混淆的代码并理解逻辑?我有很多工程师朋友,他们做不到。只有John Nash可以做到;)
kodmanyagha

5
@kodmanyagha如果他们有足够的动力,他们将学习它。不难
托尔比约恩Ravn的安德森

1
从数学意义上讲,可以在不进行逆向工程的情况下运行。这就是同态加密的含义,但是要使它在与SaaS相对的计算机软件上实际可用,还需要解决许多障碍。我们正在那里缓慢移动。Gentry在完全同态加密和“数学拼图”上的开创性著作,作者:Amit Sahai等。在这个方向上取得了巨大的飞跃。只有一个缺失的元素(我称之为“屏障函数”)会使整个方案可行。现在,将来不可能的事将成为可能。
ogggre


15

我认为Proguard是最好的。也可以将其与IDE(例如NetBeans)集成。但是,请考虑一下,如果对代码进行混淆处理,可能很难在日志中跟踪问题。


6
+1表示“考虑到如果混淆了代码,可能很难跟踪日志中的问题”。就在您认为调试够困难的时候……
Adam Paynter 2010年

7
更改名称和行号信息的好的混淆器应产生一个日志,用来逆转该过程。这样,至少堆栈跟踪对于混淆的二进制文件仍然有用。
Joachim Sauer 2010年

3
ProGuard创建此类反向文件以进行调试。:-)
Malax




6

我曾经在我以前的公司中与Klassmaster合作,并且运作得非常好,并且可以与构建系统很好地集成在一起(Maven支持非常出色)。但是它不是免费的。



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.