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
本文深入探讨了TLS(线程本地存储)回调函数的工作原理及其在进程启动时的应用。TLS允许每个线程拥有独立的数据存储空间,并可在创建或销毁线程时触发特定函数执行,这一特性常用于实现反调试技术。
2619

被折叠的 条评论
为什么被折叠?



