混淆C代码

时间:2018-02-21 16:54:53

标签: c obfuscation

我最近遇到了这个混淆代码:

#include <stdio.h>

#define _____(i,s,o,g,r,a,m)(i##r##s##o)
#define _ _____(m,i,n,u,a,l,s)

int _()
{
    printf("Hello World!");
    return 0;
}

这里发生了什么? _() main()是怎样的?

编辑: 我一直在寻找这里使用过的“技术术语”。

1 个答案:

答案 0 :(得分:5)

_已被____(m,i,n,u,a,l,s)

取代 通过宏____(m,i,n,u,a,l,s)

过滤的

____(i,s,o,g,r,a,m)(i##r##s##o)

i##r##s##o将参数i, r, s, o粘贴在一起以形成文本。 i = mr = as = io = n,因此您获得了main

此技术称为“标记粘贴”。它不是你每天都会使用的东西,但有时它会非常有用。有关令牌粘贴的信息,请参阅GCC的documentation