使用OllyDbg从零开始Cracking-12第十二章-消息断点.pdfVIP

使用OllyDbg从零开始Cracking-12第十二章-消息断点.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文档。上传文档
查看更多
第十二章-消息断点 本章将重点介绍Windows消息。 下面的引言简要的描述了Windows消息的 概念: Windows消息被广泛用于各种事件的通知 上面,如果你想操作窗口或者控件 (UI元素 其实也是一种窗口,如:按钮,编辑框,工具 栏,树形控件等)的话,给它发送消息即可 。消息也可以来至于其他应用程序。你也 可以通过消息来实现系统通知,移动鼠标, 按下键盘上的某键等操作。 正如我们前面所讨论的,OD中大部分的API 函数我们可以使用普通CC断点来下断,但 是少数检测CC断点的情况,使用消息断点 会更加有效。消息断点在内核调试器Soft ICE中也称为BMSG。 Windows窗口程序至少有一个消息循环,消 息循环有特定的API函数构成,最常见的是 GetMessage和DispatchMessage函数,有的 消息循环也会用到其他的API函数。想要 深入了解Windows的消息的话,可以参考下 面的链接中的教程”理解消息循环”(该 教程的中文版见附件): /tutorial/message_ loop.html 让我们来看一个简单的例子:用OD加载Cru eHead`s的CrackMe。 首先我们尝试第一种提取序列号的方法, 然后再来尝试消息断点提取序列号的方法 。我们来看看导入到程序的API函数,看看 有没有获取输入文本的函数。 在反汇编窗口中单击鼠标右键选择-Searc h-Name(label) in current module。 获取编辑框中文本我们通常使用的API是G etDlgItemTextA或者GetWindowTextA。当 然,也可以使用Unicode版的API函数GetDl gItemTextW或者GetWindowTextW,再者,也 可以发送消息直接获取编辑框中文本。但 是,不要指望从GetDlgItemTextA或者GetW indowTextA下手获取一些保护强度比较高 的编辑框控件中的文本。但是我们还是先 来看看这种方法吧。 尽管该列表中有GetDlgItemTextA,但是并 不意味着这个函数就是用来读取用户输入 的用户名和序列号的(可能仅仅是获取用 户输入的其他字段的)。有可能作者是故 意添加该函数来误导我们的。还是就是, 该API函数可以通过各种不同的方式来动 态加载,不一定要通过导入表。因此,可能 CrackMe真的使用的是GetDlgItemTextA, 但是我们在导入表中找不到这个函数。为 了不把问题复杂化,我们假设CrackMe就是 使用GetDlgItemTextA来获取编辑框中文 本的。 我们在命令栏中使用BP GetDlgItemTextA 设置断点: 或者 设置了断点以后,运行程序,输入用户名和 序列号: 单击OK,程序断在我们设置的断点处。 注意堆栈。 可以看到该函数有一个参数是缓冲区,编 辑框中的内容会被拷贝至该缓冲区。 所以,我们在数据窗口中定位到该缓冲区, 堆栈窗口中选中该缓冲区参数,单击鼠标 右键选择-Follow in Dump。或者在数据 窗口中单击鼠标右键选择-Goto-Expressi on输入40218E。 现在缓冲区还是空的,因为该函数还没有 被执行。 我们通过选择主菜单项Debug-Execute ti ll return来执行该函数。 现在缓冲区中保存了我们在注册窗口中输 入的用户名。 接着,按F9键运行程序,会再次触发我们的 断点。 现在,缓冲区参数的地址为40217E,我们在 数据窗口中转到这个地址: 我们依然选择主菜单项Debug-Execute ti ll return,执行到返回。 这是我们输入的序列号。 整个过程想必很清楚了吧,为了找到正确 的序列号,在程序获取我们输入数据 (这里 是用户名和序列号)的时候应该让其中断 下来。更进一步的分析我们后面再讨论。 我们现在再通过消息断点来提取序列号。 很多有经验的程序员不使用API函数来获 取编辑框中文本,而是直接通过发送消息 来获取编辑框中的文本。 我们单击工具栏中 【B】按钮删除所有的 普通CC断点。 F9键将程序运行起来,打开注册窗口输入 用户名和序列号,但是不要点确定。 消息断点与普通CC断点的区别在于,普通C C断点在程序启动之前就可以设置,但是对 于消息断点来说,只有在窗口创建之后才 能够设置消息断点以及拦截消息。 单击工具栏中的 【W】按钮打开Windows窗 口(并不会暂停程序,依然显示的是运行) 。 如果 【W】按钮弹出的窗口

文档评论(0)

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

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

1亿VIP精品文档

相关文档