inline hook未导出函数PspTerminateProcess

本文详细介绍了如何在Windows内核中对未导出函数PspTerminateProcess进行inline hook操作,通过内存搜索定位函数地址,修改指令实现跳转,确保函数在hook前后能正确执行,并提供了卸载驱动时恢复原函数的方法。
摘要由CSDN通过智能技术生成
之前inline Hook SSDT中的一些函数学,感觉比较容易,可是想hook一些未导出的函数时,

却发现还有点难,开始是蓝了N次屏,最后HOOK成功了,用一些anti-rootkit的工具却查不出

来,以为没成功.郁闷了好久,最后用windbg看,原来是成功,于是写下这篇文章,很多东西应该讲的不太好,还请矫正

今天就是要inline hook PspTerminateProcess,这是一个没有被导出的函数,这个会了,基本什么函数都会hook,呵呵,先看下它的

定义吧
NTSTATUS
PspTerminateProcess(
    PEPROCESS Process,
    NTSTATUS ExitStatus
    )
由于没有被导出的函数,那只能内存搜索定位了,先用windbg看(本机的情况,后面的图是虚拟机的)
lkd> u PspTerminateProcess
nt!PspTerminateProcess:
805d23a0 8bff            mov     edi,edi
805d23a2 55              push    ebp
805d23a3 8bec            mov     ebp,esp
805d23a5 56              push    esi
805d23a6 64a124010000    mov     eax,dword ptr fs:[00000124h]
805d23ac 8b7508          mov     esi,dword ptr [ebp+8]
805d23af 3b7044          cmp     esi,dword ptr [eax+44h]
805d23b2 7507            jne     nt!PspTerminateProcess+0x1b (805d23bb)

再用dd命令
lkd> dd PspTerminateProcess
805d23a0  8b55ff8b a16456ec 00000124 3b08758b
805d23b0  07754470 00000db8 575aebc0 0248be8d
805d23c0  47f60000 12742001 0174868d 56500000
805d23d0  5d237268 ef50e880 086affff 0709f058
805d23e0  e856006a 00004f78 ff85f88b 75ff1e74
805d23f0  07e8570c 57fffffd 4f62e856 f88b0000
805d2400  ea75ff85 00bc8639 06740000 ff04e856
805d2410  c033fffe c25d5e5f cccc0008 cccccccc

那它的特征码是8b55ff8b a16456ec 00000124 3b08758b,内存搜索吧,找到地址之后我们

就重写其开头的5个字节,也就是修改
mov     edi,edi
push    ebp
mov     ebp,esp
(现在一般的函数学编译之后都是这样子,个别例外)
为一条jmp指令,这条指令将跳到我们自己的函数学里执行,这就是inline hook
好了,搜索地址吧,怎么搜索,当然是用一种通用的方法来定位,在<<学习笔记之钩住驱动程

序导入表>>中修改一下GetDriverBaseAdress这个函数就可以了,,用

ZwQuery
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值