Win32之隐藏DLL隐藏模块技术

 这一讲涉及到windows底层技术.跟汇编内容. 我们才可以实现模块隐藏(也称为DLL隐藏)

 

一丶API反汇编勾引兴趣

  我们都用过Windows的进程跟线程API  也就是 GetCurrentThreadId() 跟 GetCurrentProcessId():

一个是获取进程ID,一个是线程ID

那么我们利用反汇编技术.看看其实现代码是什么.

可以看到使用了FS寄存器.并且获取18内容. 然后+20内容获取出我们的进程Pid

那么FS寄存器是什么.

二丶FS寄存器简介

  FS寄存器如果学习过内核的同学们应该知道.段选择子. 在这里就不说了.

FS是执向一个TEB结构的一个寄存器. TEB结构是什么. TEB结构是线程环境快. 保存了当前的线程的信息.

MSDN中.TEB是一个假的TEB.只告诉你有这个东西. 具体我们需要时Windbg查看结构体成员.

MSDN链接: 

我们通过反汇编.知道了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    +
                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信