首页
社区
课程
招聘
[旧帖] [求助]为什么我挂钩了NtLoadDriver之后,我想禁止的驱动还是可以正常加载呢?麻烦帮帮我啊. 0.00雪花
发表于: 2012-7-11 18:34 2468

[旧帖] [求助]为什么我挂钩了NtLoadDriver之后,我想禁止的驱动还是可以正常加载呢?麻烦帮帮我啊. 0.00雪花

2012-7-11 18:34
2468
我想禁止一个驱动程序的加载,可是,我挂钩了NtLoadDriver之后,明明返回失败了,可是,实际上那个驱动还是加载运行了.

NTSTATUS DetourZwLoadDriver
(
        PUNICODE_STRING DriverPath
)
{
        ANSI_STRING AnsiDriverPath;
        ANSI_STRING CmpFile;
        NTSTATUS status;

        RtlInitAnsiString(&CmpFile,"IsDrv");

        status=OriginalZwLoadDriver(DriverPath);

        //成功则打印出所加载的驱动、内核模块,不然,则直接返回
        if (NT_SUCCESS(status))
        {
        RtlUnicodeStringToAnsiString(&AnsiDriverPath,DriverPath,TRUE);
        DbgPrint("The System has loaded a new Driver or system mudule:\n%s\n",AnsiDriverPath.Buffer);

        //当发现制定驱动加载的时候
        if (strstr(AnsiDriverPath.Buffer,CmpFile.Buffer))
        {
                DbgPrint("IceSword正在尝试加载驱动,已经禁止.\n");
                return STATUS_UNSUCCESSFUL;
        }
        else{
                DbgPrint("合法驱动,自动放行...\n");
        return OriginalZwLoadDriver(DriverPath);
        }
        }

        return OriginalZwLoadDriver(DriverPath);
}

  恕我无能,实验了半天也无功而返.

  我的目的是想自己开发一个驱动防火墙而已,这个问题困扰我很久了,尝试了很多方法也不行,哎,麻烦各位提点一下,万分感激!

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 2120
活跃值: (73)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
程序逻辑有问题吧
if(合法驱动)
    return OriginalZwLoadDriver(DriverPath);
return STATUS_UNSUCCESSFUL;
2012-7-11 23:56
0
雪    币: 36
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
上楼,你还,感谢你的回复.
  我觉得我的偶记没有错啊.
   实现,判断函数是否执行成功,成功则判断是否是我所禁止的驱动,是则返回,不是,则返回失败.
   而且,我在调试的时候,也确实返回失败了的,可就是驱动还是成功加载了.
   恕我无能,麻烦再帮我看看.
2012-7-12 08:38
0
雪    币: 36
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
  啊?我换位SSDTHook后居然成功了?
代码基本没有变,就是挂钩方法不一样...
  哪位好心人 麻烦帮我一下吧 感激不尽
2012-7-12 09:29
0
雪    币: 2120
活跃值: (73)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
你调用OriginalZwLoadDriver(DriverPath)就会加载驱动了, 然后返回STATUS_UNSUCCESSFUL就会防止驱动加载?没用过这个函数, 感觉不应该是这样的
2012-7-12 09:49
0
游客
登录 | 注册 方可回帖
返回
//