游戏隐藏与反检测技术揭秘
一、反调试技术
当检测到调试器后,可以采用多种方法来混淆控制流,以此躲避调试分析,以下是几种常见的反调试技术:
1.崩溃调试器
可以尝试让调试器崩溃,例如下面的代码能让OllyDbg v1.10崩溃:
OutputDebugString("%s%s%s%s");字符串"%s%s%s%s"包含格式说明符,而OllyDbg会将其传递给printf()且不附带任何额外参数,这就导致了调试器崩溃。可以把这段代码放在检测到调试器时调用的函数中,但此方法仅对OllyDbg有效。
2.制造不可避免的无限循环
另一种混淆方法是让系统过载,迫使调试者关闭程序和调试器。以下函数就能实现这一目的:
void SelfDestruct() { std::vector<char*> explosion; while (true) explosion.push_back(new char[10000]); }这个无限循环会持续向explosion添加元素,直到进程耗尽内存或被强制关闭。
3.栈溢出
若想彻底迷惑分析者,可以构建一系列函数,间接导致栈溢出: