您看到混淆人群在设计中使用了哪些常见做法?我发现从事不允许重写的项目很有趣,而这将是解决问题的更快和最有效的解决方案。
6 回答
我最喜欢的总是围绕着变量……将不再使用的变量留在代码中,然后给它们所有无意义的名称。当然,如果你真的想混淆,你必须小心避免几乎所有的约定。因此,一个完美的方法是拥有两个类似使用的变量,一个名为 myVar1,另一个名为 myVarOne。类似的东西...
另一种方法是包含仅在代码中可见的未使用控件。我盯着一个 ASP.NET 站点看了一个小时,试图弄清楚为什么将 FormView 放入其中......(没有答案)。
我曾经研究过 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
会很好地排列。
我们有一个人在名为 /kensington 的文件夹中处理存储文件,以便“隐藏”它们。它只是包含一些他不想看到的 xml 文件,并且认为人们不会在那里查看。
代码中没有或无用的注释,也没有有用的文档。
我和一个程序员一起工作,他曾经编写过非常复杂的条件,当遇到这些条件时,会调用一个简单地完成系统的方法。他在整个应用程序中做了几十次。仍然不知道为什么....
在那里,我认为设计良好的代码应该独立地被阅读,而不是被破译。
我了解鼓励关心混淆的人在其他环境中使用 dotfuscator 等工具及其等效工具。混淆的意义在于使代码更难反编译,而不仅仅是让它工作起来很痛苦。
为什么有人会故意设计糟糕的代码(除了演示陷阱)我无法理解。