吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4584|回复: 2
收起左侧

[其他转载] Hook 分发函数后 如何动态卸载

[复制链接]
Robot 发表于 2013-2-22 11:50
IDA,">求高手给个思路 我写了个简单的键盘过滤驱动 Hookl了IRP_MJ_READ 请求 当卸载的时候请问下如何才能卸载 谢谢

下面是主要实现Hook 的代码

PDRIVER_DISPATCH OldDispatchRead;//原IRP_MJ_READ函数的入口地址 全局变量
//在 DriverEntry 里
        PDRIVER_OBJECT KbdDriverObject = NULL;
                UNICODE_STRING KbdName;
                NTSTATUS status;
       
                //init string
                RtlInitUnicodeString(&KbdName,KBD_DRIVER_NAME);
               
                status = ObReferenceObjectByName(
                                                                                        &KbdName,
                                                                                        OBJ_CASE_INSENSITIVE, //不区分大小写
                                                                                        NULL,
                                                                                        0,
                                                                                        *IoDriverObjectType,
                                                                                        KernelMode,
                                                                                        NULL,
                                                                                        &KbdDriverObject
                );
               
                if(!NT_SUCCESS(status)){
                                DbgPrint("cannot get the kbd object/n");
              return STATUS_UNSUCCESSFUL;
                }
                DbgPrint("Hook 开始");
                //保留原分发函数的入口地址
                OldDispatchRead = KbdDriverObject->MajorFunction[IRP_MJ_READ];
                //绑定新的分发函数
                InterlockedExchangePointer(&KbdDriverObject->MajorFunction[IRP_MJ_READ],newDisperseFun);
                //解除引用
                ObDereferenceObject(KbdDriverObject);

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Dazdingo 发表于 2013-11-13 23:49
说错了。。。。是InterlockedExchangePointer(&KbdDriverObject->MajorFunction[IRP_MJ_READ],OldDispatchRead);
Dazdingo 发表于 2013-11-13 23:48
把KbdDriverObject放在DeviceObject.Extension里面,然后卸载的时候把它取出来, InterlockedExchangePointer(newDisperseFun,&KbdDriverObject->MajorFunction[IRP_MJ_READ]),不行么?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-1 01:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表