Java混淆器,它从不在反编译中提供纯文本

时间:2016-03-23 16:26:21

标签: java obfuscation

我遇到过许多Java混淆器,它们只是重命名类名,可以通过在线java反编译器查看。但我想要一个混淆器,它可以生成无法使用任何工具反编译的输出。 (我们可以用这种方式模糊.net项目。)

请建议我这样的java混淆器?

2 个答案:

答案 0 :(得分:2)

搜索“流混淆”。

始终可以进行反编译。但是,许多反编译器都希望字节码由javac等常规编译器生成,并且无法从流混淆类中恢复可编译的Java源代码。结果往往是如此破碎,以至于人类很难识别原始(Java高级)控制流程。这造成了额外的障碍,只能通过在字节码分析中投入更多时间来克服这一障碍。

但请注意,这是一场竞赛:反编译器在这方面也变得更好。因此,您应该始终针对可以获得延迟的所有反编译器测试混淆的结果。

我们在一个项目中使用了一个名为“allatori”的混淆器(连同第二个主要基于名称的混淆器),结果非常令人满意。

答案 1 :(得分:1)

正如Stefan所说,流混淆是一种混淆旧反编译器的简单方法。对于现代反编译器,您将不得不付出更多努力。以下是您可以搜索的一些功能:

  • 合成修饰符(JD-GUI不显示合成成员)
  • 不透明谓词(将其视为无法静态解析的垃圾代码)
  • 字符串加密
  • 不确定它叫什么,但replacing all invokes with invokedynamics is cruel。需要Java 8才能运行和反编译。

一切都是可逆的,但它会使它变得更加痛苦。