WQXNETQIQI
驱动大牛
驱动大牛
  • 注册日期2006-06-12
  • 最后登录2010-10-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1076点
  • 贡献值0点
  • 好评度895点
  • 原创分1分
  • 专家分0分
阅读:1661回复:0

[恢复] [原创/探讨]Windows 核心编程研究系列之一(改变进程 PTE)

楼主#
更多 发布于:2007-01-02 21:28
  这是在 2006年12月24日 15:24:38 GMT 检索到的 http://bbs.driverdevelop.com/htm_data/16/0611/119558.html 的 G o o g l e 缓存内容。
G o o g l e 已先预览各网页,拍下网页的快照存档。
这网页可能有更新的版本,请按此查看最新版。
本缓存网页可能引用了已经不存在的图片。单击此处,只查看缓存文本。
请使用网址 http://www.google.com/search?&q=cache:-MfY_LushF8J:bbs.driverdevelop.com/htm_data/16/0611/119558.html+%5B%E5%8E%9F%E5%88%9B/%E6%8E%A2%E8%AE%A8%5DWindows+%E6%A0%B8%E5%BF%83%E7%BC%96%E7%A8%8B%E7%A0%94%E7%A9%B6%E7%B3%BB%E5%88%97%E4%B9%8B%E4%B8%80(%E6%94%B9%E5%8F%98%E8%BF%9B%E7%A8%8B+PTE)&hl=zh-CN&gl=cn&ct=clnk&cd=3 链接此页或将其做成书签。


Google 和网页作者无关,不对网页的内容负责。
这些搜索字词都已标明如下:  原创  探讨  windows  核心  编  程  研究  系列  一  改变  进程  pte  
 
 

--------------------------------------------------------------------------------
  
 
控制面板 | 短消息 | 搜索 | 会员 | 帮助 | 社区 | 首页 | 无图版  
 

   密码忘了...怎么办?邮件收不到....
欢迎使用驱网身份认证服务。
发送 ARCK#UserName#Password 到 93891152 进行身份认证。
认证后可以用手机直接取回密码。


 驱动程序开发网技术社区 -> Kernel Mode discussion and Soft Driver -> [原创/探讨]Windows 核心编程研究系列之一(改变进程 PTE) 转到动态网页  
 

    
--> 本页主题: [原创/探讨]Windows 核心编程研究系列之一(改变进程 PTE) 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题  
okdeepman
 


 
级别: 驱动牛犊
精华: 0
发帖: 7
威望: 8 点
积分: 70 分
贡献值: 0 点
注册时间:2005-10-31
        

[原创/探讨]Windows 核心编程研究系列之一(改变进程 PTE)

首先要说明的是我一般在汇编区活动,但考虑到客观人气问题,所以发到这里,这篇
文章的目的在于想结识一些有同好的朋友一起探讨,完整包括图片的文章可以到我
的blog(hopy.blogchina.com)观赏。另外如有不如何错误请多多指正,不胜感谢。


Windows 核心编程研究系列之一
-改 变 进 程 PTE 属 性-


  这是我研究windows 核心编程的第一篇正式文章,之所以叫核心编程而不叫
内核编程,是我觉得从字面上来看核心(core)比内核(kernel)更靠近windows中心,
当然只是偶本人的看法的拉。
  
  我们知道在 win NT 中,系统把每个进程的虚拟4G空间分为两大部份,低2G
归用户所有,高2G归系统所有。用户不得访问系统的空间,连读都不行,更别说
写了!

  低2G的用户空间也并不是都能写入的。现在我要说一个特殊的区域:在每个
进程虚拟地址 0x7ffe0000 开始的一段空间称为 USER_SHARED 区域,他和虚拟
地址空间0xffdf0000指向同一物理地址空间,这片区域的长度为 0x2d8。所以不
同进程的这一虚拟地址空间被映射到同一个物理地址空间,如果可以写入该区域
就可以实现系统中所有进程共享数据的目的,注意是所有进程!但可惜的是虽然
0x7ffe0000在低2G的空间,归用户所有,但它只能读不能写,写他的后果如图1所示。
        
                    图1

很不爽哦!我前不久在网上看到一篇可以读写物理内存的文章,其实现的思想是:

1 通过系统特权API取得 System Object PhysicalMemory 的写权限;

2 通过分析 MmGetPhysicalAddress 写出其在 ring3 下的伪代码,
从而得到任意虚拟地址映射的实际物理地址

3 写入物理地址

  我用汇编重写后好像不能实现其目的,编译运行原来VC++代码也不成功。但据作者
说他可以运行成功。因为这篇文章写得较早,我怀疑是 windows 在后来的PACK中关
闭了这个通道。但只是猜测,也不排除还有我未考虑到的因素,希望搞成功过的朋友
谈谈具体的过程。
      
  我实现的是另一种方法,其主要思想是:

1 找到该虚拟地址在进程页表中的位置;

2 将对应页表项第2位改为1

  每个进程的页表被映射到其虚拟地址空间的 0xc0000000 – 0xc003fffff 空间中。
经过简单的计算后得到其页表项位置为:0xc0000000 + 0x1FFF80 = 0xC01FFF80 察看
其内容如图2所示,其最低3位决定了它存在,属于用户区域,但是只读不能写入!
          
                        图2

我们下面要做的也非常简单,就是打开其写入标志,使其可写。
就是将 0x25 改为 0x27 。关键代码如下:

mov    ebx,0c01fff80h
   mov    edx,[ebx]
   mov    al,27h
   mov    byte ptr [ebx],al
   mov    eax,cr3
   mov    cr3,eax

通过一个 kernel driver 注入,修改成功。下面就是在ring3中修改 0x7ffe0080
的内容,以下是代码:

mov    ebx,7ffe0080h
   mov    eax,12345678h
   mov    dword ptr [ebx],eax

  执行结果可以用任意ring3调试器来证实,就是在调试任意程序时察看其进程地址
0x7ffe0080都会发现其值被改为 0x12345678。图3是验证情况。
              

                          图3

到这里貌似可以告一段落了,但是还有更值得挖掘的东西,那就是在ring3种直接改写
高2GB的系统内核区域,下面马上将给出的是就是关于改写0x80000000 – 0xffffffff
内核区域的方法,敬请期待。
 
高速无限下载文件,请申请vip会员
 
[楼 主] Posted:2006-11-01 13:59|  
 
 
okdeepman
 


 
级别: 驱动牛犊
精华: 0
发帖: 7
威望: 8 点
积分: 70 分
贡献值: 0 点
注册时间:2005-10-31
        



现在我的2个博客都可以看到:

http://blog.csdn.net/mydo

htto://hopy.blogchina.com

希望感兴趣的各位多多发表高见
 
驱网网上商城-开发板,开发资料光盘
 
[1 楼] Posted:2006-11-01 14:02|  
 
 
Odyssey


 


 
级别: 驱动小牛
精华: 1
发帖: 130
威望: 85 点
积分: 850 分
贡献值: 0 点
注册时间:2004-12-15
        



以前有片俄国人写的文章(codeproject)可以不需要驱动直接从ring3修改内核地址。
方法是用管理员权限打开PhysicalMemory这个虚拟设备然后修改。
 
驱网网上商城-开发板,开发资料光盘
 
[2 楼] Posted:2006-11-01 23:42|  
 
 
wowocock


 

 
 
级别: 驱动老牛
精华: 1
发帖: 4088
威望: 499 点
积分: 4917 分
贡献值: 1 点
注册时间:2002-04-08
        



PhysicalMemory都已经被人用烂了,还在这里讨论??
不过新的OS下已经不支持了,所以还是另想办法,改页表的东西比较麻烦,特别是新的CPU在打开PAE模式后要考虑到各种变换,不过的确很有效.
 
高速无限下载文件,请申请vip会员
 
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠  
[3 楼] Posted:2006-11-02 08:49|  
 
 
wangjianfeng


 


 
级别: 驱动牛犊
精华: 0
发帖: 55
威望: 46 点
积分: 463 分
贡献值: 0 点
注册时间:2004-05-28
        



据说在驱动中,仍然可以打开PhysicalMemory操作,我水平洼,没有试验过.
 
高速无限下载文件,请申请vip会员
 
[4 楼] Posted:2006-11-02 15:22|  
 
 
flyingkisser


 


 
级别: 驱动牛犊
精华: 0
发帖: 18
威望: 18 点
积分: 180 分
贡献值: 0 点
注册时间:2005-04-09
        



最近在xp+sp2下面反汇编了几个内核函数,基本搞清楚了PAE模式下的页管理机制。
变化确实不大也不算小啊。MmGetPhysicalAddress返回的都是64位的东东了。。。还用到了PTE的bit63位即EXB位。
并且AMD64的CPU下面又有点不太一样。。。。
 
高速无限下载文件,请申请vip会员
 
[5 楼] Posted:2006-11-03 00:45|  
 
 
killvxk


 


 
级别: 驱动中牛
精华: 0
发帖: 472
威望: 446 点
积分: 4431 分
贡献值: 0 点
注册时间:2005-10-03
        




QUOTE:
引用第4楼wangjianfeng于2006-11-02 15:22发表的“”:
据说在驱动中,仍然可以打开PhysicalMemory操作,我水平洼,没有试验过.

kernelmode Access还是有的,不过都kernel了,你还用啥phymem?
用phy自己IoMap多爽,还有Hal可以XX
~~
 
驱网网上商城-开发板,开发资料光盘
 
[6 楼] Posted:2006-11-03 07:20|  
 
 
okdeepman
 


 
级别: 驱动牛犊
精华: 0
发帖: 7
威望: 8 点
积分: 70 分
贡献值: 0 点
注册时间:2005-10-31
        



to wowocock

请给个在 ring3 中改写 物理内存写权限并且能成功地例子,谢谢
 
高速无限下载文件,请申请vip会员
 
[7 楼] Posted:2006-11-03 13:00|  
 
 
wowocock


 

 
 
级别: 驱动老牛
精华: 1
发帖: 4088
威望: 499 点
积分: 4917 分
贡献值: 1 点
注册时间:2002-04-08
        



参考WEBCRAZY的N年前的例子,满大街都是
 
高速无限下载文件,请申请vip会员
 
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠  
[8 楼] Posted:2006-11-03 13:27|  
 
 
okdeepman
 


 
级别: 驱动牛犊
精华: 0
发帖: 7
威望: 8 点
积分: 70 分
贡献值: 0 点
注册时间:2005-10-31
        



但我测试好像不能成功运行
 
高速无限下载文件,请申请vip会员
 
[9 楼] Posted:2006-11-04 09:29|  
 
 
Odyssey


 


 
级别: 驱动小牛
精华: 1
发帖: 130
威望: 85 点
积分: 850 分
贡献值: 0 点
注册时间:2004-12-15
        



正好找到那篇文章了:

http://www.codeproject.com/system/soviet_kernel_hack.asp?print=true
 
驱网网上商城-开发板,开发资料光盘
 
[10 楼] Posted:2006-11-04 12:12|  
 
 
okdeepman
 


 
级别: 驱动牛犊
精华: 0
发帖: 7
威望: 8 点
积分: 70 分
贡献值: 0 点
注册时间:2005-10-31
        



谢谢楼上~
但我看得也是这篇,将 访问权限赋予 SECTION_ALL_ACCESS 达到其目的
我没有做成功,楼上成功了么?
 
高速无限下载文件,请申请vip会员
 
[11 楼] Posted:2006-11-04 13:45|  
 
 
killvxk


 


 
级别: 驱动中牛
精华: 0
发帖: 472
威望: 446 点
积分: 4431 分
贡献值: 0 点
注册时间:2005-10-03
        



2003sp1是个大熔炉~~~
 
驱网网上商城-开发板,开发资料光盘
 
[12 楼] Posted:2006-11-04 13:47|  
 
 
killvxk


 


 
级别: 驱动中牛
精华: 0
发帖: 472
威望: 446 点
积分: 4431 分
贡献值: 0 点
注册时间:2005-10-03
        



想开phymem,2003sp1上只能使用那个Alex么
 
驱网网上商城-开发板,开发资料光盘
 
[13 楼] Posted:2006-11-04 14:41|  
 
 

  快速跳至 >> 初学者入门  |- c/c++入门(含vc使用)  |- InnoSetup 中文讨论区  |- Keil C 使用  |- 电子技术基础  |- ABC初学者  |- 驱动及应用程序安装程序制作 >> 安全技术  |- 反流氓、反木马和rootkit  |- 网络安全技术  |- 病毒技术分析 >> 阅读与交流  |- windows 源码解读  |- 书评 >> 各取所需  |- 求职专区  |- 合作开发  |- 供需信息 >> 驱动开发  |- 每周话题  |- vista & x64 驱动程序  |- WDF 学习与研究  |- Kernel Mode discussion and Soft Driver  |- USB驱动开发  |- 非USB硬件驱动开发  |- 图形设备驱动版(打印、扫描、显示...驱动)  |- Mac 驱动开发  |- NDIS网络接口开发  |- LINUX&UNIX核心开发  |- 开发工具使用  |- (IEEE1394)FireWire  |- 文件系统(过滤)驱动程序开发  |- 软件工程在驱动开发中的应用  |- 总结、原创区 >> 硬件开发  |- DSP & PLD &FPGA  |- 硬件设计  |- FirmWare  |- 集成电路设计(IC) >> SNMP网管  |- SNMP网管软件开发 >> 嵌入式系统及掌上设备  |- 嵌入式系统开发  |- Wince 程序开发  |- VxWorks >> 程序人生  |- 疯狂灌水  |- 新闻,要闻,花边  |- IT新闻  |- 情感小屋  |- I love English  |- 程序人生  |- 志宁自语  |- MP3 & FLASH 共享  |- 艺术&帖图区  |- 漂流一族 >> 其它事务  |- 用户留言  |- 软件使用与交流 >> 公司黑白名单  |- 白名单  |- 黑名单 >> 合作网站技术支持论坛  |- 驱动开发网在线商城  |- syser debugger  |- S1系列PCI开发板、FPGA开发板支持  |- PLX PCI 开发板支持  |- DriverStudio 技术支持  

 驱动程序开发网技术社区 -> Kernel Mode discussion and Soft Driver
    

快速发帖 顶端
 
内容:
HTML 代码不可用

使用签名
Wind Code自动转换

[查看帖子长度]  标题:  
表情:        
      

     按 Ctrl+Enter 直接提交    


 


Powered by PHPWind v4.3.2 Code ? 2003-05 PHPWind
This is html template view this page faster

You can contact us
驱动开发者 呵呵
游客

返回顶部