首页
社区
课程
招聘
[原创]重载内核 完爆SSDT hook
发表于: 2012-10-6 12:05 42555

[原创]重载内核 完爆SSDT hook

2012-10-6 12:05
42555
收藏
免费 6
支持
分享
最新回复 (49)
雪    币: 51
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
26
谢谢lz分享
2013-3-3 23:58
0
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
27
Reload支持一下
2013-3-4 01:33
0
雪    币: 130
活跃值: (402)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
28
支持一下
...
2013-3-5 08:33
0
雪    币: 29
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
收藏先,抽空学习一下。
2013-3-5 12:36
0
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
30
win7,xp 测试结果

全不通过,bsod:sys问题
2013-3-5 12:39
0
雪    币: 1392
活跃值: (5142)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
31
里面有源码…你可以自己调试编译一下,看看问题在哪里。记得不同的系统要拷贝不同的驱动文件…
2013-3-5 13:58
0
雪    币: 217
活跃值: (41)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
32
什么都不懂,来拜磨大牛
2013-3-6 10:00
0
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
33
调试过后可以用了,加载第二次会蓝屏,原因还没有发现
KernelCopyAddr=ExAllocatePool(PagedPool,SizeOfImage);
        RtlZeroMemory(KernelCopyAddr,SizeOfImage);
        }
        else
        {
                DbgPrint("Current IRQL>DISPATCH_LEVEL in DriverEntry");
        }

        DbgPrint("POOLTYPE=%d",PoolType);

        DbgPrint("分配到的内存为0x%08x",KernelCopyAddr);
        if(KernelCopyAddr==NULL)     //这里不解

       
                DbgPrint("分配内核内存错误");  
为什么不是判断完才调用RtlZeroMemory,KernelCopyAddr为NULL时会bsod吧

另外这样只能过ssdt,建议把一些常用函数重载+自定义(硬编码),这样应该能过Inline,IAT之类
2013-3-7 13:35
0
雪    币: 1392
活跃值: (5142)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
34
对于为NULL好像有相应的处理,如果有问题你自己可以修改,当时是自己好玩做的,对驱动也不太理解,这样其实是重载一个内核,完全不怕SSDT和inline HOOK.
2013-3-7 16:12
0
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
35
mov eax,fs[0x34]
mov eax,[eax] //eax=0
参考了几篇文章说,是init段已释放,所以获取kpcr会返回0
而且好像没什么作用,SSDT,inline都绕不过

我也是个新手,这个源码是个很好的学习例程
2013-3-10 08:36
0
雪    币: 284
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
36
mark.mark.
2013-3-10 09:52
0
雪    币: 1392
活跃值: (5142)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
37
[QUOTE=IDGHOST;1150825]mov eax,fs[0x34]
mov eax,[eax] //eax=0
参考了几篇文章说,是init段已释放,所以获取kpcr会返回0
而且好像没什么作用,SSDT,inline都绕不过

我也是个新手,这个源码是个很好的学习例程[/QUOTE]

我那里好像没有使用INIT标记。
2013-3-10 10:19
0
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
38
KeSetSystemAffinityThread(1);
        __asm
        {
                pushad
                mov eax,DWORD PTR FS:[0x34]
                add eax,0x18
                mov eax,[eax]
                mov eax,[eax]
                mov eax,[eax+0x18]
                mov KernelAddr,eax
                popad
        }
        KeRevertToUserAffinityThread();
这样就正常了,也的确没有发现init标记,估计其他人也在这里bsod,奇怪的是有时蓝有时不蓝

另外请教下,内核可以访问内存整个高地位地址,那么驱动中能用asm可以调用r3的某个内存区?
2013-3-10 13:23
0
雪    币: 1392
活跃值: (5142)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
39
[QUOTE=IDGHOST;1150979]KeSetSystemAffinityThread(1);
        __asm
        {
                pushad
                mov eax,DWORD PTR FS:[0x34]
                add eax,0x18
                mov eax,[eax]
                mov eax,[eax]
                mov eax,[eax+...[/QUOTE]

可以直接访问。访问到的是当前进程的低位的地址里面的数据
2013-3-10 17:22
0
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
40
发现不管irql为多少,均能直接取值,不是说低于DISPATCH_LEVEL只能访问分页吗

觉得在R3下申请一块内存存放内核地址,再通过内核来调用稳定多了,不过物理内存的计算方式弄不清,4M和4K页目录的计算一样吗,初始还天真的以为 物理地址=相对地址+进程eprocess地址
2013-3-10 18:45
0
雪    币: 523
活跃值: (278)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
41
支持一下
... 谢谢,楼主分享
2013-3-17 18:05
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
42
什么情况,在虚拟机中写代码吗?
2013-3-17 19:14
0
雪    币: 1594
活跃值: (113)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
43
mark,有空在看··
2013-7-5 09:41
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
44
1024
2013-9-23 00:42
0
雪    币: 211
活跃值: (118)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
45
通过DeviceIoControl发送自己的IOCODE,参数就用内核函数的参数,自己再驱动中再跳转到ntoskrnl里面,然后返回返回值就可以了, 如果不怕麻烦完全可以实现所有window是内核函数。 由于是自己实现的,基本没有人会去hook这些函数,window函数一个也没有修改,根据检测不到。
2013-9-23 11:15
0
雪    币: 1392
活跃值: (5142)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
46
很久前发的了。可惜是我菜鸡一个,做的不好,有些会蓝。。都不知道什么原因
2013-9-23 11:17
0
雪    币: 371
活跃值: (72)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
47
[QUOTE=IDGHOST;1150979]KeSetSystemAffinityThread(1);
        __asm
        {
                pushad
                mov eax,DWORD PTR FS:[0x34]
                add eax,0x18
                mov eax,[eax]
                mov eax,[eax]
                mov eax,[eax+...[/QUOTE]

只有第一个核的才是正确的,必须调用那个api绑定到第一个核.才不会蓝,原理就是这样.

血泪的教训
2013-9-23 11:31
0
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
48
这个有人提到的,内核中同时只有一条线程在运行。
2013-9-24 14:06
0
雪    币: 211
活跃值: (118)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
49
如果蓝屏,常见的两个原因:指针跳转有问题,或者内存访问非法,
解决办法:开启系统的小内核调试,蓝屏后会自动dump内核,然后用windbg加载dump文件,如果是checked版,可以定位程序哪一行的出的错。
2013-9-28 06:33
0
雪    币: 89
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
50
1024
2018-8-13 23:52
0
游客
登录 | 注册 方可回帖
返回
//