为什么要混淆代码?

时间:2009-05-16 02:57:30

标签: obfuscation

您以前是否曾对代码进行过模糊处理?这样做有合理的理由吗?

13 个答案:

答案 0 :(得分:20)

我混淆了我的JavaScript。它使它变小,从而减少了下载时间。此外,由于代码交给客户,我的公司不希望他们能够阅读它。

答案 1 :(得分:14)

是的,使逆向工程变得更难。

答案 2 :(得分:8)

为了确保终身工作,当然(开玩笑)。

这非常有趣和有教育意义:How to Write Unmaintanable Code

答案 3 :(得分:8)

它被称为“工作安全”。这也是使用Perl的原因 - 不需要将混淆作为单独的任务,因此可以提高工作效率,而不会损失工作安全性。

如果你愿意的话,可以称之为“通过混淆的安全性”。

答案 4 :(得分:7)

我不相信让逆向工程更难是一个正当理由。

混淆代码的一个很好的理由是减少编译的足迹。例如,J2ME应用程序需要尽可能小。如果您通过混淆器(和优化器)运行app,那么您可以将jar从几Mb减少到几百Kb。

另一点是,大多数混淆器也是可以提高应用程序性能的优化器。

答案 5 :(得分:2)

这不是通过默默无闻的安全措施吗?当您的源代码公开可用(javascript等)时,您可能希望至少有点难以理解客户端实际发生的事情。

安全总是充满妥协。但我认为默默无闻的安全是最不有效的方法之一。

答案 6 :(得分:1)

我相信所有电视有线电视盒都会混淆java代码。这确实会让事情变得更难破解,而且由于有线电视盒将在你家中,因此它们在理论上是可以破解的。

我不确定它有多重要,因为有线卡仍然可以控制信号加密并直接从视频源而不是java代码指南或java应用程序获得授权,但他们非常专注于这个概念。

顺便说一句,跟踪从混淆堆栈中抛出的异常并不容易!我实际上记得aH意味着特定构建的“空指针异常”。

答案 7 :(得分:0)

我记得在.NET中创建了一个用于在线备份的Windows服务应用程序。我可以轻松地使用Visual Studio或.NET Reflector之类的工具来查看其中的类和源代码。

我创建了一个新的Visual Studio Test应用程序并添加了Windows服务引用。双击引用,我可以看到所有类,命名空间的一切(虽然不是源代码)。任何人都可以通过查看类名来弄清楚模块的内部工作。在我的例子中,一个这样的类是FTPHandler,它清楚地告诉备份的去向。

.NET Reflector通过显示实际代码来超越它。它甚至可以选择导出整个项目,以便获得一个VS项目,其中所有类和源代码与开发人员类似。

我认为混淆是有意义的,如果不是不可能让某人进行拆解,那就更难了。此外,我认为对于涉及大客户群的产品而言,您不希望竞争对手了解您的产品,这是有意义的。

答案 8 :(得分:0)

如果我向客户提供Java Swing应用程序,我总是在分发之前对类文件进行模糊处理。

你永远不会太小心 - 我曾经在我的班级文件中指出了一个不错的Java反编译器(我使用了JD Java Decompiler - http://www.djjavadecompiler.com/)并且获得了原始代码几乎完美的再现。那是相当令人不安的,所以从那时起我开始混淆我的生产代码。我自己使用Klassmaster(http://www.zelix.com/klassmaster/

答案 9 :(得分:0)

查看我为磁盘驱动程序项目编写的一些代码让我质疑被混淆的含义。

    ((int8_t (*)( int32_t, void * )) hdd->_ctrl)( DISK_CMD_REQUEST, (void *) dr );

或者只是在C中进行系统编程?或者该行应该以不同的方式写出来?问题...

答案 10 :(得分:0)

是和否,我还没有使用易于分解的工具交付应用程序。

我确实为旧的Basic和UCSD Pascal解释器运行了类似混淆器的东西,但这是出于不同的原因,优化了运行时间。

答案 11 :(得分:0)

我大部分时候混淆了我的Android应用程序的代码。我使用了ProGuard工具来混淆代码。 当我从事C#项目时,我们的团队使用了ArmDot。它是许可和混淆系统。 现代混淆器不仅用于使黑客程序变得困难。他们能够保护程序和游戏免于作弊,检查许可证/密钥,甚至优化代码。 但是我认为没有必要在每个项目中都使用混淆器。

答案 12 :(得分:-1)

当你需要在源代码中提供某些东西时(通常是由于它内置的环境,例如没有共享库的系统,特别是如果你卖家没有)正在构建的确切系统),但您不希望您提供给它的人能够显着地(或根本)修改或扩展它。

这曾经比今天更常见。它还导致(已解散?)混淆C大赛。

合法(虽然可以说不是“合法”)使用可能是为您以混淆方式与GPL代码链接的应用程序发布“来源”。它的来源,可以被修改,它只是非常难。这将是一个更极端的版本,没有评论释放它,或释放所有空白修剪,或(这将推动法律理由可能)释放从C生成的汇编源(也许手动调整,所以你可以说它不是只是中间代码)。