吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3812|回复: 2
收起左侧

[易语言 转载] 关于隐藏进程DLL的方式(待实现)

[复制链接]
ffashi 发表于 2020-1-14 07:59
本帖最后由 ffashi 于 2020-1-14 08:05 编辑

从VAD树中消失         IceSword        在枚举进程模块时使用的是ZwQueryVirtualMemory,
查询的 InfoClass是MemorySectionName(或者叫        MemoryMappedFilenameInformation,值为2)。
NtQueryVirtualMemory首先判断        Vad->ControlArea->FilePointer是否有效,
若有效则调用ObQueryNameString查询此文件对象的名        称,最终由文件系统完成此次查询工作。       
关于VAD的详细知识,可以参考《JIURL玩玩Win2k内存篇        VAD》,这里不作为重点
,知道是平衡二叉树就可以了,树的根结点在EPROCESS中。       
引用内容         
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                 要        对目标DLL实施隐藏时,先获取该DLL基址,然后遍历VAD树,
根据 MMVAD->StartingVpn做匹配(StartingVpn实际上        是内存地址的高20位,
比如0x7c800000在这里将只显示为0x7c800)找到目标DLL的VAD结构(这里以kernel32.dll为例,其        加载地址正为0x7c800000):       
引用内容         
lkd>        dt        _MMVAD        84174a18               
nt!_MMVAD                                         +0x000        StartingVpn                                                        :        0x7c800                                       
+0x004        EndingVpn                                                                        :        0x7c91b       
+0x008        Parent                                                                                                :        0x841223a0        _MMVAD                                       
+0x00c        LeftChild                                                                        :        0x84120470        _MMVAD                               
+0x010        RightChild                                                                :        0x841a4790        _MMVAD                                       
+0x014        u                                                                                                                                        :        __unnamed                                        
+0x018        ControlArea                                                        :        0x876d0b88        _CONTROL_AREA        //关键域                                        
+0x01c        FirstPrototypePte        :        0xe177d6f0        _MMPTE                               
+0x020        LastContiguousPte        :        0xfffffffc        _MMPTE                                        
+0x024        u2                                                                                                                                :        __unnamed       

lkd>        dt        _CONTROL_AREA        0x876d0b88       
nt!_CONTROL_AREA                                        ...                                        
+0x024        FilePointer                                                        :        0x876d0b10        _FILE_OBJECT外//目标在这里                 
好        了,看到FILE_OBJECT了,这时你应该会想到系统是从这里取到的文件名吧,没错,这儿就是我们要动手脚的地方。
根据小伟、Sysnap等人的测        试,只要把ControlArea->FilePointer->FileName.Buffer填0就可以实现该DLL的隐藏
(根据字符串        的特性,实际上只需要把第一个字符填0就可以了),此时ZwQueryVirtualMemory将返回0xC0000039错误,
即“指定的路径无        效”,自然也就枚举不到了。而且对于那些共享的dll,如系统的ntdll.dll,kernel32.dll或在不同进程中被加载2次或以上的dll,       
虽然是在不同进程中,但是使用的是同一个共享的ControlArea结构,因此只需要改一个,那么在所有进程中都将实现隐藏,
这对于隐藏全局钩子类型的        dll显然是非常方便的。         IS是在ZwQueryVirtualMemory查完全无法枚举到DLL时才采用枚举PEB的方法,
因此结合前面的Ldr断链法,足以搞定N多ARK了。         我所说的“从VAD树中消失”只是使该VAD的信息从IS的查询结果中消失,而并不是真的摘掉该VAD~~       
值得一说的是,Sysnap的Yas        Kit在检测隐藏DLL方面也是比较强的,但是对于动了VAD的,似乎也无能为力~                        

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

jinbojue 发表于 2020-1-14 11:07
内存注入就完事了
 楼主| ffashi 发表于 2020-1-20 15:21
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-18 02:41

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表