混淆发布代码的优点是什么?


12

我想到的具体示例涉及当前的Alpha游戏《我的世界》,但这是一个普遍的问题,我认为需要进行一些讨论。

Minecraft是用Java编写的,堆栈跟踪通常如下所示(实际示例):

java.lang.NullPointerException
    at d.a(SourceFile:247)
    at gi.b(SourceFile:92)
    at bd.a(SourceFile:33)
    at bn.a(SourceFile:69)
    at bn.e(SourceFile:115)
    at bn.d(SourceFile:103)
    at net.minecraft.client.Minecraft.i(SourceFile:1007)
    at net.minecraft.client.Minecraft.run(SourceFile:596)
    at java.lang.Thread.run(Unknown Source)

显然,这些不是开发人员在编写时使用的实际包和方法名称。由于他处于Alpha阶段,因此开发人员似乎希望能够理解他的堆栈跟踪,特别是如果有人能够为错误报告提供一个。就目前而言,它几乎毫无意义。

克服这种难以识别错误的缺点的代码,可能会希望获得什么样的优势?


1
简而言之,混淆处理改变了对代码进行逆向工程的经济性,仅此而已。
Mark Booth 2012年

Answers:


22

我们也混淆了我们的Java代码。

这样做的好处是,它使逆向工程变得更加困难(例如,如果您担心有人在窃取您的代码库并将其用作创建相似的竞争产品的库,等等)。

您可以获取原始的堆栈跟踪:那里有混淆处理工具,它们会创建特殊的参考文件,您可以使用这些文件来运行经过混淆的堆栈跟踪,原始的源堆栈跟踪会附带这些文件。它们是由混淆过程本身生成的,因此除非您首先使用了用于混淆代码的参考文件,否则您将无法获得原始堆栈跟踪。

这确实没有缺点。:)


3
有趣的是,我从不知道它们带有“堆栈跟踪未混淆”(从未使用过混淆器)……真是个好主意:-)
Dean Harding 2010年

1
我曾经遇到过的唯一缺点是,有时会产生混淆器(在这种情况下是.NET),将其混淆到抖动甚至无法读取的程度(非法指令)。大规模失败。
vcsjones

@vcsjones:那不是真正令人困惑的地方吗?
配置器

3
  • 保护您的知识产权

大多数混淆器还会优化您的代码,删除无用的元数据或未使用的代码,压缩,清除无效代码或重复删除。


如果必须使用混淆器进行这种优化,则所使用的编译器必须是一款非常懒惰的软件。
phresnel 2011年

@phresnel:是的混淆器可以做得很好

@phresnel:可能不完整,但很糟糕……

你是对的。让我重新发布。
phresnel 2011年

1
不是我不相信你,而是我不相信你。我做!但是所有这些优化通常也由现代编译器来执行。至少我知道gcc拥有了所有这些。因此,我的观点是:如果混淆器确实确实为您提供了显着的加速,则可能是编译器[供应商]没有尽力而为,或者没有给它适当的优化标志。
phresnel 2011年
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.