首页
社区
课程
招聘
[讨论]现在WIN7 64位系统下重载内核是否稳定可行
发表于: 2016-10-6 17:10 9832

[讨论]现在WIN7 64位系统下重载内核是否稳定可行

2016-10-6 17:10
9832
现在WIN7 64位系统下重载内核是否稳定可行呀,会不会经常蓝屏呢,有大神在弄WIN7 64位系统下重载内核吗?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (19)
雪    币: 12
活跃值: (423)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
能重载是能重载但是不能用....
2016-10-6 19:23
0
雪    币: 522
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
重载只是防INLINE HOOK   
64位不是有PG吗   没实际用途吧
2016-10-7 17:15
0
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
4
人家把ntoskrnl删了看你怎么重载,况且x64不能直接inline hook
不要做这种无意义的工作啦
2016-10-7 18:25
0
雪    币: 333
活跃值: (161)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
不是已经有大神出了教程了吗
虚拟机上重载没问题啊
2016-10-7 19:20
0
雪    币: 125
活跃值: (45)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
x64重载内核用不了,是因为x64PE生成规则的问题,x64PE的32位段内偏移不是绝对地址而是相对地址,这样导致32位段内偏移在x64PE文件中根本不需要添加到重定位表中,所以你无法把重载内核后的全局变量定位到真内核中

x64下在无重载,还是别玩重载了,这项技术严重过期,玩 等于浪费时间
2016-10-8 06:16
0
雪    币: 333
活跃值: (161)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
有个大神的教程已经破了啊
什么PG DSE一键破解
什么hook  inline hook也完全没有问题啊
不知道大家为什么说不行呢  ???还请赐教
不知道怎么发图片 我在虚拟机上就重载了内核
2016-10-8 07:32
0
雪    币: 44
活跃值: (186)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我想呀x64重载内核inline hook不可能不行吧,要不各大杀软,和游戏保护还怎么生存呀,你们说呢?
2016-10-8 16:32
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
  终于有个研究过的人说出了实话。。。
2016-10-10 14:58
0
雪    币: 12
活跃值: (423)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
我前面都说了,能重载是重载,但是不能用 估计楼主不理解吧
2016-10-10 21:59
0
雪    币: 19
活跃值: (88)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
现在已经有人做出来了,并且已经实测。不要局限于别人的想法,自己多动脑筋。
2016-10-13 19:44
0
雪    币: 44
活跃值: (186)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
谢谢楼上提醒,非常感谢~!
2016-10-16 14:45
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
用MDL内存映射把原内核的全局变量映射到新内核里面,是否可行呢?
2020-4-22 18:02
0
雪    币: 1485
活跃值: (1135)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
掌控MSR比其他来的更实在
2020-4-22 18:16
0
雪    币: 1485
活跃值: (1135)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
X64的inline hook你上vt会稳定一些。否则容易爆
2020-4-22 18:20
0
雪    币: 362
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
16
64位程序相对寻址访问全局变量的汇编都是 
opcode ModR/M  disp32 (紧跟着可能还有imm32)的形式 (rip+disp32相对寻址方式)  ModR/M=00xxx101   Mod=00  r/m=101
可以用反汇编引擎找出来
比如
0xfffff80004173cd7 4c 8b 05 42 73 f5 ff           mov r8, qword ptr ds:[0xFFFFF800040CB020]
ModR/M=0x05  r/m=101 表示 rip+disp32 内存相对寻址 r/m=rip+len+disp32
这种相对寻址的指令长度至少有 1 (opcode)+1(ModR/M)+4(disp32)=6 字节
可以放得下一个5字节的e9 jmp 跳到Label的位置  (在下方)

然后把ModR/M 的(r/m)改成0(rax)就变成 寄存器方式寻址 mov r8, qword ptr ds:[rax]
如果rax已经被使用 可以把r/m改成1(rcx)   mov r8, qword ptr ds:[rcx]
然后原来指令后面的四字节disp32去掉 就变成  opcode ModR/M 形式   
 4c 8b 05 42 73 f5 ff(mov r8, qword ptr ds:[0xFFFFF800040CB020]) ->4c 8b 00 (mov r8, qword ptr ds:[rax])
如果另一个参数是rax寄存器则改为: 4c 8b 05 42 73 f5 ff(mov r8, qword ptr ds:[0xFFFFF800040CB020]) ->4c 8b 01 (mov r8, qword ptr ds:[rcx])

前后再加上一段代码就变成

Label:
push rax  //最后的ret指令的返回地址
push rax //保存rax寄存器
mov rax, 0xFFFFF800040CB020 //原来指令需要读取或者写入的内存地址
mov r8, qword ptr ds:[rax]  //相当于执行原来的指令 mov r8, qword ptr ds:[0xFFFFF800040CB020]
mov rax, 0xFFFFF80004173CDE //跳回下一条指令 rip+len的地址
mov qword ptr ss:[rsp+0x08], rax
pop rax//恢复rax的值
ret //跳回 mov r8, qword ptr ds:[0xFFFFF800040CB020]的下一条指令

这样相当于实现了原来指令相同的功能,访问了原来内核的数据 且没有改变原来eflag的值
访问全局变量其他形式类似处理
mov r,[disp32] -> mov r,[r]
mov  [disp32],r-> mov [r],r
mov [disp32],imm32 ->mov [r],imm32

把这个思路搞清楚 64位内核重载就不远了

最后于 2020-4-25 17:18 被gdgdgdg编辑 ,原因:
2020-4-24 22:56
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
gdgdgdg 64位程序相对寻址访问全局变量的汇编都是 opcode ModR/M  disp32的形式 (rip+disp32相对寻址方式)  ModR/M= ...
思路是没错,可是要找到很多空白的间隙地址写入这种寻址方式的汇编,就有点不切实际了
况且不光有mov,还有lea
大小还有byte,word,dword,qword等
所以代码通用性会非常弱
2020-4-25 09:21
0
雪    币: 362
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
18
yy虫子yy 思路是没错,可是要找到很多空白的间隙地址写入这种寻址方式的汇编,就有点不切实际了 况且不光有mov,还有lea 大小还有byte,word,dword,qword等 所以代码通用性会非常弱
ntoskrnl 5m大小  新增的代码大概1m跟在新内核ntoskrnl 后面就行 不需要空隙

lea一样的处理 
48 8d 15 10 b3 21 00           lea rdx, ds:[0xFFFFF80004037260]
改变ModR/M的r/m 为0 ,去除disp32
48 8d 10  lea rdx, ds:[rax] 

只改变ModR/M的r/m不影响读写数据的宽度byte ptr,word ptr ,dword ptr保持不变
byte ptr
88 15 2f 80 27 00              mov byte ptr ds:[0xFFFFF80004098FE2], dl   
改变ModR/M的r/m 为0 ,去除disp32
88 10       mov byte ptr ds:[rax], dl

80 3d fe 60 21 00 00           cmp byte ptr ds:[0xFFFFF80004033665], 0x00     
改变ModR/M的r/m 为0,去除disp32
80 38 00   cmp byte ptr ds:[rax], 0x0

word ptr 
66 3b 0d f3 44 26 00           cmp cx, word ptr ds:[0xFFFFF800040CB008] 
改变ModR/M的r/m 为0 ,去除disp32
66 3b 08        cmp cx, word ptr ds:[rax]

0f b7 3d 5f 9c 02 00           movzx edi, word ptr ds:[0xFFFFF8000434B280] 
改变ModR/M的r/m 为0 ,去除disp32
0f b7 38  movzx edi, word ptr ds:[rax]

dword ptr 
8b 05 f1 da 2a 00              mov eax, dword ptr ds:[0xFFFFF800040CB0B0] 
改变ModR/M的r/m 为1 ,去除disp32
8b 01   mov eax, dword ptr ds:[rcx]
最后于 2020-4-25 17:17 被gdgdgdg编辑 ,原因:
2020-4-25 16:19
0
雪    币: 259
活跃值: (283)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
重载也没用 data段内藏有乾坤 某些回调函数地址就藏在数据段里 取出来执行 主要功能就是检测当前rip是不是在合法范围内 
2020-4-26 10:35
0
雪    币: 362
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
20
ZwCopyAll 重载也没用 data段内藏有乾坤 某些回调函数地址就藏在数据段里 取出来执行 主要功能就是检测当前rip是不是在合法范围内
大部分函数能正常调用就行 
2020-4-26 16:56
0
游客
登录 | 注册 方可回帖
返回
//