与反编译器相比,Java代码混淆实际上有效吗?

与反编译器相比,Java代码混淆实际上有效吗?,java,obfuscation,decompiling,Java,Obfuscation,Decompiling,我很好奇,考虑不在晚上用Java编写某些代码,因为反编译是多么容易。有没有一种方法可以让我用Java编写而不用担心反编译器?我知道只要有足够的时间,任何东西都可以被反向工程,所以我要问的是:Java类混淆器是否足够有效,足以阻止反编译?根据我个人的经验,反编译Java时,我会说混淆会使人的反编译尝试非常恼人和困难。最让我恼火的是,最终构建的类文件都被命名为“a.class、b.class、c.class”等等,并且大量的假人被扔进去。在代码内混淆方面,try/catch可以很好地为反编译器搞乱内

我很好奇,考虑不在晚上用Java编写某些代码,因为反编译是多么容易。有没有一种方法可以让我用Java编写而不用担心反编译器?我知道只要有足够的时间,任何东西都可以被反向工程,所以我要问的是:Java类混淆器是否足够有效,足以阻止反编译?

根据我个人的经验,反编译Java时,我会说混淆会使人的反编译尝试非常恼人和困难。最让我恼火的是,最终构建的类文件都被命名为“a.class、b.class、c.class”等等,并且大量的假人被扔进去。在代码内混淆方面,try/catch可以很好地为反编译器搞乱内容

一般来说,您反编译的任何内容都是不可编译的,但会提示您程序的一般工作方式

Java类混淆器是否足够有效以阻止分解


我会说“不”。当我反编译源代码试图找出某人是如何做某事的时候,我已经知道我在寻找什么了。所以我不需要理解整个程序,只需要理解我当时感兴趣的一部分。由于对方法有足够的困惑,并且在调用链上有一点回溯,通常不需要太多的努力就可以确定隐藏在引擎盖下的内容。

坦率地说,不。无论你如何可笑地混淆代码,如果有人知道他可以从你的代码中赚一百万美元,他将反编译您的类文件并获取代码

不过,还有其他选择:

  • 将java程序转换为exe beofre分发。你一定知道这里有陷阱

  • 用密钥加密类文件。制作一个自定义类加载器,可以在将类文件加载到内存之前使用私钥对其进行解码。这里有两个问题,a)加载时间增加,b)如何隐藏私钥

  • “足够有效”完全取决于你需要它有多有效。这取决于你在保护什么,保护谁。任何传统方法(模糊处理、字节码加密、编译为“exe”)都无法在足够的时间和激励下阻止熟练且坚定的攻击者。但这几乎适用于所有形式的编程。(您也可以反汇编或反编译C/C++应用程序…)

    防止严重逆向工程的唯一方法是使用安全的执行平台;e、 g.使用基于……的东西。即使如此,如果坏人可以将逻辑分析器附加到运行代码的系统上,他们(理论上)可以捕获正在执行的本机代码,然后开始反向工程


    编辑:据报道,有人利用电子显微镜成功地打破了流行的TPM芯片;看见有趣的是,他最初的动机是破解Xbox360游戏机

    如果你的问题是我能否确保没有人能破解我的代码,答案是否定的。。 无论是在java还是Visual C++中。 只要黑客可以直接访问由“是”或“比特”组成的软件

    原因很简单

    无论您如何编码,都可以解码。

    最好的策略可能是制作一个web服务并在那里部署您的秘密逻辑。
    让其他人使用您的服务,而不必访问您的编写方式。

    在Java和其他语言中,混淆只是一种威慑。它只是提高了攻击者的门槛。这并不意味着模糊处理没有价值,只是不能保证

    你想保护什么?你的目标市场是什么

    在一个充斥着盗版的市场上,对许可证算法进行模糊保护并没有多大意义。然而,对于中小企业来说,这可能足以消灭大多数临时海盗

    如果你想保护知识产权免受竞争,我看到两个答案。这个想法,将很难保护。一个有能力的工程师查看代码将发现逻辑的精华并能够重新实现。混淆会使人们更难直接获取代码并将其包含在自己的产品中。当他们试图进行更改时,维护成本将继续增长(我想说,对于干净的反编译代码也是如此)

    我为公司开发的java产品是模糊的。他们有没有保护我们免遭盗窃……我怀疑。但是,就我们的开发成本而言,这种混淆并没有那么昂贵。以小的价格获得一点保护并不是一个坏的权衡。

    如果你读了我的帖子,你会发现我找不到一个好的java反模糊器,它实际上可以像预期的那样工作


    因此,当前的答案是:不。

    请注意,您不应该在调试版本中进行任何模糊处理,而应该在发布版本中进行!使用模糊代码非常困难。这两种代码都不会真正阻止反编译-1。)只意味着它们需要将本机可执行文件反编译到程序集-2。)如果自定义类加载器可以解密该类,他们可以从类加载器-@nate获得它…说起来容易做起来容易1)对于exe,如果反编译程序集本机代码真的有帮助,那么地球上没有任何代码是安全的2)如果只有你的类加载器知道键,你甚至读过链接了吗?1.)没有任何代码(用户可以直接访问)是逆向工程的“安全”代码——任何可执行文件都可以反编译为汇编文件——有些人既可以编写汇编文件,也可以编写Java文件。2.)无论采用何种加密方案,类加密都是无用的,因为类加载器要在JVM中工作,它必须通过defineClass()方法向JVM提供未加密的类-如何阻止某人仅仅使用类加载器解密您的类