论坛首页 逆向工程技术区 阅读主题

[原创] 没什么用之——R0下不一样的SSDT Hook

406 浏览 20 回复
#1 楼主 2026-06-01 21:08:56
一般的,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
#2 2026-06-01 21:08:56
逆向爱好者


这个加零是一个函数,加8是八字节的1,函数是系统nto模块里面的。

1.确保系统是win10 且干净
2.加0就是系统自己的函数,这个是系统启动的时候设置的。
3.加8默认是0,如果有东西应该是其他驱动捣的鬼
#3 2026-06-01 21:08:56
学习一下
#4 2026-06-01 21:08:56
学习一下
#5 2026-06-01 21:08:56
学习一下
#6 2026-06-01 21:08:56
学习一下
#7 2026-06-01 21:08:56
逆向爱好者


可以私?
#8 2026-06-01 21:08:56
谢谢分享
#9 2026-06-01 21:08:56
666学习一下
#10 2026-06-01 21:08:56
谢谢分享
#11 2026-06-01 21:08:56
谢谢分享
#12 2026-06-01 21:08:56
学习了
#13 2026-06-01 21:08:56
感谢分享。
#14 2026-06-01 21:08:56
moshuiD


看看是不是有什么驱动抢先注册了,第二个默认是0的

这个加零是一个函数,加8是八字节的1,函数是系统nto模块里面的。
#15 2026-06-01 21:08:56
逆向爱好者


22h2,这两个值默认都不为零,我修改成功注册后没效果

看看是不是有什么驱动抢先注册了,第二个默认是0的
#16 2026-06-01 21:08:56
22h2,这两个值默认都不为零,我修改成功注册后没效果
‹ 上一页 1 2 下一页 ›

请登录后参与讨论

立即登录 注册账号