关键词不能为空

当前您在: 主页 > 英语 >

模块隐藏三种方法

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-03-02 20:46
tags:

-

2021年3月2日发(作者:世上无难事只怕有心人英语)


摘要(转自网络):



一、从

< br>PEB



Ldr


链中消失



引用内容



lkd> dt _PEB 7ffdc000 //


当前


PEB


的地址



nt!_PEB






...






+0x00c Ldr















: 0x001a1e90


_PEB_LDR_DATA



//


这里指向


Ldr


结构



lkd> dt _PEB_LDR_DATA 0x001a1e90 //


这个结构里有三个链表的表头



nt!_PEB_LDR_DATA






+0x000 Length













: 0x28






+0x004 Initialized







: 0x1 ''






+0x008 SsHandle











: (null)






+0x00c


InLoadOrderModuleList


:


_LIST_ENTRY


[


0x1a1ec0


-


0x1a34f8


]






+0x014 InMemoryOrderModuleList : _LIST_ENTRY [ 0x1a1ec8 -


0x1a3500 ]






+0x01c


InInitializationOrderModuleList


:


_LIST_ENTRY


[


0x1a1f28


- 0x1a3508 ]






+0x024 EntryInProgress



: (null)



这里看到有三 个链表,其实三个链表的内容是一样的,但是链表的顺序不一样,


分别按加载顺序、内存 顺序、初始化顺序排列。



每一个


DL L


由一个


LDR_DATA_TABLE_ENTRY


结构描述,但是第一个结构被链入了


三个链表。取一个来看看:



引用内容



lkd> dt _LDR_DATA_TABLE_ENTRY 0x1a34f8


nt!_LDR_DATA_TABLE_ENTRY






+0x000 InLoadOrderLinks : _LIST_ENTRY [ 0x1a1e9c - 0x1a3450 ]






+0x008 InMemoryOrderLinks : _LIST_ENTRY [ 0x1a1ea4 - 0x1a3458 ]






+0x010 InInitializationOrderLinks : _LIST_ENTRY [ 0x1a1eac -


0x1a3460 ]






+0x018 DllBase











: 0x20000000






+0x01c EntryPoint









: (null)






+0x020 SizeOfImage







: 0x549000






+0x024 FullDllName







: _UNICODE_STRING







+0x02c BaseDllName







: _UNICODE_STRING





......//


省略部分内容



< /p>


随便取一个链表进行遍历,根据


DllBase

< br>找到自己的


DLL


之后,从三个链中

RemoveEntryList


就可以了,这样所有使用


PEB->Ldr


结构来枚举


DLL


链 表的就


无法找到了。



由于大部分


ARK


对隐藏


DLL


的查找并不是很重视


(


比如


RKU, Gmer,XueTr,Atool,NIAP)


,因此该方法就可以

< br>bypass


很多


ARK


了,还 是有


一定市场的


~


但对


IceSword


是个例外




二、从


VAD


树中消失



IceSword


在枚 举进程模块时使用的是


ZwQueryVirtualMemory

,查询的


InfoClass



M emorySectionName(


或者叫


MemoryM appedFilenameInformation



值为< /p>


2)



NtQueryVirtualM emory


首先判断


Vad->ControlArea-> FilePointer



否有效,若有效则调用


ObQueryNameString


查询此文件对象的名

< br>


称,最终由文


件系统完成此次查询工作。



关于


VAD


的详细知识, 可以参考《


JIURL


玩玩


Win2k


内存篇


VAD


》,这里不作为


重点,知道是平衡二叉树就可以了,树的根结点在


EPROCESS< /p>


中。



引用内容



lkd> dt _EPROCESS 83f915b8




nt!_EPROCESS






...






+0x11c VadRoot











: 0x84079c08



该成员是一个

MMVAD


类型的结构,而成员


LeftChild



RightChild


分别是该结


点的左子结点和右子结点。



引用内容



lkd> dt _MMVAD 0x84079c08


nt!_MMVAD






+0x000 StartingVpn







: 0x8e0






+0x004 EndingVpn









: 0x8e0






+0x008 Parent













: (null)






+0x00c LeftChild









: 0x843b1128 _MMVAD //


左孩子







+0x010 RightChild









: 0x840bf4a0 _MMVAD //


右孩子







+0x014 u

















: __unnamed //


标志位







+0x018 ControlArea







: (null)






+0x01c FirstPrototypePte : (null)






+0x020 LastContiguousPte : (null)






+0x024 u2

















: __unnamed





对目标


D LL


实施隐藏时,先获取该


DLL


基址 ,然后遍历


VAD


树,根据


MMVAD ->StartingVpn


做匹配


(StartingVpn


实际上



是内存地址的高


20


位,比如


0x7c800000


在这里将只显示为


0x7c800)


找到目标


DLL



VAD


结构< /p>


(


这里以



为例, 其



加载地址正为


0x7c800000):


引用内容



lkd> dt _MMVAD 84174a18


nt!_MMVAD






+0x000 StartingVpn







: 0x7c800






+0x004 EndingVpn









: 0x7c91b

-


-


-


-


-


-


-


-



本文更新与2021-03-02 20:46,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/692998.html

模块隐藏三种方法的相关文章