windbg获取TEB(线程环境块)信息

windbg下载安装配置符号路径

如果是win10直接下载windbg预览版,预览版只有win10才能用,我的是win7所以下载的是老版本的,老版本去官网中的win10 sdk中下载 链接:https://developer.microsoft.com/zh-cn/windows/downloads/sdk-archive
在这里插入图片描述
下载后会有x86和64位两个版本,两个版本都要配置符号路径,否则只能使用一个版本
快捷键 ctrl+s弹出符号路径配置,路径写上:srvd:\symbolslocalhttp://msdl.microsoft.com/download/symbols**,这样如果相关符号表在d:\symbolslocal目录没有找到的话,Windbg会自动在Microsoft的Symbol Servers上下载
注意两个版本,路径修改一下盘符就可以了 ,这样路径就不一样,两个版本就可以用了

安装好以后现在通过TEB获取获取模块信息

设计思路

1利用微软提供的windbg找到不同线程对应的信息结构体,拿到相关信息
MASM中默认是fs:error,也就是默认不能使用fs段寄存器,因此要在masm中使用它时必须先assume fs:nothing。fs 段寄存器初始化后,指向当前活动线程的_TEB结构(线程结构),即_TEB首地址

2通过加30的位置拿到PEB结构体mov eax, fs:[30h]
在这里插入图片描述
3拿到通过PEB拿到_PEB_LDR_DATA的结构体
在这里插入图片描述
4通过_PEB_LDR_DATA拿到保存模块信息结构体的链表_LIST_ENTRY(有按3种不同方式排列的链表)
在这里插入图片描述
5_LIST_ENTRY实际指向的结构体类型是拿到模块信息(注意不同链表内的指针取内容拿到取的是结构体不同的位置)
在这里插入图片描述
结构体链表结构如下(和c语言一样):
在这里插入图片描述

示例代码

InjectCode:
assume fs :nothing
    mov  eax, fs:[30h]   ;拿到_PEB,注意这里要使用fs段前缀
    mov  eax, [eax+0Ch]  ;拿到_PEB_LDR_DATA
    lea  eax, [eax+1ch]  ;获取inInitializationOrderModuleList的地址
    mov  ebx, [eax];	 ;获取_LIST_ENTRY结构体指针实际是_PEB_LDR_DATA指针
    mov  ecx, ebx
LOOP1:;遍历链表查找想要的dll
    mov eax, [ebx+8h]    ;拿到模块基址MoudleBase
    mov edx, [ebx+20h]   ;拿到模块名,如果根据的是InLoadOrderLinks获取则实际位置是30,但是我用的InInitializationOrderLinks,所以从1030的位置偏移20就可以了 
    mov dl,  [edx+0ch]
    cmp dl, 33h          ;比较第6位是不是字符3
    jz  LOOP_END
    mov ebx, [ebx]       ;将指针指向下一个模块
    ;cmp ebx, ecx        ;循环结束,则跳出循环
    jmp LOOP1            
LOOP_END:
    add eax,12345678h    ;拿到LoadLibraryA的地址,这里写12345678只是开辟一个位置放实际的位置,程序注入之前会进行重定位地址,这和以前一样
    push 0000796dh       ;设置dll名为my
    push esp       
    call eax             ;调用LoadLibraryA加载dll
    
    add eax,1000h        ;拿到隐藏函数起始地址
    call eax             ;调用自动隐藏函数
    
    add esp,4h           ;平局部变量
    retn 4               ;平栈 

DLL隐藏

通过断开线程信息中的3个链表结构体中自己DLL链表的位置,实现dll隐藏,因为加载dll就是从_PEB_LDR_DATA结构中的链表遍历加载dll的

;dll自隐
HideMyDll proc
;断开inInitializationOrderModuleList中的链表线
    LOCAL @dwCurrent:dword
    LOCAL @dwLast:dword
    LOCAL @dwNext:dword

assume fs :nothing
    mov  eax, fs:[30h]   ;拿到_PEB
    mov  eax, [eax+0Ch]  ;拿到_PEB_LDR_DATA
    lea  eax, [eax+1ch]  ;根据inInitializationOrderModuleList
    mov  ebx, [eax];
    mov  ecx, ebx
LOOP1:
    mov eax, [ebx+8h]    ;拿到模块基址MoudleBase
    mov edx, [ebx+20h]   ;拿到模块名
    mov edx, [edx]       ;拿到前面几个字符
    cmp edx, 0079006dh   ;比较开头是不是my
    jz  LOOP1_END
    mov ebx, [ebx]       ;将指针指向下一个模块
    jmp LOOP1     
LOOP1_END:
    mov @dwCurrent,ebx   ;保存一下当前链表的基址
    
    ;修改ModuleList链表
    mov eax,ebx
    lea eax,[eax+4]      ;拿到当前下一个的地址    
    mov ebx,[eax]        
    mov @dwLast,ebx      ;保存后一个链表的起始地址
    
    mov eax,@dwCurrent
    mov eax,[eax]
    mov @dwNext,eax      ;保存上一个链表的起始地址
    add eax,4  
    mov ebx,@dwLast        
    mov dword ptr [eax],ebx  ;修改上一个链表的下一个地址
    
    mov eax,@dwNext
    mov [ebx],eax
    
    ;修改LoadOrderLinks链表
    sub @dwCurrent,10h
    mov eax,@dwCurrent
    
    lea eax,[eax+4]      ;拿到当前下一个的地址    
    mov ebx,[eax]        
    mov @dwLast,ebx      ;保存后一个链表的起始地址
    
    mov eax,@dwCurrent
    mov eax,[eax]
    mov @dwNext,eax      ;保存上一个链表的起始地址
    add eax,4  
    mov ebx,@dwLast        
    mov dword ptr [eax],ebx  ;修改上一个链表的下一个地址
    
    mov eax,@dwNext
    mov [ebx],eax
    
    ;修改InMemoryOrderLinks链表
    add @dwCurrent,8h
    mov eax,@dwCurrent
    
    lea eax,[eax+4]      ;拿到当前下一个的地址    
    mov ebx,[eax]        
    mov @dwLast,ebx      ;保存后一个链表的起始地址
    
    mov eax,@dwCurrent
    mov eax,[eax]
    mov @dwNext,eax      ;保存上一个链表的起始地址
    add eax,4  
    mov ebx,@dwLast        
    mov dword ptr [eax],ebx  ;修改上一个链表的下一个地址
    
    mov eax,@dwNext
    mov [ebx],eax
    
    ret
HideMyDll endp
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Windbg 中查看所有线程,可以使用如下命令: ``` ~* ``` 该命令会列出所有线程的编号、状态和调用堆栈等信息。其中,`~` 表示选择线程,`*` 表示所有线程。例如,以下是列出所有线程的示例输出: ``` 0 Id: 15b0.1d98 Suspend: 1 Teb: 7ffde000 Unfrozen 1 Id: 15b0.1f68 Suspend: 1 Teb: 7ffdc000 Unfrozen 2 Id: 15b0.1f6c Suspend: 1 Teb: 7ffda000 Unfrozen 3 Id: 15b0.1f70 Suspend: 1 Teb: 7ffd8000 Unfrozen 4 Id: 15b0.1f74 Suspend: 1 Teb: 7ffd6000 Unfrozen 5 Id: 15b0.1f78 Suspend: 1 Teb: 7ffd4000 Unfrozen 6 Id: 15b0.1f7c Suspend: 1 Teb: 7ffd2000 Unfrozen 7 Id: 15b0.1f80 Suspend: 1 Teb: 7ffd0000 Unfrozen 8 Id: 15b0.1f84 Suspend: 1 Teb: 7ffce000 Unfrozen 9 Id: 15b0.1f88 Suspend: 1 Teb: 7ffcc000 Unfrozen 10 Id: 15b0.1f8c Suspend: 1 Teb: 7ffca000 Unfrozen 11 Id: 15b0.1f90 Suspend: 1 Teb: 7ffc8000 Unfrozen 12 Id: 15b0.1f94 Suspend: 1 Teb: 7ffc6000 Unfrozen 13 Id: 15b0.1f98 Suspend: 1 Teb: 7ffc4000 Unfrozen 14 Id: 15b0.1f9c Suspend: 1 Teb: 7ffc2000 Unfrozen 15 Id: 15b0.1fa0 Suspend: 1 Teb: 7ffc0000 Unfrozen 16 Id: 15b0.1fa4 Suspend: 1 Teb: 7ffbe000 Unfrozen 17 Id: 15b0.1fa8 Suspend: 1 Teb: 7ffbc000 Unfrozen 18 Id: 15b0.1fac Suspend: 1 Teb: 7ffba000 Unfrozen 19 Id: 15b0.1fb0 Suspend: 1 Teb: 7ffb8000 Unfrozen 20 Id: 15b0.1fb4 Suspend: 1 Teb: 7ffb6000 Unfrozen 21 Id: 15b0.1fb8 Suspend: 1 Teb: 7ffb4000 Unfrozen 22 Id: 15b0.1fbc Suspend: 1 Teb: 7ffb2000 Unfrozen 23 Id: 15b0.1fc0 Suspend: 1 Teb: 7ffb0000 Unfrozen 24 Id: 15b0.1fc4 Suspend: 1 Teb: 7ffae000 Unfrozen 25 Id: 15b0.1fc8 Suspend: 1 Teb: 7ffac000 Unfrozen 26 Id: 15b0.1fcc Suspend: 1 Teb: 7ffaa000 Unfrozen 27 Id: 15b0.1fd0 Suspend: 1 Teb: 7ffa8000 Unfrozen 28 Id: 15b0.1fd4 Suspend: 1 Teb: 7ffa6000 Unfrozen 29 Id: 15b0.1fd8 Suspend: 1 Teb: 7ffa4000 Unfrozen 30 Id: 15b0.1fdc Suspend: 1 Teb: 7ffa2000 Unfrozen 31 Id: 15b0.1fe0 Suspend: 1 Teb: 7ffa0000 Unfrozen 32 Id: 15b0.1fe4 Suspend: 1 Teb: 7ff9e000 Unfrozen 33 Id: 15b0.1fe8 Suspend: 1 Teb: 7ff9c000 Unfrozen 34 Id: 15b0.1fec Suspend: 1 Teb: 7ff9a000 Unfrozen 35 Id: 15b0.1ff0 Suspend: 1 Teb: 7ff98000 Unfrozen 36 Id: 15b0.1ff4 Suspend: 1 Teb: 7ff96000 Unfrozen 37 Id: 15b0.1ff8 Suspend: 1 Teb: 7ff94000 Unfrozen 38 Id: 15b0.1ffc Suspend: 1 Teb: 7ff92000 Unfrozen 39 Id: 15b0.2000 Suspend: 1 Teb: 7ff90000 Unfrozen 40 Id: 15b0.2004 Suspend: 1 Teb: 7ff8e000 Unfrozen 41 Id: 15b0.2008 Suspend: 1 Teb: 7ff8c000 Unfrozen 42 Id: 15b0.200c Suspend: 1 Teb: 7ff8a000 Unfrozen 43 Id: 15b0.2010 Suspend: 1 Teb: 7ff88000 Unfrozen 44 Id: 15b0.2014 Suspend: 1 Teb: 7ff86000 Unfrozen 45 Id: 15b0.2018 Suspend: 1 Teb: 7ff84000 Unfrozen 46 Id: 15b0.201c Suspend: 1 Teb: 7ff82000 Unfrozen 47 Id: 15b0.2020 Suspend: 1 Teb: 7ff80000 Unfrozen ``` 其中,`Id` 列显示线程的编号,`Suspend` 列显示线程是否被挂起,`Teb` 列显示线程环境的地址。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值