使用OllyDbg从零开始Cracking-39第三十九章-神马是stolen bytes.pdfVIP

使用OllyDbg从零开始Cracking-39第三十九章-神马是stolen bytes.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文档。上传文档
查看更多
第三十九章-神马是stolen bytes 本章与下一章节将介绍stolen bytes(PS: 壳偷代码)以及OD脚本编写方面的内容。 我们拿UnPackMe_PELock1.06来讲解。这 款壳拿来介绍stolen bytes正合适,很多 经典的教程都拿它作为范例来讲解。 用OD加载它,停在了入口点处。 直接按F9键运行起来,会发现该程序会异 常报错弹个错误框出来,直接shift + F9 忽略异常继续运行,弹出主程序对话框,这 里可以通过 日志窗口中最后异常发生处来 定位OEP,大家可以自行尝试,我就不再赘 述了,下面我们换种方法来定位最后一次 异常发生处。 这里我们给Ring3异常分发函数KiUserExc eptionDispatcher设置一个断点,所有的 异常都会经过这一个点,我们在OD中定位 到这个函数。 我们来分析一下这个函数。 最上面的红色箭头标注的是NTDLL.DLL中 的KiUserExceptionDispatcher的起始地 址,紧接着下面有一个CALL,这里是调用SE H链中的异常处理函数,执行完毕以后返回 ,根据返回的结果来决定是否继续执行程 序。 这里我们就没法继续往里面跟了,因为OD 不能跟进RING0,这里我们只能对异常处理 函数下断点或者对触发异常的区段设置内 存访问断点。这样RING0的部分执行完了 以后,OD就断在异常产生处所在区段。 好,现在我们运行起来,第一次异常断了下 来。 我们在 日志窗口中可以看到(在我的机器 上)异常发生在3A5C74处,好,接下来把忽 略异常的调试选项都勾选上,我们给该异 常发生处设置一个断点,接着我们看看堆 栈窗口。 我们可以看到红色箭头标注处,也存放了 异常发生的地址,确切的说是[ESP + 14] 。 因此,这里我们用条件记录断点代替INT 3 断点来记录[ESP + 14]的值,即记录异常 触发的地址,嘿嘿。 这里我们在KiUserExceptionDispatcher 的起始地址处单击鼠标右键选择-Breakpo int Conditional log。 这里我们将Expression设置为[ESP + 14] (异常发生的地址),Pause program设置为 Never,Log value of expression设置为A lways,运行起来。 我们可以看到程序运行起来了,奇怪,这个 壳居然没有检测条件断点,也没有对KiUse rExceptionDispatcher下断进行检测。 好,下面我们来看看 日志窗口中记录的结 果。 我们可以看到记录了很多异常触发的地址 ,我们往下看。 我们可以看到最后一个异常发生在3A6744 处,是非法访问异常,这里我们不能对该处 设置INT 3断点,因为该壳会有检测导致程 序无法运行。 这里我们可以将Memory access violatio n这一项对勾去掉,当产生内存访问异常的 时候就会断下来,虽然这种方法可以奏效, 都是只要是内存访问异常就会断下来,会 断很多次,其实我们还有更快速定位的方 法,这里我们还是将Memory access viola tion这一项勾选上。 我们还是来设置条件断点,我们打开断点 列表,在断点上单击鼠标右键选择-Edit c ondition。 这里根据 日志信息中显示的最后一次异常 发生在3A7644地址处,我们只需添加一个 条件就能让其断在最后一次异常处,我们 设置条件为[ESP + 14] 3A7644,这样 当最后异常触发时就会断下来。 接着将Pause program这一项设置为On co ndition,这样当条件满足时就会断下来, 我们运行起来。 这里,就断到了最后一次异常处,我们没有 必要一个异常一个异常的去定位。 现在如果我们对第一个区段设置内存访问 断点就能定位到OEP (真的是这样吗?嘿嘿, 我们一起来看看) 这里我们可以看到断在了第一个区段中, 正常来说,这里应该就是OEP了呀,但是看 这些代码怎么不像OEP呀,这是怎么回事呢 ?这里就要给大家介绍stolen bytes了。s tolen bytes:即某些壳在处理OEP代码的 时候,会把OEP处固定的代码NOP掉,然后把 这些代码放到壳代码的空间中去(而且常 伴随着花指令)!使原程序的起始代码从壳 空间开始执行,然后再JMP会原程序空间。 如果我们脱掉壳,这一部分代码就会遗失, 也就达到了反脱壳的目的,这就是stol

文档评论(0)

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

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

1亿VIP精品文档

相关文档