首页
社区
课程
招聘
[求助]HookNtOpenProces 出现蓝屏
发表于: 2018-9-25 05:50 2965

[求助]HookNtOpenProces 出现蓝屏

2018-9-25 05:50
2965
本人小白刚学习内核几天  HookNtOpenProces 出现蓝屏死机 
xp  系统 贴上代码 环境VS2017

ULONG GetNtSSDT_Old_Addr(IN PCWSTR FunctionName)
{
        UNICODE_STRING Old_NtOpenProcess;
        ULONG old_Addr;
        RtlInitUnicodeString(&Old_NtOpenProcess, FunctionName);
        old_Addr = (ULONG)MmGetSystemRoutineAddress(&Old_NtOpenProcess);
        return old_Addr;
}


ULONG NtOpenProcessOld;
PEPROCESS processEPROCESS = NULL;

NTSTATUS __declspec(naked) __stdcall InLineNtOpenProcess(
        PHANDLE            ProcessHandle,
        ACCESS_MASK        DesiredAccess,
        POBJECT_ATTRIBUTES ObjectAttributes,
        PCLIENT_ID         ClientId
)
{
        HANDLE Pid;
        ANSI_STRING str;

        if (ClientId!=NULL)
        {
                Pid = ClientId->UniqueProcess;
                DbgPrint("调用者的PID为:%d", (int)Pid);
        }

        processEPROCESS = IoGetCurrentProcess();
        RtlInitAnsiString(&str, (PTSTR)(ULONG)processEPROCESS + 0x174);
        DbgPrint("调用者的进程名为:%s", str);
        __asm {
                push    0C4h
                mov eax, NtOpenProcessOld
                add eax, 5
                jmp eax
        }

}



NTSTATUS AnitNtOpenProcess()
{
        NtOpenProcessOld = GetNtSSDT_Old_Addr(L"NtOpenProcess");
        //*(ULONG *)(Jmp + 1) = (ULONG)InLineNtOpenProcess - ((ULONG)NtOpenProcessOld - 5);

        ULONG jmpbyte = (ULONG)InLineNtOpenProcess - NtOpenProcessOld -5;

        DbgPrint("\nInLineNtOpenProcess:%0x", InLineNtOpenProcess);
        DbgPrint("\nNtOpenProcessOld:%0x", NtOpenProcessOld);
        DbgPrint("\njmp:%0x", jmpbyte);



        CloseProtect();//去除内核页面保护
        __asm
        {
                mov ebx, NtOpenProcessOld
                mov byte ptr ds : [ebx], 0xe9
                mov eax, jmpbyte
                mov DWORD ptr ds : [ebx + 1], eax
        }
        StartProtect();//开启内核页面保护
        return 1;
}
//InLine NtOpenProcess 实现函数



贴上HOOK之前的原始字节
805c2512 68c4000000      push    0C4h
805c2517 68b0aa4d80      push    offset nt!ObWatchHandles+0x25c (804daab0)
805c251c e8ff6bf7ff      call    nt!_SEH_prolog (80539120)
805c2521 33f6            xor     esi,esi
805c2523 8975d4          mov     dword ptr [ebp-2Ch],esi
805c2526 33c0            xor     eax,eax
805c2528 8d7dd8          lea     edi,[ebp-28h]
805c252b ab              stos    dword ptr es:[edi]


HOOK后的原始字节
805c2512 e9b9ebeb39      jmp     Hook!InLineNtOpenProcess (ba4810d0)
805c2517 68b0aa4d80      push    offset nt!ObWatchHandles+0x25c (804daab0)
805c251c e8ff6bf7ff      call    nt!_SEH_prolog (80539120)
805c2521 33f6            xor     esi,esi
805c2523 8975d4          mov     dword ptr [ebp-2Ch],esi
805c2526 33c0            xor     eax,eax
805c2528 8d7dd8          lea     edi,[ebp-28h]
805c252b ab              stos    dword ptr es:[edi]

搞了2天实在无能为力,才上来发帖

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
确定VS2017能开发XP的驱动?
2018-9-25 13:48
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
vs2017不是驱动开发最低支持WIN7吗?  还能开发XP的驱动?
2018-9-25 13:55
0
雪    币: 689
活跃值: (422)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
4
调用者进行call NtOpenProcess时候,跳转到InLineNtOpenProcess之前已经push了调用号,jmp eax你又push了调用号,最后的结果就是栈不平衡了。解决方案,1.使用call eax而不是jmp eax。2.去掉naked
最后于 2018-9-25 17:51 被zplusplus编辑 ,原因:
2018-9-25 17:50
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
zplusplus 调用者进行call NtOpenProcess时候,跳转到InLineNtOpenProcess之前已经push了调用号,jmp eax你又push了调用号,最后的 ...
谢谢  可以了!!
2018-9-26 06:49
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
Styone 确定VS2017能开发XP的驱动?
只要使用XP可以支持的函数一样可以用!!!
2018-9-26 06:50
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
编译XP驱动,需要设置什么不?是直接建立工程撸代码就能编译XP的吗?  我看了下设置里面最低支持win7的,所以以为不能支持XP。
2018-9-26 08:20
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
Styone 编译XP驱动,需要设置什么不?是直接建立工程撸代码就能编译XP的吗? 我看了下设置里面最低支持win7的,所以以为不能支持XP。
一样的不需要什么设置 直接撸
2018-9-26 09:08
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
装了个XP试了下,就编译个空的DriverEntry驱动,加载就蓝屏。。
2018-9-26 14:11
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
Styone 装了个XP试了下,就编译个空的DriverEntry驱动,加载就蓝屏。。
新建一个WDM驱动  driver install 选项 第一项设置为 Windows 7   第二项设置为 Desktop
inf2cat  第一项设置  否
c/c++   警告等级设置为 3
我是这样做的
2018-9-26 14:18
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
564673226    加个QQ截图详细看看吧,谢谢了,一直在纠结vs2017不能编译XP
2018-9-26 14:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
Styone 564673226 加个QQ截图详细看看吧,谢谢了,一直在纠结vs2017不能编译XP
你的有答案 加我的把 804244565
2018-9-26 14:32
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
可以了。谢谢
2018-9-26 14:32
0
雪    币: 20
活跃值: (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
我怎么看着楼主写的没错啊,怎么会不平衡呢.: call eax又怎么平衡栈的?
最后于 2018-10-4 17:45 被最爱季节编辑 ,原因:
2018-10-4 15:39
0
游客
登录 | 注册 方可回帖
返回
//