0x0 基础知识
00 TLS 是什么?
01 TLS 回调函数
- TLS提供了一个回调函数,在线程初始化和终止时会被调用,
这个回调函数会在程序入口点(即main函数)之前执行 ,调试器通常会在主函数入口点设置断点,因此TLS回调函数经常被用作反调试手段。 - TLS回调函数允许我们编写并执行任意代码。TLS有两种类型:静态TLS和动态TLS。静态TLS将TLS相关数据硬编码在PE(Portable Executable)文件中,而动态TLS在运行时分配和管理TLS数据。静态TLS是将TLS相关数据硬编码在PE(Portable Executable,可执行文件)中。静态TLS存储在PE头的IMAGE_DATA_DIRECTORY DataDirectory[9]位置,可以通过该位置找到TLS目录的详细信息。
- 通过在TLS回调函数中加载和执行shellcode,我们可以在程序的正常执行流之前运行这段代码。这种方法可以绕过调试器设置的断点,增加分析和调试的难度
TLS回调函数遵循特殊的编写约定,与DLL主函数类似。回调函数使用以下类型定义:
typedef VOID
(NTAPI *PIMAGE_TLS_CALLBACK) (
PVOID DllHandle, //DLL模块的句柄
DWORD Reason, //调用原因。这个参数与DLL调用时的原因相同,例如:DLL_PROCESS_ATTACH(当进程加载DLL时)、DLL_THREAD_ATTACH(当线程创建时)等
PVOID Reserved //保留参数,通常用于区分DLL是显式加载还是隐式加载
);
0x1 实现代码
© 版权声明
THE END
暂无评论内容