寻找程序真正的入口点——ESP定律.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
寻找程序真正的入口点——ESP定律

寻找真正的入口(OEP)--广义ESP定律 作者:Lenus FROM: /bbs E-MAIL:Lenus_M@163.com 1.前言 在论坛上看到很多朋友,不知道什么是ESP定律,ESP的适用范围是什么,ESP定律的原理是什么,如何使用ESP定律?看到了我在 /dispbbs.asp?boardID=5ID=54page=1 调查结果发现,大家对ESP定律很感兴趣,当然因为实在是太好用了,现在我就来告诉大家什么是ESP定律,它的原理是什么!! BTW:在看完了手动脱壳入门十八篇了以后,再看这篇文章也许会对你更有帮助! 在下面地址下载: /SoftView/SoftView_23125.htm 2.准备知识 在我们开始讨论ESP定律之前,我先给你讲解一下一些简单的汇编知识。 1.call 这个命令是访问子程序的一个汇编基本指令。也许你说,这个我早就知道了!别急请继续看完。 call真正的意义是什么呢?我们可以这样来理解:1.向堆栈中压入下一行程序的地址;2.JMP到call的子程序地址处。例如: . E8 DA240A00 call 004A3508 0040102E . 5A pop edx 在执行后,程序会将0040102E压入堆栈,然后JMP到004A3508地址处! 2.RET 与call对应的就是RET了。对于RET我们可以这样来理解:1.将当前的ESP中指向的地址出栈;2.JMP到这个地址。 这个就完成了一次调用子程序的过程。在这里关键的地方是:如果我们要返回父程序,则当我们在堆栈中进行堆栈的操作的时候,一定要保证在RET这条指令之前,ESP指向的是我们压入栈中的地址。这也就是著名的“堆栈平衡”原理! 3.狭义ESP定律 ESP定律的原理就是“堆栈平衡”原理。 让我们来到程序的入口处看看吧! 1.这个是加了UPX壳的入口时各个寄存器的值! EAXECX 0012FFB0 EDX 7FFE0304 EBX 7FFDF000 ESP 0012FFC4 EBP 0012FFF0 ESI 77F51778 ntdll.77F51778 EDI 77F517E6 ntdll.77F517E6 EIP 0040EC90 note-upx.ModuleEntryPoint C 0 ES 0023 32bit 0(FFFFFFFF) P 1 CS 001B 32bit 0(FFFFFFFF) A 0 SS 0023 32bit 0(FFFFFFFF) Z 0 DS 0023 32bit 0(FFFFFFFF) S 1 FS 0038 32bit 7FFDE000(FFF) T 0 GS 0000 NULL D 0 O 0 LastErr ERROR_MOD_NOT_FOUND (0000007E) 2.这个是UPX壳JMP到OEP后的寄存器的值! EAXECX 0012FFB0 EDX 7FFE0304 EBX 7FFDF000 ESP 0012FFC4 EBP 0012FFF0 ESI 77F51778 ntdll.77F51778 EDI 77F517E6 ntdll.77F517E6 EIP 004010CC note-upx.004010CC C 0 ES 0023 32bit 0(FFFFFFFF) P 1 CS 001B 32bit 0(FFFFFFFF) A 0 SS 0023 32bit 0(FFFFFFFF) Z 1 DS 0023 32bit 0(FFFFFFFF) S 0 FS 0038 32bit 7FFDE000(FFF) T 0 GS 0000 NULL D 0 O 0 LastErr ERROR_MOD_NOT_FOUND (0000007E) 呵呵~是不是除了EIP不同以外,其他都一模一样啊! 为什么会这样呢? 我们来看看UPX的壳的第一行: 0040EC90 n 60 pushad //****注意这里***** 0040EC91 BE 15B04000 mov esi,note-upx.0040B015 PUSHAD就是把所有寄存器压栈!我们在到壳的最后看看: 0040EE0F 61 popad //****注意这里***** 0040EE10 - E9 B722FFFF jmp note-upx.004010CC //JMP到OE

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档