首页
社区
课程
招聘
[求助]读隐藏进程中的模块绕过IceSword的检测的疑惑
发表于: 2009-2-22 23:26 6655

[求助]读隐藏进程中的模块绕过IceSword的检测的疑惑

2009-2-22 23:26
6655
读隐藏进程中的模块绕过IceSword的检测http://bbs.pediy.com/showthread.php?t=66886,作者提出来的技术是遍历整个的二叉树,找到在某个进程(比如说notepad.exe)中加载的文件,VAD树中查找的是进程间共享的文件,如ntdll.dll,user32dll等。句柄表中的是私有文件。
我不明白的是,根据inside windows2k第七章内存管理中介绍的,我认为每个VAD结构对应的应当是一个映射的内存区间,就是一个_CONTROL_AREA,对应于一个_CONTROL_AREA就应当有一个_FILE_OBJECT结构,可是我用windbg查看的时候,发现很多时候VAD对应的_CONTROL_AREA是无效的,同样,_CONTROL_AREA对应的_FILE_OBJECT也是无效的。
我想VAD既然是所有进程共享的文件,那么应当肯定对应一个文件吧~~
另外:MmIsAddressValid函数是检查传入的虚拟地址是有效的,指的是虚拟地址有pte,不知可以这样理解吗?
注:大部分VAD的结构是_MMVAD
菜鸟学习中~~

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
faint,还没人回

我想了下,可能是这个样子的:操作系统将4G的空间划分成为不同的内存区间,为了便于快速的查找这些区间,使用一个平衡二叉树VAD(Linux有相同的实现).但是,如果进程只是申请一个内存区间的话,会构建相应的_CONTROL_AREA结构,但是并没有文件映射到该内存区间,因此_FILE_OBJECT是无效的。
也就是说,VAD节点_MMVAD(还有其他的vad类型)不必要对应一个文件对象_FILE_OBJECT.

我想可能是这个样子的,抛砖引玉了算是~~
2009-2-24 11:05
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
3
召唤小伟来告诉你~
2009-2-24 12:12
0
雪    币: 375
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
很惭愧~我不懂。

我当时只是乱搞的。。具体的原理并不清楚。

不过抹掉ntdll之后,每个进程里面都看不到了(在is里面)。

召唤Sysnap来告诉你。
2009-2-24 19:20
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
right here waiting ~
2009-2-24 19:58
0
雪    币: 581
活跃值: (149)
能力值: ( LV12,RANK:600 )
在线值:
发帖
回帖
粉丝
6
看你的文字看了那么久就是理解不了你想问什么..晕..俺的理解能力有问题
还是给几个说明性的文字你自己看看吧
VAD: 是windows用来描述进程地址空间的底2G中哪些已经被保留,哪些还没有..
比如我们一个线程访问0x51000000这个用户态地址..如果这个地址是首次被访问到..那系统会遍历VAD..尝试找个描述这个地址的VAD..然后MM管理器会为0x51000000创建一个页表项,如果找到了VAD...就把VAD中相关的信息填到这个页表项中...如果0x51000000没有对应的VAD描述..说明这个地址还没被保留..产生访问错误..否则就是缺页中断..
我想VAD既然是所有进程共享的文件...你先VAD这句理解有问题吧...首不等于DLL....只是一般情况下那些DLL是可以共享的...
2009-2-24 21:07
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
刚开始的时候,想岔了,以为一个VAD节点必定对应一个文件对象。现在明白了~~
谢谢~~
很深的感觉是Linux和Windows真的在许多方面有许多是一样的~
2009-2-24 21:27
0
雪    币: 375
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
8
vad tree里面还有nls~
2009-2-24 22:48
0
雪    币: 200
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
写了个函数,前序遍历 VAD树,运行时,老是 访问错误,还以为是 自己的程序写错了。。。。
MiIsAddressValid( Control_Area, TRUE ) 这个函数到底检查什么呢?
感觉好像是虚拟内存是否在物理内存中。请赐教!
怎么来标志,一个VAD描述的块 是用来 映射 DLL的,还是只是分配的内存区?
2009-4-21 22:08
0
雪    币: 200
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
一直跟到:
dt _MMVAD 0x81d081d0
nt!_MMVAD
   +0x000 u1               : __unnamed
   +0x004 LeftChild        : (null)
   +0x008 RightChild       : (null)
   +0x00c StartingVpn      : 0x10
   +0x010 EndingVpn        : 0x10
   +0x014 u                : __unnamed
   +0x018 ControlArea      : 0x0a130004 _CONTROL_AREA
   +0x01c FirstPrototypePte : 0xe56c6946 _MMPTE
   +0x020 LastContiguousPte : 0x81d76940 _MMPTE
   +0x024 u2               : __unnamed
kd> dt _CONTROL_AREA 0x0a130004
nt!_CONTROL_AREA
   +0x000 Segment          : ????
   +0x004 DereferenceList  : _LIST_ENTRY
   +0x00c NumberOfSectionReferences : ??
   +0x010 NumberOfPfnReferences : ??
   +0x014 NumberOfMappedViews : ??
   +0x018 NumberOfSystemCacheViews : ??
   +0x01c NumberOfUserReferences : ??
   +0x020 u                : __unnamed
   +0x024 FilePointer      : ????
   +0x028 WaitingForDeletion : ????
   +0x02c ModifiedWriteCount : ??
   +0x02e FlushInProgressCount : ??
   +0x030 WritableUserReferences : ??
   +0x034 QuadwordPad      : ??

全是问号了,呵呵!
2009-4-21 22:11
0
雪    币: 200
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我还有另一个疑问,就是 VAD的跟,也就是 在Eprocess 结构体里得到的vadroot,它的CONTROL_AREA 里的 file_object 的值始终都是 0x40000000 !!!!
很奇怪:第一,这个值,为什么不变。更奇怪的是: file_object  是个文件对象,既然是文件对象,那么,就应该在内核空间,也就是 高2g空间,可是这却是 4000-0000,纳闷。。。
2009-4-21 22:15
0
游客
登录 | 注册 方可回帖
返回
//