一般的,SSDT hook会采用直接修改SSDT表的方式来进行,或者采用ETW hook来做,这两种办法都不错。那么我说一种比较水的办法来HOOK,可以针对特定进程进行SSDT hook,其是利用Alt系统来做的。 如果探究过API R3进R0过程的人,肯定会逆向KiSystemCall64函数,不过详细观察该函数,会发现一个奇怪的函数PsAltSystemCallDispatch。该函数会在进程设置某些标志位的情况下调用,并且获得TrapFrame。
通过图片上给出的汇编不难看出,该函数传入的是TrapFrame,我们可以转进去看一下。
会发现里面竟然从PsAltSystemCallHandlers地址处拿指针并执行(_guard_dispatch_icall就是个检查一下指针然后call过去)。
此处这个ida的结构体有问题,我们可以看一下真实结构(_KTHREAD第一个结构是_DISPATCHER_HEADER):这里判断4也就是(Minimal)。继续往后看看。 有指针,果断交叉引用一下快快会不会有什么地方写入,会发现竟然有写指针的函数,和开启该功能的函数。
通过该函数可以发现,PsAltSystemCallHandlers只有2个成员,且通过调用该函数可以直接注册回调函数。
通过图片的分析我们可以看出来,如果设置的index有回调函数了,就会蓝屏,也就是意味着如果设置了就无法覆盖。
好消息是该函数是导出的函数。
所以我们可以直接调用的。 通过分析该函数的传入参数不难看出,其主要是设置了程序执行体和线程执行体上的标志位。
这里可以从结构中看出,主要是设置了AltSyscall开启。但是很遗憾该函数并未导出,但是天无绝人之路,可以直接用NtSetInformationProcess开启。
可以设置ProcessInformationClass的值为0x64来开启,其中发现ProcessInformation的值没用过,只要不是0就可以了。 直接调用这个函数就可以了,第一个参数传入pid,第二个是回调函数。 最重要的事情是:这个东西在win10上可行,win11已经进行了修改。 。
第二重要的是:注册过回调之后无法再次注册,意味着如果对某个进程开启监控时无法停止,也不能卸载驱动,除非进程结束。struct _DISPATCHER_HEADER
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-287965.htm
[原创] 没什么用之——R0下不一样的SSDT Hook
406 浏览
20 回复
逆向爱好者
这个加零是一个函数,加8是八字节的1,函数是系统nto模块里面的。
1.确保系统是win10 且干净
2.加0就是系统自己的函数,这个是系统启动的时候设置的。
3.加8默认是0,如果有东西应该是其他驱动捣的鬼
这个加零是一个函数,加8是八字节的1,函数是系统nto模块里面的。
1.确保系统是win10 且干净
2.加0就是系统自己的函数,这个是系统启动的时候设置的。
3.加8默认是0,如果有东西应该是其他驱动捣的鬼
学习一下
学习一下
学习一下
学习一下
逆向爱好者
可以私?
可以私?
谢谢分享
666学习一下
谢谢分享
谢谢分享
学习了
感谢分享。
moshuiD
看看是不是有什么驱动抢先注册了,第二个默认是0的
这个加零是一个函数,加8是八字节的1,函数是系统nto模块里面的。
看看是不是有什么驱动抢先注册了,第二个默认是0的
这个加零是一个函数,加8是八字节的1,函数是系统nto模块里面的。
逆向爱好者
22h2,这两个值默认都不为零,我修改成功注册后没效果
看看是不是有什么驱动抢先注册了,第二个默认是0的
22h2,这两个值默认都不为零,我修改成功注册后没效果
看看是不是有什么驱动抢先注册了,第二个默认是0的
22h2,这两个值默认都不为零,我修改成功注册后没效果