本文主要是介绍3环PEB断链,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
每个线程都有一个TEB结构来存储线程的一些属性结构,TEB的地址用fs:[0]
来获取,在0x30这个地址有一个指针指向PEB
结构
然后定位到PEB,PEB就是进程用来记录自己信息的一个结构,在PEB的0x00c
偏移有一个 Ldr _PEB_LDR_DATA
结构跟进去
在_PEB_LDR_DATA
里有三个双向链表
InLoadOrderModuleList
:模块加载的顺序
InMemoryOrderModuleList
:模块在内存的顺序
InInitializationOrderModuleList
:模块初始化的顺序
以InLoadOrderModuleList
为例,双向链表的含义起始就是最后的指针会指向自己
那么了解了基本原理之后我们就可以通过断链来实现模块的隐藏,我们知道如果要枚举模块一般都是使用CreateToolhelp32Snapshot
拍摄快照,然后找到模块列表之后进行遍历,其实api也是通过找_PEB_LDR_DATA
这个结构来获取程序有哪些模块,那么我们如果想隐藏某个dll,就可以通过修改这几个双向链表的方法来进行隐藏
_DRIVER_OBJECT
结构体中 0x014的偏移有一个成员,DriverSection
可以实现对内核模块的遍历。DriverSection 是一个指针,实际上是对应着一个结构体:_LDR_DATA_TABLE_ENTRY
所以这里我们如果要想隐藏某个指定的dll,就可以通过DllBase
的方式,通过GetModuleHandleA
获取dll的句柄,来进行比对
这篇关于3环PEB断链的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!