【问题标题】:Obfuscate C code [closed]混淆C代码[关闭]
【发布时间】:2018-08-01 08:32:24
【问题描述】:

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

#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()

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

【问题讨论】:

  • 这些宏只是将一件事替换为另一件事 - 不难理解如何
  • 查找“令牌粘贴”。
  • 它只是一个带有参数的宏,将一些参数粘合形成一个字符串,而不是使用其他参数来混淆读者。
  • 这对未来的 SO 用户/访问者没有用处。
  • @MartinJames Wrong!

标签: c obfuscation


【解决方案1】:

_ 替换为____(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

【讨论】:

  • 感谢您的解释。这种技术叫什么?
猜你喜欢
  • 2010-10-20
  • 1970-01-01
  • 2013-06-09
  • 2013-10-01
  • 1970-01-01
  • 2011-10-26
  • 2010-09-18
  • 2011-11-21
相关资源
最近更新 更多