2

我想混淆代码只是为了好玩。我正在查看来自国际混淆 c 竞赛的代码:http: //www.ioccc.org/我真的不知道如何开始对其中一些代码进行逆向工程以使其有意义。

有哪些常见的混淆技术以及如何理解混淆代码?

4

1 回答 1

7

混淆代码有很多不同的技术,这里有一个很小的、非常不完整的列表:

  1. 标识符修饰。您会发现人们只使用 a、b、c 之类的名称,或者您会发现与变量/函数的实际用途完全无关的标识符。去混淆将是分配合理的名称。

  2. 大量使用条件评估运算符? :,替换所有出现的if() else. 在大多数难以阅读的情况下,反混淆会重新插入if().

  3. 大量使用逗号运算符而不是;. 结合 2. 和 4.,这基本上可以让整个程序成为main().

  4. 的递归调用main()。您可以通过使用 main 可以用来决定做什么的参数将任何函数折叠到 main 中。将此与通过递归替换循环相结合,您最终会得到整个程序的主要功能。

  5. 您可以与 3. 和 4. 完全相反的方向,通过创建大量几乎什么都不做的函数将所有内容分解成碎片。

  6. 您可以通过将值存储在堆栈上来混淆数组的存储。如果您需要两次遍历数据,总有方便的fork()调用来方便地复制您的堆栈。

正如我所说,这是一个非常不完整的列表,但通常,混淆通常是对任何有效编程技术的严重系统性滥用。如果 IOCCC 允许 C++ 条目,我会打赌输入大量模板代码,大量使用抛出异常作为 if 替换,隐藏多态背后的结构等。

于 2013-09-25T17:34:10.843 回答