首页
社区
课程
招聘
[求助]win7使用调用门
发表于: 2012-9-29 16:48 7523

[求助]win7使用调用门

2012-9-29 16:48
7523
参考了这篇文章得代码:rootkit ring3进ring0之门系列[一] -- 调用门 在xp下很顺利 但是win7下各种问题 困扰了很久
1. 完全按照教程的代码 必蓝屏
Ring0Fun proc
  pushad
  pushfd
  cli
  invoke DbgPrint, $CTA0("mycallgate function executed\n")
  ;add your code here, you can do anything if you like. 
  sti
  popfd
  popad
  retf
Ring0Fun endp


2. 由于ring0时fs为0x30,故修改之
Ring0Fun proc
  pushad
  pushfd
  cli
  push fs
  mov bx, 30h
  mov fs, bx
  invoke DbgPrint, $CTA0("mycallgate function executed\n")
  ;add your code here, you can do anything if you like. 
  pop fs
  sti
  popfd
  popad
  retf
Ring0Fun endp

可惜 当ring0通过retf返回ring3时,fs变成了0,应用程序异常结束。

3. 通过查阅intel手册,发现如下一段话
Checks the contents of the DS, ES, FS, and GS segment registers. If any of these registers refer to segments whose DPL is less than the new CPL (excluding conforming code egments), the segment register is loaded with a null segment selector.

而0x30的DPL是0,new CPL是3,所以fs被改成0了。返回ring3时,fs应该是0x3b,故得出如下代码
Ring0Fun proc
  pushad
  pushfd
  cli
  mov bx, 30h
  mov fs, bx
  invoke DbgPrint, $CTA0("mycallgate function executed\n")
  ;add your code here, you can do anything if you like. 
  mov bx, 3bh
  mov fs, bx
  sti
  popfd
  popad
  retf
Ring0Fun endp

调试时发现fs没有被设置为0x3b,应用程序依旧异常结束。

4. 还有一个很奇怪的地方。根据intel手册,当使用call出现权限改变时,段寄存器ds es fs gs并不会改变,只会将ring0的cs和ss加载。可是刚进入Ring0Fun的时候fs就已经变成0x30,然后fs又无法改变,很不解。求大牛解释。

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

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 122
活跃值: (72)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
坐等加精。!
2012-9-29 21:43
0
雪    币: 2120
活跃值: (73)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
我在坐等牛人出现
2012-9-29 21:50
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
4
callgate的属性有关~
2012-9-29 22:34
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
小白路过不懂
2012-9-30 01:20
0
雪    币: 1484
活跃值: (1135)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
实测WIN7X86需要解决异常处理机制,否则R3程序会崩溃
2018-3-7 15:06
0
雪    币: 1484
活跃值: (1135)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
X64调用门的使用。很久没结案。我放出来了
2020-4-11 21:45
0
雪    币: 3263
活跃值: (3853)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
FS寄存器在0环时为0x30,指向了一个0环的数据段,就是KPCR,在3环时指向了一个3环数据段——TEB,权限切换时,CPU不负责维护FS寄存器,FS寄存器需要程序员自己维护。
2020-4-22 22:02
0
游客
登录 | 注册 方可回帖
返回
//