这一讲涉及到windows底层技术.跟汇编内容. 我们才可以实现模块隐藏(也称为DLL隐藏)
一丶API反汇编勾引兴趣
我们都用过Windows的进程跟线程API 也就是 GetCurrentThreadId() 跟 GetCurrentProcessId():
一个是获取进程ID,一个是线程ID
那么我们利用反汇编技术.看看其实现代码是什么.

可以看到使用了FS寄存器.并且获取18内容. 然后+20内容获取出我们的进程Pid
那么FS寄存器是什么.
二丶FS寄存器简介
FS寄存器如果学习过内核的同学们应该知道.段选择子. 在这里就不说了.
FS是执向一个TEB结构的一个寄存器. TEB结构是什么. TEB结构是线程环境快. 保存了当前的线程的信息.
MSDN中.TEB是一个假的TEB.只告诉你有这个东西. 具体我们需要时Windbg查看结构体成员.
我们通过反汇编.知道了TEB结构的地址 .也就是 mov eax,dword ptr fs:[0x18]
那么其实Windows底层也提供了一个获取TEB结构的API . NtCurrentTeb() 返回TEB的地址.因为TEB结构我们并没有.所以直接用DWORD接受即可.
当然可以通过dt TEB知道结构体的成员. 那么我们可以伪造. 不过这个不是我们的重点.
首先Win32下TEB 的结构跟64位下的TEB结构不一样.
32位下 TEB获取是 mov eax,fs:[0x18] 64位下是 mov rax,qword ptr gs:[0x30] 具体的可以自己逆向一个访问TEB的API查看即可.
三丶以32位讲解. 熟悉TEB结构体.
这里直接列出dt出来的32位下的TEB结构体
+0x000 NtTib : _NT_TIB //TIB结构.存储栈信息 +0x01c EnvironmentPointer : Ptr32 Void +0x020 ClientId : _CLIENT_ID //保存进程ID跟线程ID +0x028 ActiveRpcHandle : Ptr32 Void +0x02c ThreadLocalStoragePointer : Ptr32 Void +0x030 ProcessEnvironmentBlock : Ptr32 _PEB //PEB进程环境快结构. +0x034 LastErrorValue : Uint4B +0x038 CountOfOwnedCriticalSections : Uint4B +0x03c CsrClientThread : Ptr32 Void +0x040 Win32ThreadInfo : Ptr32 Void +0x044 User32Reserved : [26] Uint4B +0x0ac UserReserved : [5] Uint4B +0x0c0 WOW32Reserved : Ptr32 Void +0x0c4 CurrentLocale : Uint4B +0x0c8 FpSoftwareStatusRegister : Uint4B +0x0cc SystemReserved1 : [54] Ptr32 Void +0x1a4 ExceptionCode : Int4B +0x1a8 ActivationContextStackPointer : Ptr32 _ACTIVATION_CONTEXT_STACK +0x1ac SpareBytes : [36] UChar +0x1d0 TxFsContext : Uint4B +0x1d4 GdiTebBatch : _GDI_TEB_BATCH +0x6b4 RealClientId : _CLIENT_ID +0x6bc GdiCachedProcessHandle : Ptr32 Void +0x6c0 GdiClientPID : Uint4B +0x6c4 GdiClientTID : Uint4B +0x6c8 GdiThreadLocalInfo : Ptr32 Void +0x6cc Win32ClientInfo : [62] Uint4B +0x7c4 glDispatchTable : [233] Ptr32 Void +0xb68 glReserved1 : [29] Uint4B +0xbdc glReserved2 : Ptr32 Void +0xbe0 glSectionInfo : Ptr32 Void +0xbe4 glSection : Ptr32 Void +0xbe8 glTable : Ptr32 Void +0xbec glCurrentRC : Ptr32 Void +0xbf0 glContext : Ptr32 Void +0xbf4 LastStatusValue : Uint4B +0xbf8 StaticUnicodeString : _UNICODE_STRING +0xc00 StaticUnicodeBuffer : [261] Wchar +0xe0c DeallocationStack : Ptr32 Void +0xe10 TlsSlots : [64] Ptr32 Void +

