使用OllyDbg从零开始Cracking-58第五十八章-ExeCryptor v2.2.pdfVIP

使用OllyDbg从零开始Cracking-58第五十八章-ExeCryptor v2.2.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文档。上传文档
查看更多
第五十八章-ExeCryptor v2.2.50.h 好,本章还剩下ExeCryptor的最后三个UnP ackMe,这三个UnPackMe是本系列教程中最 难脱的。我们来尝试对它们进行脱壳,如 果没有脱壳成功的话,至少也会记录下脱 壳思路,供大家学习。 我们双击运行UnPackMe H,可以看到它新 增了如下保护: 我们可以看到入口点保护开启了。也就是 说,入口点可能被隐藏起来了。 好,我们还是跟之前一样对代码段设置bre ak-on-execute断点,运行起来,断到了这 里。 貌似有点不对劲,我们看看之前脱壳过的 版本。 我们可以看到入口点处的代码明显被隐藏 了。 这是之前脱壳版本的截图: 这是现在UnPackMe H的截图: 对比着看,明显有差别。 我们来看看UnPackMe H此时堆栈的情况: 我们再来看看之前脱过壳的版本: 我们可以看到之前脱壳修复后的版本断在 OEP处时,栈顶指针指向的地址是12FFC4 ( 不同的机器这个地址可能会不同)。根据 堆栈平衡的原理,对于大部分壳(PS:有少 数壳可能会玩一些把戏,譬如说:ExeCrypt or,它利用了TLS在入口点之前执行代码, 所以此时的栈顶指针可能与OEP处时的栈 顶指针不一致)来说,用OD加载断在入口点 处时的栈顶指针应该和断在OEP处时的栈 顶指针是保持一致的。 就我们当前这个例子来说,入口点处时栈 顶指针ESP指向的地址是12FFC4。大家在 平时脱壳的时候也要多多留意入口点处的 栈顶指针指向了哪里。 成功脱壳后,OEP处的第一条指令应该是PU SH EBP。 下面我们来执行PUSH EBP这条指令。 我们可以看到EBP的值被压入到堆栈中了: 我们可以看到EBP的值被保存到12FFC0中 了,这是原程序执行的第一条指令。下面 我们来看看UnPackMe H,此时的栈顶指针 指向的地址明显高于12FFC4,也不等于12F FC0。 我们继续观察堆栈: 正常来说,到达OEP处时,栈顶指针指向12F FC4才对,这里我们姑且算它执行了PUSH E BP,那么栈顶指针也应该指向的是12FFC0 才对。 也就是说该UnPackMe模拟执行了PUSH EBP ,并且中间掺杂了大量的垃圾指令。 这里我们对黄色标注出来的区域设置硬件 执行断点或者BP断点。 从这里开始该UnPackMe就没有继续模拟执 行指令了,跟原程序是一样的。我们来看 看断在这里时的堆栈情况: 断在了这里,我们来看下堆栈: 我们可以看到此时12FFC0中已经存放了12 FFF0 (EBP寄存器的初始值),也就说该UnPa ckMe已经成功模拟执行了PUSH EBP指令, 接着12FFBC中存放了FFFFFFFF,相当于模 拟执行了PUSH -1指令。我们知道PUSH EB P与PUSH -1这两条指令之间应该有一条MO V EBP,ESP指令才对。 我们耐心看的话,就会发现4271CD前面的 几条指令都被成功模拟执行了。 我们会发现在剥离了TLS以后,每次断在OE P处时,唯一会变化的就是EBX寄存器的值, 但是无论怎么变,总是在7FFDB000~7FFDF0 00这个范围之内,反观其他寄存器的值都 是固定不变的。 好,我们重启OD,再次断到ADD EBP,-58指 令处。 004271CD 83C4 A8 ADD ESP,-58 我们将当前未脱壳和之前已脱壳的寄存器 组情况进行对比: 已脱壳: 未脱壳: 我们可以看到在UnPackMe模拟执行指令的 过程中连同堆栈以及除ECX,EDX以外的其 他通用寄存器也都模拟了。也就是当已脱 壳和未脱壳的版本处于同一个位置时,我 们要留意EAX,EBX,ESP,EBP,ESI,EDI这几 个寄存器的情况,ECX,EDX的话,我们并不 关心。 好,现在我们回到该UnPackMe模拟执行指 令的起始地址处。 我们可以看到在4271B5~4271CD之间掺杂 了大量的垃圾指令-起到混淆的作用。实 际上它们是要完成5条指令的功能。 我们按F7单步执行RET指令,到了这里。 首先是利用PUSHFD保存EFLAGS (标志寄存 器)的值。 接下来我们对ExeCryptor壳所在区段设置 内存写入断点,看看其在执行的过程中会 不会保存什么值之类的东西,这里ExeCryp tor有好几个区段,大家可以逐一尝试。 设置完内存写入断点以后,我们运行起来, 看看会发生什么。 断在了这里。 这里我们可以看到将EAX的值保存到47AD0 C这个内存单元中,但是此时EAX的值并

文档评论(0)

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

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

1亿VIP精品文档

相关文档