1625-5 王子昂 总结《2017年11月23日》 【连续第419天总结】
A. TLS回调函数
B.
上次HCTF遇到了TLS反调,只大致看了一下,这次正好书上看到,详细记录一发
介绍
TLS是各线程独立的数据存储空间。
使用TLS技术可在线程内部独立使用或修改进程的全局数据或静态数据,就像对待自身的局部变量一样。
进程启动运行时,在执行EP代码前,系统会逐一调用存储在TLS回调函数地址数组中的函数
这个特性使得它经常被用来作为反调试机制
每当创建、终止线程时都会自动调用TLS回调函数,甚至包括主线程。
定义
typedef VOID
(NTAPI *PIMAGE_TLS_CALLBACK)(
PVOID DllHandle,
DWORD Reason,
PVOID Reserved
);
它与DllMain函数很相似,包括参数顺序和意义:
DllHandle模块句柄、Reason调用原因、 Reserved加载方式(显式/隐式)
其中调用原因Reason也同样有4个值,分别宏定义为
DLL_PROCESS_ATTACH 1 //主线程main函数执行之前调用
DLL_THREAD_ATTACH 2 //线程函数开启之前调用
DLL_THREAD_DETACH 3 //线程执行完毕后调用
DLL_PROCESS_DETACH 0 //主线程main函数执行完毕后调用
C. 明日计划
TEB和PEB