首页
社区
课程
招聘
[原创]重载内核新方法,避免SEH导致的蓝屏(不hook链表)
发表于: 2014-11-3 14:11 11108

[原创]重载内核新方法,避免SEH导致的蓝屏(不hook链表)

2014-11-3 14:11
11108

RT。
虽说重载内核已不是什么新鲜东西,但是看到各位还是在用动态加载的方法来把内核加载进内存里,因为内存池无法加载SEH,所以如果调用函数有抛出异常,会蓝屏。
最近我试验了一个新方法,就是直接把内核文件作为普通驱动加载到系统。
代码粗鄙不堪,我就不放出来了,相信各位看了也会自己写出来。

首先,找到当前系统的内核文件,相信很多朋友都试过直接加载,结果会导致重启,这是因为入口函数的作用,所以我们可以自己写一个空函数体的汇编代码覆盖进去OEP。
再而,修复characteristic为102,还有再修复checksum,这样内核就能加载了,不重启。
然后,用一个驱动修复重定位表,根据重定位表把内核中的全局定位到原内核,并找到driverobject添加卸载函数,就可以正常卸载了,这样一个崭新的内核就出来了,而且不会蓝屏哟!


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

收藏
免费 3
支持
分享
最新回复 (16)
雪    币: 2153
活跃值: (740)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
2
赞一个!
2014-11-3 14:15
0
雪    币: 608
活跃值: (648)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
好猥琐的办法~
借助操作系统的PELoader来做加载,完成其他的一些任务~不错~
2014-11-3 14:25
0
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
32位内核文件 OEP 改
xor eax,eax //返回STATUS_SUCCESS
ret 8
再重新计算文件校验和填充即可
2014-11-3 14:47
0
雪    币: 4
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
没错,就是这样
2014-11-3 14:51
0
雪    币: 608
活跃值: (648)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
不如注册一个ImageLoadNotify,在Notify里修改OEP,指向到你的SYS里,这样就可以在你的SYS里获取到内核文件的DriverObject,设置卸载例程。这样做就可以免去修正CheckSum的问题了
2014-11-3 15:19
0
雪    币: 4
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我直接用ObReferenceObjectByFileName获取,然后卸载,不需要注册
2014-11-3 15:23
0
雪    币: 478
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
原来可以这样啊,这不好简单啊
2014-11-3 16:18
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
9
思路很好,赞一个
2014-11-3 19:24
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
10
好思路~
2014-11-3 20:48
0
雪    币: 8012
活跃值: (3889)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
11
好棒的思路!
2014-11-3 21:12
0
雪    币: 96
活跃值: (64)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
nt和win32k都是这么搞的么,楼Z
2014-12-12 23:45
0
雪    币: 1785
活跃值: (3975)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
因为内存池无法加载SEH,所以如果调用函数有抛出异常,会蓝屏

这个问题我重载内核没遇到过,SEH肯定有用,也会触发,没发现有蓝屏问题

重载个PE文件很简单,重定位,输入表处理下就行了,估计难的是大家都再内核里重载,我是r3重载好了给内核
2014-12-20 20:03
0
雪    币: 12
活跃值: (418)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
么么哒,说好的双头龙呢
2014-12-22 21:36
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
xpsp3下
Kernel base = 0x804d8000 PsLoadedModuleList = 0x8055e720

lkd> u NtReadVirtualMemory
nt!NtReadVirtualMemory:
805b528a 6a1c            push    1Ch
805b528c 68e8ae4d80      push    offset nt!MmClaimParameterAdjustDownTime+0x90 (804daee8)
805b5291 e8ea78f8ff      call    nt!_SEH_prolog (8053cb80)
805b5296 64a124010000    mov     eax,dword ptr fs:[00000124h]
805b529c 8bf8            mov     edi,eax
805b529e 8a8740010000    mov     al,byte ptr [edi+140h]
805b52a4 8845e0          mov     byte ptr [ebp-20h],al
805b52a7 8b7514          mov     esi,dword ptr [ebp+14h]
lkd> u A43FF000+805b528a-804d8000
a44dc28a ??              ???
                                 ^ Memory access error in 'u A43FF000+805b528a-804d8000 '
A43FF000为新加载的驱动基地址
为什么 ?????
2014-12-22 22:59
0
雪    币: 21
活跃值: (193)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
耗掉。。。。。
2015-1-22 19:59
0
雪    币: 441
活跃值: (1020)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
17
2018-1-18 12:41
0
游客
登录 | 注册 方可回帖
返回
//