C++ 反反调试(TLS回调函数)

Posted mb62d3c286f15ed

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 反反调试(TLS回调函数)相关的知识,希望对你有一定的参考价值。

​关于 TSL 反调试的内容,参考这篇文章​

说完反调试,如果不说反反调试就 毫无意义

C++

下面讲下针对 TLS 回调函数的反反调试方法。

引用了 TLS 功能的程序会在 PE 文件里生成一个 TLS 表:

C++

进入这个表中查看,发现它的大小为 24 个字节:

C++

关于 TLS 的结构体,有 32 位和 64 位两个版本:

C++


C++


其中 _IMAGE_TLS_DIRECTORY64 大小为:8x4+4x2=40,_IMAGE_TLS_DIRECTORY32 大小为:4x6=24,那么就说明,我们刚刚看到的程序使用了 _IMAGE_TLS_DIRECTORY32 。我们需要的是 AddressOfCallBacks 这个成员,也就是下图中 +12 的这个位置。

C++


在 hex 界面找到 +12 这个位置,又因为 DWORD 大小为 4 ,所以再向后查 4 字节,也就是下图这个样子:

C++

把它的内容清空(设置为 0),保存。再次用 OD 打开程序,发现反反调试已经生效:

C++

C++


拜拜了您嘞



以上是关于C++ 反反调试(TLS回调函数)的主要内容,如果未能解决你的问题,请参考以下文章

成为C++高手之回调函数

ios逆向笔记之反调试 以及反反调试 和反反反调试 ptrace篇

C语言注册TLS回调函数

Crimsonland 血腥大地 逆向无敌通关分析报告配置文件加密Dll隐藏MD5检测补丁反调试函数反反调试

逆向分析反调试程序

使用 devenv 在 C++ 可执行文件中调试回调