OllyDBG 入门系列(四)-内存断点.docVIP

  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 入门系列(四)-内存断点.doc

OllyDBG?入门系列(四)-内存断点 作者:CCDebuger 还记得上一篇《OllyDBG?入门系列(三)-函数参考》中的内容吗?在那篇文章中我们分析后发现一个?ESI?寄存器值不知是从什么地方产生的,要弄清这个问题必须要找到生成这个?ESI?值的计算部分。今天我们的任务就是使用?OllyDBG?的内存断点功能找到这个地方,搞清楚这个值是如何算出来的。这次分析的目标程序还是上一篇的那个?crackme,附件我就不再上传了,用上篇中的附件就可以了。下面我们开始: 还记得我们上篇中所说的关键代码的地方吗?温习一下: |.?E8?4C010000?????????CALL?JMP.USER32.GetWindowTextA???????????;?GetWindowTextA|.?E8?A5000000?????????CALL?CrackHea.004013D2??????????????????????;?关键,要按F7键跟进去 0040132D?|.?3BC6????????????????CMP?EAX,ESI?????????????????????????????????;?比较 0040132F?|.?75?42???????????????JNZ?SHORT?CrackHea????????????????;?不等则完蛋 我们重新用?OllyDBG?载入目标程序,F9运行来到上面代码所在的地方(你上次设的断点应该没删吧?),我们向上看看能不能找到那个?ESI?寄存器中最近是在哪里赋的值。哈哈,原来就在附近啊: ? 我们现在知道?ESI?寄存器的值是从内存地址?40339C?中送过来的,那内存地址?40339C?中的数据是什么时候产生的呢?大家注意,我这里信息窗口中显示的是?DS:[0040339C]=9FCF87AA,你那可能是?DS:[0040339C]=XXXXXXXX,这里的?XXXXXXXX?表示的是其它的值,就是说与我这里显示的?9FCF87AA?不一样。我们按上图的操作在数据窗口中看一下: ? 从上图我们可以看出内存地址?40339C?处的值已经有了,说明早就算过了。现在怎么办呢?我们考虑一下,看情况程序是把这个值算出来以后写在这个内存地址,那我们要是能让?OllyDBG?在程序开始往这个内存地址写东西的时候中断下来,不就有可能知道目标程序是怎么算出这个值的吗?说干就干,我们在?OllyDBG?的菜单上点?调试-重新开始,或者按?CTR+F2?组合键(还可以点击工具栏上的那个有两个实心左箭头的图标)来重新载入程序。这时会跳出一个“进程仍处于激活状态”的对话框(我们可以在在调试选项的安全标签下把“终止活动进程时警告”这条前面的勾去掉,这样下次就不会出现这个对话框了),问我们是否要终止进程。这里我们选“是”,程序被重新载入,我们停在下面这一句上: /$?6A?00??????????????PUSH?0??????????????????????????????????????;?pModule?=?NULL 现在我们就要来设内存断点了。在?OllyDBG?中一般我们用到的内存断点有内存访问和内存写入断点。内存访问断点就是指程序访问内存中我们指定的内存地址时中断,内存写入断点就是指程序往我们指定的内存地址中写东西时中断。更多关于断点的知识大家可以参考?论坛精华7-基础知识-断点技巧-断点原理?这篇?Lenus?兄弟写的《如何对抗硬件断点之一?---?调试寄存器》文章,也可以看这个帖:/showthread.php?threadid=10829。根据当前我们调试的具体程序的情况,我们选用内存写入断点。还记得前面我叫大家记住的那个?40339C?内存地址吗?现在我们要用上了。我们先在?OllyDBG?的数据窗口中左键点击一下,再右击,会弹出一个如下图所示的菜单。我们选择其中的转到-表达式(也可以左键点击数据窗口后按?CTR+G?组合键)。如下图: ? 现在将会出现这样一个对话框: ? 我们在上面那个编辑框中输入我们想查看内容的内存地址?40339C,然后点确定按钮,数据窗口中显示如下: ? 我们可以看到,40339C?地址开始处的这段内存里面还没有内容。我们现在在?40339C?地址处后面的?HEX?数据或?ASCII?栏中按住左键往后拖放,选择一段。内存断点的特性就是不管你选几个字节,OllyDBG?都会分配?4096?字节的内存区。这里我就选从?40339C?地址处开始的四个字节,主要是为了让大家提前了解一下硬件断点的设法,因为硬件断点最多只能选?4?个字节。选中部分会显示为灰色。选好以后松开鼠标左键,在我们选中的灰

文档评论(0)

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

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

1亿VIP精品文档

相关文档