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

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

2012-10-6 12:05
41929
收藏
点赞3
打赏
分享
最新回复 (49)
雪    币: 51
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
西风X 2013-3-3 23:58
26
0
谢谢lz分享
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
AioliaSky 1 2013-3-4 01:33
27
0
Reload支持一下
雪    币: 130
活跃值: (212)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
艾米哈柏 2013-3-5 08:33
28
0
支持一下
...
雪    币: 29
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
iokey 2013-3-5 12:36
29
0
收藏先,抽空学习一下。
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
IDGHOST 2013-3-5 12:39
30
0
win7,xp 测试结果

全不通过,bsod:sys问题
雪    币: 1412
活跃值: (4209)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
IamHuskar 4 2013-3-5 13:58
31
0
里面有源码…你可以自己调试编译一下,看看问题在哪里。记得不同的系统要拷贝不同的驱动文件…
雪    币: 217
活跃值: (41)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
fperfecter 1 2013-3-6 10:00
32
0
什么都不懂,来拜磨大牛
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
IDGHOST 2013-3-7 13:35
33
0
调试过后可以用了,加载第二次会蓝屏,原因还没有发现
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之类
雪    币: 1412
活跃值: (4209)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
IamHuskar 4 2013-3-7 16:12
34
0
对于为NULL好像有相应的处理,如果有问题你自己可以修改,当时是自己好玩做的,对驱动也不太理解,这样其实是重载一个内核,完全不怕SSDT和inline HOOK.
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
IDGHOST 2013-3-10 08:36
35
0
mov eax,fs[0x34]
mov eax,[eax] //eax=0
参考了几篇文章说,是init段已释放,所以获取kpcr会返回0
而且好像没什么作用,SSDT,inline都绕不过

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

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

我那里好像没有使用INIT标记。
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
IDGHOST 2013-3-10 13:23
38
0
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的某个内存区?
雪    币: 1412
活跃值: (4209)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
IamHuskar 4 2013-3-10 17:22
39
0
[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]

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

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

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