C中代码混淆的教程

Cha*_*dra 5 c obfuscation

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

Mor*_*enn 24

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

简短且无意义的标识符

因为a=aaa*aa;总会比以前更混淆result = value * factor;

为了获得简短的标识符,混淆器甚至会涉及#define很多东西.

反转数组索引

你只需要记住它var[3]并且3[var]是等同的.

有向图和三角形

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

应该不如下:

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

看起来相似的角色

有时候,很难APPART说l,1Io,0O.例如,如果你写10l,我打赌每个人都会读101.

编码风格指南

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

以下是一些链接:


lus*_*oog 5

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

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