使用OllyDbg从零开始Cracking-15第十五章-硬编码序列号寻踪-Part3.pdfVIP

使用OllyDbg从零开始Cracking-15第十五章-硬编码序列号寻踪-Part3.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文档。上传文档
查看更多
第十五章-硬编码序列号寻踪-Part3 我们来接着完成上一章留下那个硬编码Cr ackMe的作业,名字叫”Splish”。 用OD加载它。 OD加载后停在了入口点处。 我们通过在反汇编窗口中点击鼠标右键选 择-Search for-Name(label)in current module查看API函数列表。 我们可以看到当前模块使用了哪些API函 数。 我们可以看到使用了GetWindowTextA来获 取序列号,MessageBoxA来提示序列号正确 或者错误。我们可以给这两个API设置断 点,这里我们先来看看该程序的字符串列 表。 单击鼠标右键选择-Search for-All refe renced text strings。 这里我们可以看到提示输入了正确硬编码 序列号的字符串-”Gongratulations, yo u got the hard coded serial”。我们 在这个字符串上面双击鼠标左键,就可以 来到引用了该字符串的代码处。 我们可以看到来到了验证序列号的代码块 了。 可以看到使用GetWindowTextA获取用户输 入的序列号,然后使用MessageBoxA来提示 用户输入的序列号正确与否。我们在获取 用户输入的序列号GetWindowTextA的调用 处设置一个断点。 按F9键运行CrackMe。 为了找到上面的硬编码序列号,我们随便 输入一个错误的序列号,然后单击Check H ardcoded按钮。 我们可以看到断在了之前设置的断点处。 我们先来看看堆栈中的情况,Buffer参数 指向403215地址开始的内存单元,用于保 存用户输入的序列号。 我们在数据窗口中定位到该缓冲区 该缓冲区会保存用户输入的序列号。我们 按F8键单步执行该API函数。 由于单击F8键,该API函数得以执行,所以 序列号保存到了该缓冲区中。 下一条指令会将401353保存到EAX中(记住 ,LEA指令并不是移动指定地址内存单元中 的内容,而是移动方括号中的值,这里是40 1353)。我们通过在该指令上面单击鼠标 右键选择-Follow in Dump-Memory addre ss来在数据窗口中定位到401353这个地址 。 401353指向字符串”HardCoded”,按F7键 单步执行LEA指令。 解释窗口中也提示401353这个地址指向字 符串”HardCoded”,执行LEA指令后,EAX 保存了401353这个地址。 接下来的LEA指令,EBX会保存403215这个 地址。 按F7键单步,EBX保存403215。 OD中显示,403215这个地址指向字符串”9 8989898”,也就是我们之前输入的错误序 列号,我们像之前一样在数据窗口中转到4 03215这个地址。 可以看到403215指向的内存单元中保存了 我们输入的错误序列号。 下一条指令检查EAX 401353这个地址指向 内存单元的第一个字节是否为零。 我们可以在数据窗口中转到401353这个地 址,可以看到保存了字符串”HardCoded” 。 这里第一个字节是48,解释窗口中提示该A SCII码对应的字符是’H’,是”HardCode d”字符串的第一个字节,不为零。 由于’H’不等于零,所以零标志位置0,JE 不会跳转 (记住,JE指令当零标志位Z置1的 时候跳转)。 继续单击F7键单步。 可以清楚的看到该指令将EAX指向内存单 元 (即字符串”HardCoded”)的第一个字 节,这里是48,保存到CL寄存器中,接下来 一条指令将EBX指向的内存单元 (即我们输 入的错误序列号)的第一个字节保存到DL 寄存器中。接着比较这两个字节是否相等 ,如果不相等,就跳转到4013D2地址处,弹 出消息框提示”Sorry, please try agai n.”。 下图中验证了这一点。 按F7键,CL寄存器的值为48。 接下来一行DL寄存器保存我们输入的错误 序列号的第一个字节。 按下F7键,可以看到DL的值为39。 现在比较CL和DL的值。 OD解释窗口中,字符’9’对应的ASCII码 值为39,即我们输入的错误序列号的第一 个字符与字符’H’对应的ASCII码值为48 ,即硬编码序列号”HardCoded”的第一个 字符,进行比较。 可以看到由于它们不相等,JNZ指令就会跳 转到提示错误信息的代码处。如果它们相 等的话,跳转将不会发生,我们可以通过双 击零标志位Z来修改其值,让跳转不发生。 现在零标志位Z置1了,表示比较的两个字

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档