C中代码混淆的教程

时间:2013-06-13 06:41:20

标签: c obfuscation

我对人们模糊他们的代码(主要是C)(这里的例子:http://ioccc.org/)的方式着迷,并希望学习相同的各种技术。我被告知有一本书,“混淆的C和其他神秘”,但我无法得到那本书。 是否有任何教程或书籍可以提供有关此主题的提示? 谢谢。

2 个答案:

答案 0 :(得分:22)

您可以做的最好的事情是阅读IOCCC项目作者的评论。他们描述了他们如何设法模糊他们的代码。以下是一些指示:

短而无意义的标识符

因为a=aaa*aa;总是比result = value * factor;

更混淆

为了获得简短的标识符,混淆器往往会#define很多东西。

反向数组索引

您必须记住,var[3]3[var]是等效的。

有向图和三角形

if(a< <:b+aa??))??<f();%>

的可读性应低于:

if (a < (b+aa)) { f(); }

外观相似的字符

有时候,很难告诉appart l1Io0O。例如,如果您撰写10l,我敢打赌每个人都会阅读101

编码风格指南

一般来说,只是尝试找到好的编码指南并尝试违反所有。您可以在网络上的任何地方找到的那些文件可以比大多数事情更有帮助,并允许您不要购买任何东西。

以下是一些链接:

答案 1 :(得分:5)

Morwenn的答案很好地涵盖了语法的混淆。但还有另一个层次,那就是语义混淆。考虑到经常提到的图灵机具有与任何其他编程语言相同的计算能力(忽略输入和输出的考虑)。实际上,所有各种计算模型都具有等效功率的兄弟模型。

例如,字符串char s[N]可以被视为从索引到字符的映射,因此任何字符串都可以由函数表示,该函数在使用指定索引char f(int i)调用时始终传递相应的字符。现在阅读this。疯了吧?