使用OllyDbg从零开始Cracking-23第二十三章-OllyDbg反调试之ProcessHeap,NTGlobalFlag,OutputDebugStringA.pdfVIP

使用OllyDbg从零开始Cracking-23第二十三章-OllyDbg反调试之ProcessHeap,NTGlobalFlag,OutputDebugStringA.pdf

  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文档。上传文档
查看更多
第二十三章-OllyDbg反调试之ProcessHe ap,NTGlobalFlag,OutputDebugStringA 本章是反调试的最后一章,本章将介绍Pro cessHeap和NTGlobalFlag标志位以及如何 通过这两个标志位进行反调试,介绍完这 部分内容我们就掌握了常见的反调试技巧 。反调试的手法还有很多,我们介绍的只 是最基本,最常见的。像一些保护壳,比如 说Execryptor的反调试是比较厉害的,我 们后面再介绍。Execryptor壳除了我们介 绍的这几种反调试以外,还有别的反调试 手法,它的每个新版本都会增加一些新的 反调试选项,这都是后话了,我们先来把常 规的反调试手法介绍完。 HideOD插件中提供绕过这个两个标志检测 的选项,我们来看看。 HideOD插件见附件,上一章也提供了,红圈 标注的就是绕过ProcessHeap和NTGlobalF lag两个标志位的选线,我们首先还是来手 工绕过这个两个标志位的检测吧。 这两个标志置位的话表示当前进程正在被 调试,很容易定位到这两个标志位。不知 道大家还记得不得IsDebuggerPresent对 应的那个调试标志位是如何定位的,如果 你不记得的话,回头去看看第19章,如果你 弄明白如何定位那个标志位的话,那么这 两个标志位也就好定位了,因为这两个标 志位就在那个标志位的附近。 由于勾选上HideNtDebugBit选项,就会绕 过ProcessHeap和NTGlobalFlag的检测,这 里我们不勾选。 这里我们的实验对象是Cruehead’a的Cra ckMe,我们首先来定位这两个标志位。 我们用OD加载该CrackMe,并确保HideOD插 件的配置如上图所示。 好了,我们现在来看看如何手工定位和修 改ProcessHeap和NTGlobalFlag这两个标 志位。 我们先定位到第19章介绍过的IsDebugger Present的那个标志,最简单的做法就是EI P在入口点处时找到EBX寄存器的值,然后 单击鼠标右键选择-Follow in Dump。完 整的定位流程你可以回头看第19章。 我们在数据窗口中定位到该标志位,我机 器上的这个地址可能与你的不同,而且,该 程序每次重新启动该地址也可能不同。 我们知道IsDebuggerPresent是获取该标 志位来检测是否被调试的,NTGlobalFlag 就在它的隔壁,嘿嘿,我们只需要将EBX的 值加上0x68就可以定位NTGlobalFlag标志 位,当前,EBX的值为7FFDA000,加上0x68等 于7FFDA068。 这就是NTGlobalFlag标志位,当前不为零 表示正在被调试,我们来手工将其修改为 零。 这里把该标志修改为零了。 我们可以看到NtGlobalFlag标志清零了。 现在我们来定位另一个标志ProcessHeap, 也很容易定位。 同样是EIP在入口点处时定位到EBX的值, 然后将EBX的值加上0x18,我机器上Proces sHeap的值为0x140000,这是程序刚启动的 时候创建的一块堆内存空间,该内存是用 来保存一些重要的数据的,好了,我们知道 这些就够了。 我们来看看堆中保存了些什么。 我们选中这4个字节,单击鼠标右键选择-F ollow DWORD in Dump就可以在数据窗口 中定位该堆空间了。 偏移0x10的位置的4个字节就是HeapFlags 标志了,当前为零,表示当前没有被调试, 这是加载了HideOD和HideDebugger插件的 原因,我们不加载这两个插件然后打开该C rackMe。 现在该DWORD就不为零,表示当前正在被调 试,但是使用了某些插件的话,即使我们不 设置绕过ProcessHeap的选项,该DWORD也 会变为零。 现在我们勾选上HideOD插件的HideNtDebu gBit的选项。 我们重新启动cruehead’a的CrackMe。 断在入口点处,我们定位到IsDebuggerPre sent以及NtGlobalFlag标志,可以看到都 是零,我们再来看看ProcessHeap标志。 也是零,说明HideOD插件起作用了。至此, 我们就学会了如何手工定位和修改Proces sHeap和NTGlobalFlag标志。 接下来我们看看OutputDebugStringA选项 。 和 这里要提到一点就是: OllyDbg存在一个bug-当被调试程序通过O utputDebugString输出超长的一串调试字 符串的时候,OllyDbg无法处

文档评论(0)

@思念@ + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档