首页
社区
课程
招聘
[求助]关于InlineHook成功了,居然和SSDTHook效果不同
发表于: 2014-3-15 02:11 4045

[求助]关于InlineHook成功了,居然和SSDTHook效果不同

2014-3-15 02:11
4045
__declspec(naked)  void FuckNtCreateFile  (
        __out PHANDLE FileHandle,
        __in ACCESS_MASK DesiredAccess,
        __in POBJECT_ATTRIBUTES ObjectAttributes,
        __out PIO_STATUS_BLOCK IoStatusBlock,
        __in_opt PLARGE_INTEGER AllocationSize,
        __in ULONG FileAttributes,
        __in ULONG ShareAccess,
        __in ULONG CreateDisposition,
        __in ULONG CreateOptions,
        __in_bcount_opt(EaLength) PVOID EaBuffer,
        __in ULONG EaLength
        )

{

        if (MmIsAddressValid(ObjectAttributes))
        {
                //KdPrint(("1111111 : %wZ\r\n", &ProtectFileName));
                if (MmIsAddressValid(ObjectAttributes->ObjectName))
                {
                        //KdPrint(("222222 : %wZ\r\n", &ProtectFileName));
                        if (MmIsAddressValid(ObjectAttributes->ObjectName->Buffer))
                        {
                                //KdPrint(("3333333 : %wZ\r\n", &ProtectFileName));
                                KdPrint(("4444 :%ws----- \r\n",ObjectAttributes->ObjectName->Buffer  ));
                                //if ( wcsstr(ObjectAttributes->ObjectName->Buffer,ProtectFileName.Buffer) != NULL)
                                //{
                                //        KdPrint(("执行Hook成功\n"));
                                //}
                        }
                }

        }
       
        __asm
        {
        /*        popfd;
                popad;*/
         
                jmp CreateFileHookZone;
        }
}

这个是InlineHook代码中,那个修改前五个字节jmp来的函数,这里我想输出创建的文件名,发现输出的都是问号,而我用SSDTHook输入的打开文件名, 是没有错误的,求解释,难道这种naked函数需要纯汇编指令????
还是姿势不对啊,如应该先调用原始函数,再进行修改返回值...

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (5)
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
lz可以看看这段代码的纯汇编,再跟ssdt hook对比一下,就知道是哪里的问题了
2014-3-15 09:23
0
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不太清楚inline hook,估计是因为这个
Naked call
编译器不会给这种函数增加初始化和清理代码,不能用return返回返回值,只能用插入汇编返回结果。
求大神解答
2014-3-15 09:30
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
4
这种函数根本不需要naked~~ 调用原函数直接call就好,jmp的处理就麻烦了~
2014-3-15 12:55
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
恩.这个裸函数的话,pushad,pushfd保存环境,如果用参数的话,通过esp+0x24+参数偏移.
2014-3-15 23:58
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
恩,我最后也成功的实现了,不过这样的比较麻烦,
2014-3-16 00:39
0
游客
登录 | 注册 方可回帖
返回
//