混淆C代码

Fah*_*rza -4 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;
}
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?它是如何_()main()

编辑:我一直在寻找这里使用过的"技术术语".

Chr*_*ons 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 = m,r = a,s = i,o = n,因此你main

这种技术称为"令牌粘贴".它不是你每天都会使用的东西,但有时候它会非常有用.请参阅GCC 关于令牌粘贴的文档.