- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
rootkit 直接访问硬件之[一]
标题:?【原创】rootkit 直接访问硬件之[一]作者:?combojiang时间:?2008-03-27,15:14:03链接:?/showthread.php?t=62020今天我们一起来学习下如何实现ring3程序直接访问硬件。这部分内容跟windows保护模式中的I/O保护部分有直接的关系。rootkit直接访问硬件准备写三篇,今天是开篇。后续请大家继续跟贴。高手飘过,呵呵。我们来看看Windows系统I/O访问保护的方法:80386采用I/O特权级IPOL和I/O许可位图的方法来控制输入/输出,实现输入/输出保护.I/O许可位图位于任务状态段TSS中。I/O特权级IPOL就是EFLAGS寄存器中IOPL位。采用的保护规则是:(1)若CPL=IOPL,则直接转步骤(8);(2)取得I/O位图开始偏移;(3)计算I/O地址对应位所在字节在I/O许可位图内的偏移;(4)计算位偏移以形成屏蔽码值,即计算I/O地址对应位在字节中的第几位;(5)把字节偏移加上位图开始偏移,再加1,所得值与TSS界限比较,若越界,则产生出错码为0的通用保护故障;(6)若不越界,则从位图中读对应字节及下一个字节;(7)把读出的两个字节与屏蔽码进行与运算,若结果不为0表示检查未通过,则产生出错码为0的通用保护故障;(8)进行I/O访问。其中windows中IOPL值是为0,从第一条规则我们可以了解到为什么ring0下可以直接访问I/O了,因为ring0中CPL?=?0?,完全满足第一条。而ring3下CPL?=?3?,第一条不能满足。我们知道每个任务使用各自的EFLAGS值和拥有自己的TSS,所以每个任务可以有不同的IOPL。所以想在ring3下访问I/O,最简单的方法当然是修改当前进程IOPL的值为3了。根据前面了解到IPOL就是EFLAGS寄存器中IOPL位,所以我们尝试下修改eflags寄存器看看。如图:我们写段代码看看:#include?stdio.hint?main(int?argc,?char*?argv[]){??_asm??{????pushfd????pop?eax???????or?eax,0x3000??//设置iopl?=?3????push?eax????popfd????pushfd???//看看修改后的效果????pop?eax??//eflags寄存器的值保存到eax中??}??return?0;}通过上面代码,我们发现不能直接修改eflags中iopl的值。呵呵,继续想办法吧。每个Windows进程都有一个相对应的执行体进程(EPROCESS),EPROCESS不仅包括了进程的许多属性,还包扩了许多指向其他数据结构的指针,其中包含了大量有用的信息.?为了找出思路,我们还是先看看进程eprocess吧。lkd?dt?_eprocessntdll!_EPROCESS???+0x000?Pcb??????????????:?_KPROCESS???+0x06c?ProcessLock??????:?_EX_PUSH_LOCK???+0x070?CreateTime???????:?_LARGE_INTEGER???+0x078?ExitTime?????????:?_LARGE_INTEGER???+0x080?RundownProtect???:?_EX_RUNDOWN_REF???+0x084?UniqueProcessId??:?Ptr32?Void???+0x088?ActiveProcessLinks?:?_LIST_ENTRY???+0x090?QuotaUsage???????:?[3]?Uint4B???+0x09c?QuotaPeak????????:?[3]?Uint4B???+0x0a8?CommitCharge?????:?Uint4B???+0x0ac?PeakVirtualSize??:?Uint4B???+0x0b0?VirtualSize??????:?Uint4B???+0x0b4?SessionProcessLinks?:?_LIST_ENTRY???+0x0bc?DebugPort????????:?Ptr32?Void???+0x0c0?ExceptionPort????:?Ptr32?Void???+0x0c4?ObjectTable??????:?Ptr32?_HANDLE_TABLE???+0x0c8?Token????????????:?_EX_FAST_REF???+0x0cc?WorkingSetLock???:?_FAST_MUTEX???+0x0ec?WorkingSetPage???:?Uint4B???+0x0f0?AddressCreationLock?:?_
原创力文档


文档评论(0)