您希望对代码进行模糊处理的目的是什么?我没有遇到participating in contests以外的任何实际目的,但我确信必须有一些明智和有用的理由来混淆源代码。
为什么一般来说,您是否希望或需要对代码进行模糊处理?
混淆有哪些现实应用?
答案 0 :(得分:14)
答案 1 :(得分:9)
它会减慢(但不会阻止那些已确定的)对代码进行逆向工程。
答案 2 :(得分:7)
答案 3 :(得分:6)
代码混淆在perl首次发布的时候变得流行起来。它实际上是使代码更有效的工件。在昔日的早期,在既定的“c”编程社区和“叛徒”perl倡导者之间发生了各种各样的火焰战争。老派的家伙显然通过选址表现来胜过perl家伙。响应中的perlers(?)开始提出性能黑客而不考虑可读性。因此,混淆。这当然不再需要了,因为perlers(?)在很久以前就承认了演出(很好的piun?)。我见过的混淆绝不用于安全目的。事实上,如果你建议将它作为某种安全措施,那么人们会把你从房间里嘲笑出来。试图规避安全性的黑客通常非常了解他们所针对的语言和工具集。这是什么让他们如此成功。混淆绝不是对他们的辩护。
答案 4 :(得分:5)
假设您与公司签订合同以生产某些软件。他们是一种痛苦的工作,基本上让你的生活变得生硬。合同的一部分说,项目完成后你必须翻过所有源代码......:D
答案 5 :(得分:3)
阅读here
混淆的目标是创造 混乱。随着混乱的建立, 人类思维的能力 理解多方面的知识分子 概念恶化。请注意这一点 戒律没有说改变 前向(可执行)逻辑 - 仅 难以理解地代表它。什么时候 一个写得很好的混淆器工具 处理可读程序指令, 可能的副作用是 输出不仅会混淆人类 翻译,它会打破一个 反编译。
答案 6 :(得分:1)
它可以减慢恶意黑客试图以未经授权或不受欢迎的方式盗版或以其他方式修改您的软件。不是很多,但如果你担心街道发布日期,几天或几小时都很重要。
这不符合道德规范,但拥有只有您理解的关键任务代码才是某些程序员确保其工作安全的一种方式。
答案 7 :(得分:1)
如果你启动一个逻辑清晰的应用程序,那么混淆可以在某种程度上防止竞争对手逐字地刷你的逻辑。
当你是一个新网站时,击败“我也是”人群可能很重要。
但是预防很弱并且不值得恕我直言。
答案 8 :(得分:1)
代码混淆通常应用于解释性语言,例如php,其中源代码未编译,必须分发给最终用户。 实际上,混淆是可以破解的,我只是用它来保持诚实的人诚实。你知道,获得破解比实际到达信用卡更容易。
答案 9 :(得分:1)
最重要的用途是减小尺寸。我总是在Javascript和手机的Java应用程序(j2me)上使用它。
一些混淆器也可以进行一些小的优化。
答案 10 :(得分:1)
我们向用VHDL和Verilog设计电路的人销售混淆器。因为这样的设计通常相当大,所以要混淆很多(通常是成千上万行),并且试图对它们进行逆向工程是非常困难的。
答案 11 :(得分:0)
作为一个具体的例子,看一下gmail背后的脚本。这被混淆了主要是为了阻止一些有进取心的黑客创建一个与gmail服务器通信的替代前端。
次要 - 虽然重要 - 可以减少脚本大小。
答案 12 :(得分:0)
我在现实生活中使用过代码模糊处理。我开发了企业软件(Java servlets)。对于servlet,编译的类必须驻留在服务器上才能运行(WAR / JAR文件)。在大多数情况下,它们驻留在我可以a)控制或b)信任运营商的服务器上。
但是,有一个客户坚持要求应用程序驻留在他们的服务器上以供“内部网”使用。由于客户端具有“不太好的”道德规范的历史,我首先采取了通过混淆器运行编译的Java的预防措施。我也很好地测试了结果,以确保反编译的代码几乎无法使用。
你可能会问“为什么要与这样的客户打交道?”,但这个特定应用程序的整体营销是我无法控制的,尽管任何安全问题都没有。这是针对特定情况的最佳折衷解决方案
干杯,
-R
答案 13 :(得分:0)
混淆不会打败一个坚定的黑客或保护你的绝密算法,但在大多数情况下,这不是重点。传统上,它只需要足够好以使公司为软件支持和更新付费,而不是自己去努力去模糊和维护软件。
我在Unix的早期首次遇到混淆,因为大多数不同的cpu架构和缺乏聪明的链接器或常见的目标文件格式,大多数C程序都必须以源代码形式提供。
随着解释语言的兴起,混淆现在可能比以往任何时候都更多地用于商业软件。
答案 14 :(得分:0)
代码混淆限制了商业应用。但是,它可以以独特的方式帮助锐化开发人员的工具箱。混淆的代码可以作为清除记录良好的代码设计的极端对应。