我对人们混淆他们的代码(主要是 C)(这里的例子:http: //ioccc.org/ )的方式很着迷,并且想学习同样的各种技术。有人告诉我有一本书,“混淆 C 和其他奥秘”,但我无法得到那本书。是否有任何教程或书籍提供有关此主题的提示?谢谢你。
2 回答
你能做的最好的就是阅读 IOCCC 程序作者的评论。他们描述了他们如何设法混淆他们的代码。这里有几个指针:
简短且无意义的标识符
因为a=aaa*aa;
总是比result = value * factor;
为了拥有简短的标识符,混淆器往往会处理#define
很多事情。
反向数组索引
你只需要记住这一点var[3]
并且3[var]
是等价的。
二合字母和三合字母
if(a< <:b+aa??))??<f();%>
可读性应该低于:
if (a < (b+aa)) { f(); }
相似的字符
有时,很难分辨 appart l
、1
andI
或o
、0
and O
。例如,如果你写10l
,我打赌每个人都会读101
。
编码风格指南
一般来说,只要尝试找到好的编码指南并尝试全部违反它们。您可以在网络上的任何地方找到的那些文档比大多数东西都可以为您提供更多帮助,并且可以让您无需购买任何东西。
以下是一些链接:
Morwenn 的回答很好地涵盖了语法混淆。但是还有另一个层次,那就是语义混淆。考虑到经常提到的图灵机与任何其他编程语言具有相同的计算能力(忽略输入和输出的考虑)。事实上,所有不同的计算模型都有具有同等能力的兄弟模型。
例如,字符串char s[N]
可以被认为是从索引到字符的映射,因此任何字符串都可以由一个函数表示,该函数在使用指定的索引调用时总是提供适当的字符char f(int i)
。现在读这个。疯了吧?