首页
社区
课程
招聘
关于 nt 内核物件位置的问题
发表于: 2005-12-6 23:05 7207

关于 nt 内核物件位置的问题

2005-12-6 23:05
7207
请问大侠们,nt 里 (ring 0) 的一些 object ,怎样可以知道它们的实际存放位置在那里 ?  
例如一些视窗 hwnd 的存放位置,一些 process HANDLE 的位置,等等

另外,有没有一些描述它们格式的文件 ? 我找来的资料都很混乱

谢谢

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
2
排个队,等待大侠出现
2005-12-6 23:08
0
雪    币: 2319
活跃值: (565)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
3
最初由 北极星2003 发布
排个队,等待大侠出现

2005-12-6 23:16
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
4
我也在找RING 0级的系统process资料
2005-12-7 08:50
0
雪    币: 2319
活跃值: (565)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
5
最初由 prince 发布
我也在找RING 0级的系统process资料

Prince 兄,很久不见了

近来好吗 ?  

ddk 的东西很乱,很像从零开始学习的时候一样,东看看西看看
2005-12-7 09:34
0
雪    币: 217
活跃值: (99)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
可以翻翻win2000的源码.不过可能更乱:-)
2005-12-7 16:06
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
7
最初由 riijj 发布

Prince 兄,很久不见了

近来好吗 ?

........


好久不见你了,呵呵。我跟你一样,正在啃WDM, 所以你现在的感觉就是我的感觉~  
2005-12-7 17:00
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
8
[转贴] 创建进程分析(未完)

G:\NT\private\ntos\ps\create.c
NtCreateProcess()
PsCreateSystemProcess()
    PspCreateProcess()
          KeGetPreviousMode()
Previous:以前的
NtCreateProcess()和PsCreateSystemProcess()通过调用PspCreateProcess()来完成的。
PspCreateProcess()代码开始有一句PreviousMode = KeGetPreviousMode();
PreviousMode是个局部变量在PspCreateProcess()中经常用到比如ObReferenceObjectByHandle()和ObCreateObject()里面

KeGetPreviousMode() 在G:\NT\private\ntos\ke\i386\i386pcr.asm中定义如下
;++
;
; KPROCESSOR_MODE
; KeGetPreviousMode()
;
; Return Value:
;
;   PreviousMode of current thread.
;
;--
cPublicProc _KeGetPreviousMode
下面的这句是取得当前线程结构的指针
    mov   eax,PCR[PcPrcbData+PbCurrentThread] ; (eax) -> Thread
下面的这句是取得PreviousMode的值
    movzx   eax,byte ptr [eax]+ThPreviousMode   ; (eax) = PreviousMode
    stdRET   _KeGetPreviousMode

stdENDP _KeGetPreviousMode
PCR是什么东东呢?看看wowocock的话语吧:
对于运行在用户模式下,也就是运行在ring3下的程序,fs 段是当前线程的 TEB 所在地址空间。对于运行在内核模式下,也就是运行在ring0下的程序,fs 段是从地址 FFDFF000 开始,大小为 0x2000 的PCR那部分地址空间。

在察看 Windows 2000 内核代码时,你会经常遇到像 MOV EAX, FS:[18h] 这样的指令。这些指令用于取出属于 TEB 或 KPCR 的成员的值,或者是属于其他包含在 FS 段中的结构体的成员的值。它们中的大多数都指向其他的内部结构。
KPCR 是一个非常重要的数据结构,该结构包含很多线程相关的数据项,因此,它位于自己的内存段中,该内存段的地址由 CPU 的 FS 寄存器给出。 Windows NT 4.0 和 Windows 2000 都将 FS 指向处于内核模式的线性地址 0xFFDFF000 。段FS中还包含内核的进程控制块( Kernel's Processor Control Block, KPRCB ), KPCR 结构的 Prcb 成员指向 KPRCB 结构的首地址,紧随其后的是一个 CONTEXT 结构,该结构包含当前线程的底层 CPU 信息。 KPCR 、 KPRCB 和 CONTEXT 结构定义在 ntddk.h 头文件中。
KGDT_R0_PCR 0x0030 内核模式的 FS 寄存器(处理器控制区域)
KGDT_R3_TEB 0x0038 用户模式的 FS 寄存器(线程环境块)

进程地址空间中的可确认的内存区域
起始地址       结束地址     大小 类型 / 描述
0xFFDFF000 0xFFDFF053 54   KPCR/ 处理器控制区(内核模式 FS 段)
0xFFDFF120 0xFFDFF13B 1C   KPRCB/ 处理器控制块
0xFFDFF13C 0xFFDFF407 2CC CONTEXT/ 线程 CONTEXT ( CPU 状态)
在线性地址0xFFDFF120处可找到KPRCB结构,指向该结构的指针存放在KPCR结构(Kernel’s Processor Control Region)的Prcb成员中。KPCR结构的定义可在Ntddk.h中找到,该结构位于线性地址0xFFDFF000处。内核模块通过FS寄存器可以很容易的访问该结构体。从地址:FS:0处读取等价于从线性地址DS:0xFFDFF000处读取。系统将最基本的CPU信息保存在地址 0xFFDFF13C处(紧随KPRCB结构之后)的包含线程和进程状态信息的 CONTEXT 结构中。
由于Windows 2000内核将线性地址0xFFDFF000映射到了CPU的FS的内核模式段的0x00000000,所以系统总是能在地址:FS:0x0、FS:0x120和FS:13C处找到当前的KPCR、KPRCB和CONTEXT结构。

ObCreateObject()说明
ObCreateObject ()函数,该函数为对象表头和对象体分配内存,并初始化常见的对象参数。不过,ObCreateObject()对它创建的对象是什么类型却丝毫不知,因此,调用者必须给定对象体所需内存的确切字节数。因此,找出对象实际大小这一问题就转化为针对此类对象所调用的ObCreateObject()。
2005-12-7 17:24
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
9
想找个工具:能够根据文件名,如果该文件正在被使用的话就输出正在使用该文件的进程。
可惜一直没找到。
2005-12-8 19:29
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
10
最初由 北极星2003 发布
想找个工具:能够根据文件名,如果该文件正在被使用的话就输出正在使用该文件的进程。
可惜一直没找到。


附件:whoslocking.rar

Regards  
2005-12-9 08:56
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
11
收下了  
不过有个问题 ,这个 工具只支持DLL
很多时候是因为其它格式,甚至只有一个空的 文件夹,但始终无法删除!!
感觉上 系统肯定会在某个位置记录相关的使用信息,
但不知道在哪里
2005-12-9 11:15
0
雪    币: 2319
活跃值: (565)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
12
用这个 附件:handle.zip

usage: handle [[-a] [-u] | [-c <handle>] | [-s]] [-p <processname>|<pid>> [name]
-a
Dump information about all types of handles, not just those that refer to files. Other types include ports, Registry keys, synchronization primitives, threads, and processes.
-c
Closes the specified handle (interpreted as a hexadecimal number). You must specify the process by its PID.

WARNING: Closing handles can cause application or system instability.
-s
Print count of each type of handle open.
-u
Show the owning user name when searching for handles.
-p
Instead of examining all the handles in the system, this parameter narrows Handle's scan to those processes that begin with the name process. Thus:

handle -p exp

would dump the open files for all processes that start with "exp", which would include Explorer.
name
This parameter is present so that you can direct Handle to search for references to an object with a particular name. For example, if you wanted to know which process (if any) has "c:\windows\system32" open you could type:

handle windows\system

The name match is case-insensitive and the fragment specified can be anywhere in the paths you are interested in

2005-12-9 11:51
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
13
最初由 北极星2003 发布
收下了
不过有个问题 ,这个 工具只支持DLL
很多时候是因为其它格式,甚至只有一个空的 文件夹,但始终无法删除!!
感觉上 系统肯定会在某个位置记录相关的使用信息,
但不知道在哪里


胡说,也支持EXE,我试过的。
2005-12-9 12:10
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
14
2005-12-9 16:21
0
游客
登录 | 注册 方可回帖
返回
//