NT内核级进程隐藏2-Hook SSDT及EPROCESS(1)

上传人:油条 文档编号:13355083 上传时间:2017-09-04 格式:PDF 页数:8 大小:109.42KB
返回 下载 相关 举报
NT内核级进程隐藏2-Hook SSDT及EPROCESS(1)_第1页
第1页 / 共8页
NT内核级进程隐藏2-Hook SSDT及EPROCESS(1)_第2页
第2页 / 共8页
NT内核级进程隐藏2-Hook SSDT及EPROCESS(1)_第3页
第3页 / 共8页
NT内核级进程隐藏2-Hook SSDT及EPROCESS(1)_第4页
第4页 / 共8页
NT内核级进程隐藏2-Hook SSDT及EPROCESS(1)_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《NT内核级进程隐藏2-Hook SSDT及EPROCESS(1)》由会员分享,可在线阅读,更多相关《NT内核级进程隐藏2-Hook SSDT及EPROCESS(1)(8页珍藏版)》请在金锄头文库上搜索。

1、N T内核级进程隐藏2- Hook S S D T及E P R O C E S S ( 1)学习各种外挂制作技术,马上去百度搜索魔鬼作坊点击第一个站进入、快速成为做挂达人。通过H ook S S D T ( S ys t e m S e r vic e D i s pat h T a ble )隐藏进程1.原理介绍:Wi ndows操作系统是一种分层的架构体系。应用层的程序是通过A P I来访问操作系统。而A P I又是通过nt dll里面的核心A P I来进行系统服务的查询。核心AP I通过对i nt 2e的切换,从用户模式转换到内核模式。2Eh中断的功能是通过N T O S KR N L

2、. E X E的一个函数K i S ys t e m S e r vic e ( )来实现的。在你使用了一个系统调用时,必须首先装载要调用的函数索引号到E A X寄存器中。把指向参数区的指针被保存在E D X寄存器中。中断调用后,E A X寄存器保存了返回的结果。K i S ys t e m S e r vic e ( )是根据E A X的值来决定哪个函数将被调用。而系统在S S D T中维持了一个数组,专门用来索引特定的函数服务地址。在Wi ndows 2000中有一个未公开的由nt os krnl. e xe导出的K e S e r vic e D e s c r i pt or T a

3、bl e变量,我们可以通过它来完成对S S D T的访问与修改。K e S e r vic e D e s c r i pt or T a bl e对应于一个数据结构,定义如下:t ypedef s t r uc t S ys t e m S e r vic e D e s c r i pt or T a bleU I N T *Se r vic e T a ble B a s e ;U I N T *Se r vic e C ounte r T a ble B a s e ;U I N T N um ber O f S e r vic e ;U C H A R *Pa r a m e t e

4、 r T a ble B a s e ; S yst e m S e r vic e D e s c r i pt or T a ble , *PS ys t e m S e r vic e D e s c r i pt or T a ble ;其中S e r vic e T a ble B a s e指向系统服务程序的地址( S S D T ),P a r a m e t e r T a ble B a s e则指向S S P T中的参数地址,它们都包含了N um ber O f S e r vic e这么多个数组单元。在w i ndows 2000s p4中N um ber O f S e

5、 r vic e的数目是248个。我们的任务管理器,是通过用户层的A P I来枚举当前的进程的。R i ng3级枚举的方法:P S AP I E numP r oc e s s e s ( )T oolH e l p32 P r oce s s 32Fi r s t ( )- P r oce s s 32Ne xt ( )来对进程进行枚举。而她们最后都是通过N t Q uer ySyst e m I nf orm a t i on来进行查询的。所以我们只需要Hook掉N t Q uer ySys t e m I nf or m a t i on,把真实N t Q uer ySys t e m

6、I nf or m a t i on返回的数进行添加或者是删改,就能有效的欺骗上层A P I。从而达到隐藏特定进程的目的。2. H ookWi ndows 2000中N t Q uer ySys t e m I nf or m a t i on在S S D T里面的索引号是0x97,所以只需要把S S D T中偏移0x97*4处把原来的一个D WO R D类型的读出来保存一个全局变量中然后再把她重新赋值成一个新的H ook函数的地址,就完成了Hook。O l dFuncA ddre s s = Ke S e r vic e D e s c r i pt or T a ble - S e r v

7、ic e C ounte r T a ble B a s e 0x97;K e S e r vic e D e s c r i pt or T a bl e - S e r vic e C ounte r T a ble B a s e 0x97= N e w F uncAddre s s ;在其他系统中这个号就不一定一样。所以必须找一种通用的办法来得到这个索引号。在U ndocum e nt N t中介绍了一种办法可以解决这个通用问题,从未有效的避免了使用硬编码。在nt os krnl导出的Z w Q uer ySyst e m I nf orm a t i on中包含有索引号的硬编码:kd

8、u Z w Q uer ySyst e m I nf orm a t i on804011aa b897000000m ov e a x, 0x97804011af 8d542404l e a e dx, e s p+0x4804011b3c d2ei nt 2e804011b5c 21000r e t 0x10所以只需要把Z w Q uer ySyst e m I nf orm a t i on入口处的第二个字节取出来就能得到相应的索引号了。例如:I D = *( P UL O N G ) ( ( P UC H A R ) Z w Q uer ySys t e m I nfor m a t

9、i on+1) ;R e a l Z w Q uer ySyst e m I nfor m a t i on=( ( P S e r vic e D e s c r i pt or T a ble E nt r y) K e S e r vi c e D e s c r i pt or T a ble ) - Se r vic e T a ble B a s e I D ) ;( ( P S e r vic e D e s c r i pt or T a ble E nt r y) Ke S e r vic e D e s c r i pt or T a ble ) - S e r vic e

10、 T a ble B a s e I D =H ookZw Q uer ySyst e m I nf orm a t i on;3.对N t Q uer ySys t e m I nf or m a t i on返回的数据进行删改N t Q uer ySys t e m I nf or m a t i on的原型:N t Q uer ySys t e m I nf or m a t i on(I N U L O N G S yst e m I nf orm a t i onCl a s s , / /查询系统服务类型I N P VO I D S yst e m I nf orm a t i o

11、n, / /接收系统信息缓冲区I N U L O N G S yst e m I nf orm a t i onLe ngth, / /接收信息缓冲区大小O U T P UL O N G R e t ur nLe ngth) ; / /实际接收到的大小N t Q uer ySys t e m I nf or m a t i on可以对系统的很多状态进行查询,不仅仅是对进程的查询,通过S ys t e m I nf or m a t i onCl a s s号来区分功能,当S ys t e m I nf or m a t i onCl a s s等于5的时候是在进行进程的查询。此时返回的S ys

12、 t e m I nf or m a t i on是一个_SYS T E M_PR O C E S S E S结构。s t r uc t _SYS T E M_PR O C E S S E SU L O N G N e xt E nt r yDe l t a ; / /下一个进程信息的偏移量,如果为0表示无一个进程信息U L O N G T hr e a dCount; / /线程数量U L O N G R e s e r ved 6 ; / /L A R G E _I N T E G E R C r e a t e T i m e ; / /创建进程的时间L A R G E _I N T E

13、 G E R U s e r T i m e ; / /进程中所有线程在用户模式运行时间的总和L A R G E _I N T E G E R K e r nel T i m e ; / /进程中所有线程在内核模式运行时间的总和U N I C O D E _ST R I N G P r oce s s N a m e ; / /进程的名字K P R I O R I T Y Ba s e P r i or i t y; / /线程的缺省优先级U L O N G P r oce s s I d; / /进程I D号U L O N G I nher i t e dFr om P r oce s s

14、I d; / /继承语柄的进程I D号U L O N G H a ndle C ount; / /进程打开的语柄数量U L O N G R e s e r ved22 ; / /V M_CO U N T E R S Vm C ounte r s ; / /虚拟内存的使用情况统计I O _CO U N T E R S I oCounte r s ; / / I O操作的统计, O nly F or 2000s t r uc t _SYS T E M_TH R E A D S T hre a ds 1 ; / /描述进程中各线程的数组 ;当N e xt E nt r yDe l t a域等于0时表

15、示已经到了进程信息链的末尾。我们要做的仅仅是把要隐藏的进程从链中删除。4.核心实现/ /系统服务表入口地址e xt e r n P S e r vic e D e s c r i pt or T a ble E nt r y Ke S e r vic e D e s c r i pt or T a ble ;N T S T AT U S D r i ver E nt r y( I N P D R I VE R _OB J E C T D r i ver O bj e c t , I N P UN I C O D E _ST R I N GR e gi s t r yPa t h)_as m m

16、 ov e a x, c r 0m ov C R 0VA L U E , e a xa nd e a x, 0f f f e f f f f h / / D i s a bl e Wr i t e P r ot e c tm ov c r 0, e a x/ /取得原来Z w Q uer ySyst e m I nf orm a t i on的入口地址R e a l Z w Q uer ySyst e m I nfor m a t i on=( R E A L Z WQ U E R YS Y S T E MI N F O R M AT I O N ) ( ( ( P S e r vic e D e sc r i pt or T a ble E nt r y) K e S e r vic e D e s c r i pt or T a bl e ) - S e r vic e T a ble B a s e *( P UL O N G ) ( (

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号