【问题标题】:Common design by obfuscation practices? [closed]混淆实践的通用设计? [关闭]
【发布时间】:2009-04-27 19:27:10
【问题描述】:

您见过哪些混淆人群在设计中使用的常见做法?我发现参与不允许重写的项目很有趣,而这将是解决问题的更快和最有效的解决方案。

【问题讨论】:

  • 我不明白你的问题。混淆和想要重写一些代码之间有什么联系?
  • 我的观点是关于代码的完全残骸使它变得模糊,我只是想听听其他人的乐趣。
  • 可怕的是这些模式中的大多数都出现在产生这个问题的项目中。

标签: anti-patterns


【解决方案1】:

我最喜欢的总是围绕着变量...将不再使用的变量留在代码中,然后给它们全无意义的名称。当然,如果你真的想混淆,你必须小心避免几乎所有的约定。因此,一个完美的方法是拥有两个类似使用的变量,一个名为 myVar1,另一个名为 myVarOne。诸如此类……

另一种方法是包含仅在代码中可见的未使用控件。我盯着一个 ASP.NET 站点看了一个小时,试图弄清楚为什么 FormView 被放入其中..(没有答案)。

【讨论】:

    【解决方案2】:

    我曾经研究过 perl 代码,作者决定让大多数 subs 接收单个散列作为变量,并返回相同的散列并添加或删除数据。基本上一个全局哈希用于通过不同的代码路径传递数据。

    看起来像这样:

    my $hash = ();
    
    $hash->{'CUSTID'} = 1001;
    $hash = GetAccounts($hash);
    
    if ($hash->{'AccountTotal'} > 100) {
        $hash = getTotals($hash);
        $hash->{'Acct_Sbkt_Marker'} = 'R1';
        $hash->{'Acct_Invr_Marker'} = 'BT';
        $hash = removeInvalidAccount($hash);
    }
    

    直到今天我都无法弄清楚他试图用这个实现什么设计模式。

    我记得$hash 会很好地排列。

    【讨论】:

      【解决方案3】:

      我们有一个工作人员将文件存储在名为 /kensington 的文件夹中,以便“隐藏”它们。它只是包含一些他不想看到的 xml 文件,并且认为人们不会在那里查看。

      【讨论】:

        【解决方案4】:

        代码中没有或无用的 cmets,也没有有用的文档。

        【讨论】:

        • 我认为这取决于代码。我见过添加 cmets 只是混乱的时候。但在其他时候,如果能知道开发人员的想法会非常好。
        • 当代码更改并且 cmets 不再与代码的功能匹配时,这通常是一个问题。让下一位读者很难弄清楚代码是错误的还是 cmets。没有 cmets 总比没有错误 cmets 好。
        【解决方案5】:

        我曾与一位程序员一起工作,该程序员曾经编写非常复杂的条件,当遇到这些条件时,会调用一个简单地执行系统的方法。他在整个应用程序中做了几十次。还是不知道为什么....

        【讨论】:

          【解决方案6】:

          我当时在想,设计良好的代码应该独立阅读,而不是破译。

          我了解,我们鼓励关心混淆的人在其他环境中使用 dotfuscator 等工具及其等效工具。混淆的意义在于使代码更难反编译,而不仅仅是让它难以处理。

          为什么有人会故意设计糟糕的代码(除了演示陷阱)我无法理解。

          【讨论】:

          • 我不反对。意外或故意的“设计混淆”可能是一个真正的痛苦。我只是想了解人们遇到的其他“设计”
          猜你喜欢
          • 1970-01-01
          • 2013-02-19
          • 1970-01-01
          • 1970-01-01
          • 2010-09-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-09
          相关资源
          最近更新 更多