基于NTLDR的BOOTKIT原理与实现解析.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
本文是基于NTLDR的Bootkit原理及实现的介绍,Bootkit在安全领域被认为是一种高级的 Rootkit形式,对于用户的信息安全而言威胁巨大。本文意在讲述后如何映射内存和HOOK内核,以求更为巧妙的技术出现。   NTLDR是Windows NT系列内核的Osloader,当开机以后BIOS载入MBR,MBR载入DBR,然后DBR载入NTLDR,并将执行权转交给NTLDR,最后再来启 动内核。理论上讲NTLDR是最接近内核的,而且对NTLDR做HOOK,可以避免针对各种外设的编码工作,提高通用性。BOOTKIT具有以下几个特 点:   1.在Ring3下可完成Hook(改写NTLDR);   2.注入内核的代码没有内存大小限制,也无需自己读入代码;   3.BOOTDRIVER驱动初始化时加载(依情况而定,也可hook内核其它地方);   4.理论上可以Hook各种版本ntldr;   5.理论上可以引导各个版本NT内核和内存相关boot.ini参数。   本文适用范围仅限于Win2000 sp4、WinXp sp2、Win2003 sp1,暂时没有对PAE内核,x64和内存相关BOOT.INI参数提供支持。   一、NTLDR的HOOK:   要做NTLDR的BOOTKIT,我们首先面临的问题就是如何对NTLDR做HOOK?要对NTLDR做HOOK,那就首先要对NTLDR的文 件结构有所理解才行。NTLDR是由两部分构成,一部分是被称作Su Module(Startup)的16位汇编代码,另一部分则是名为Osloader的PE文件。Su module位于NTLDR的头部,Osloader紧随其后。DBR将NTLDR加载到物理地址2000:0000开始的地方,然后跳转到这个地址,将 控制权交给NTLDR进行引导,而这个地址也就是Su的入口。Su的主要功能是为Osloader准备内存环境。在Windows 2003中为了避免Su对NTDLR完整性检测,本文将会用没有校验的Su替换了它。   Osloader,它的作用比较复杂,说的简单点就是为内核准备执行环境,然Osloader会根据boot.ini的设置将Windows内 核、hal.dll和其它Boot Driver加载进内存。有关NTLDR更详细的结构和功能,请读者参看有关资料。   了解了NTLDR的大致结构和功能。接着我们来看一下我们HOOK NTLDR所存在的问题?首先就是该在哪下手,理论上你可以在任何一个地方下手,但是接下来你该跳转到哪里呢?执行HOOK CODE之后,才能让CPU有个地方可以去。我选择将CODE放在Osloader里,没错,Su会按SECTION的地址重定位Osloader,这样 我们就可以很轻松地定位我们CODE的地址。我的做法就是直接用工具在Osloader里新建了一个节,将所有HOCK代码都放在了里面。因为我们的根本 目的是要HOOK内核,所以执行代码的时候,内核要已经被加载进了内存。那我们怎么知道在哪内核已经被加载进了内存呢?通常,在将控制权交给内核之 前,Osloader会调用函数BlSetupForNt,这个函数的会最后做些设置的收尾工作,包括剪裁页表。在BlSetupForNt函数里面存在 如下特征码: ????? mov?eax,?cr3    mov?cr3,?eax?(机器码:“0F?20?D8?0F?22?D8”?)   这段代码是用来刷新TLB的,这段代码在内核加载前后被频繁调用的。为了顺利HOOK内核,所以我在CODE里加入保护性代码,通过这段代码几 乎可以在任何完整指令处进行HOOK。你可以下很多HOOK,不过得有一个是在内核加载之后执行的。利用这段特征串可以比较方面的找到HOOK点。   实际过程中“0F 20 D8 0F 22 D8” 串会集中出现在文件头的部分和文件尾的部分,建议只HOOK文件尾的串。这里使用call RVA共5个字节的指令来实现跳转。   小提示:Osloader位置的确定可以直接有哪些信誉好的足球投注网站特征值MZ, PE。   二、内核的加载与定位   当控制权顺着hook代码,我们必须确定内核是否加载。这里我们首先想到的办法就是硬编码内核一个地址,然后测试这个地址是否有效,因为同一个 NTLDR总会将内核加载在同一个地址。但是这样的通用性不高,ring3下面的工作会增加。为了使测试具有较高通用性,我使用了暴力有哪些信誉好的足球投注网站的方法,从可能 的加载地址:VA00为了不致引起page fault,首先必须从PDE有哪些信誉好的足球投注网站起,再确定PTE是否有效,然后测试MZ、PE标志,最后ImageSize的大小要大于0x150000(也就内核这 么大了),这是为了避免其它PE文件影响结果,像Os

文档评论(0)

xiaofei2001128 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档