使用OllyDbg从零开始Cracking-38第三十八章-手脱Yodas Protector v1.pdfVIP

使用OllyDbg从零开始Cracking-38第三十八章-手脱Yodas Protector v1.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文档。上传文档
查看更多
第三十八章-手脱Yodas Protector v1 .3 (Yodas Crypter) 上一章节给大家介绍了IAT重定向以及修 复方法。本章我们稍微增加一点难度。 我们一起来脱Yoda Crypter v1.3,首先大 家配置好OD的反反调试插件,加载它。 断在了入口点处。 我们可以看到这里有个PUSHAD指令,嘿嘿, 我们可以使用ESP定律来定位OEP,我们单 步到PUSHAD指令处,按F7键单步执行PUSHA D指令。 然后在ESP寄存器的值上面单击鼠标右键 选择-Follow in Dump,这样就能在数据窗 口中定位到刚刚保存的寄存器环境了,我 们选中前4个字节,单击鼠标右键选择-Bre akpoint-Hardware,on access-Dword,对 其设置硬件访问断点。 运行起来。 断在了这里,我们可以看到这里将给SEH链 添加一个新的节点,接着通过JMP指令跳转 到下面引发一个异常,我们跟到JMP指令处 。 这里将跳往下面,将产生异常。我们来看 看异常处理程序在哪里。 选择主菜单项中的View-SEH chain。 我们可以看到刚刚安装的异常处理程序入 口地址为46590B,不出意外的话到达该异 常处理程序,随后就会到达OEP,我们给第 一个区段设置内存访问断点,触发异常后, 随即我们就会到达OEP处。 直接运行起来。 断在了OEP处,这里OEP为4271B0,大家应该 很熟悉了吧,我们加壳的目标程序都是同 一个CrackMe,嘿嘿。 如果要深究的话,大家会发现异常处理函 数中Context结构的EIP寄存器的值由4659 82修改为了4271B0,即OEP,关于CONTEXT结 构体的详细介绍我们后面章节再说。 好,现在我们到了OEP处,可以dump了。 这里我们不勾选Rebuild Import选项。 这里我们将其重命名为yodadump.exe,我 们会发现程序无法正常运行。我们需要修 复IAT。 下面我们来分析一下IAT,随便找一个API 函数的调用处,这里我们还是跟之前一样 拿CALL GetVersion开刀,嘿嘿。 我们定位到4271D6处CALL DWORD PTR DS: [460ADC]指令,460ADC是IAT中的一项,我 们在数据窗口中定位到这个地址。 这部分IAT项看起来像是正常的,我们打开 区段列表窗口,看看这部分IAT项属于哪个 系统DLL,这里我们可以看到这部分IAT项 命中在Kernel32.dll的代码段,即这部分I AT项是正确的。 再随便选一项单击鼠标右键选择-Find re ferences(查看一下参考引用),这里我选 择460B34这一项。 继续往下: 这里我们可以看到粉红色标注出来的区域 ,我们在区段列表窗口中看看这部分属于 哪个区段。 我们可以看到不属于系统DLL,该区段应该 是由壳创建的,我们重启OD,来验证一下。 我们可以看到此时起始地址为150000的区 段,长度为3000字节,但是壳执行以后,该 区段变成了29000字节,即可壳将该区段增 大了,并且增大的部分供自己使用。 该区段是用于重定向IAT的部分元素的,我 们具体来分析一下。 随便找一个举例,这里我们将拿460BAC这 一项来说,我们来看看其参考引用,选中该 项,单击鼠标右键选择-Find references 。 这里我们可以看到有两处参考引用,我们 直接在第一条记录上面双击,定位到了这 里。 定位到这个CALL处,我们在其上面单击鼠 标右键选择-Follow,看看被重定向到了哪 里。 我们可以看到重定向到这里,并没有过多 的弯弯绕就直接JMP去调用SysStringLen 这个API函数了,这样我们就知道其真正要 调用的API函数了。 这个重定向比较简单,我们打开IMP REC, 看看能不能用IMP REC 自带的Trace功能进 行修复,不过修复不成功,我们再来手动分 析。 打开IMP REC。 定位到unpackme_yoda’s crypter1.3所 在进程,当前其断在了OEP处,填写上OEP,I AT起始地址的RVA,IAT长度。 OEP 4271B0 - 映像基址400000 271B 0 (RVA)。 我们现在来定位IAT的起始位置,往上拉。 这一部分是重定向到起始地址为150000的 区段的,我们继续往上。 这里我们可以看到460810这一项为800000 08,明显不是IAT项,继续往上的一部分是 以6XXXX的形式,我

文档评论(0)

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

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

1亿VIP精品文档

相关文档