使用OllyDbg从零开始Cracking-25第二十五章-异常处理.pdfVIP

使用OllyDbg从零开始Cracking-25第二十五章-异常处理.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文档。上传文档
查看更多
第25章-异常处理 本章,我们将介绍异常处理,这一块通常是 初学者的绊脚石,但是如果研究深入一点 的话,你会发现它并不难。 那么异常是如何产生的呢?当处理器执行 了一个错误的操作的时候,程序中就会产 生异常。好了,我们来看几个异常例子吧, 我们用OD打开cruehead’a 的CrackMe。 可以看到断在了入口点处,我们在第一行 输入会引发异常的指令,这里我们采用Mr Silver写的异常例子中指令。 内存访问异常:当线程中尝试访问没有访 问权限的内存的时候会发生该类异常。例 如:一个线程尝试向只具有读权限的内存 写入数据的时候就会产生内存访问异常。 我们在OD中输入如下指令: 这里我们可以看到401057开始的内存单元 只具有读取和执行权限,并不具有写入权 限。因此如果尝试向该内存单元写入数据 的话就会产生异常,我们按F8键。 程序会根据PE头中的相关信息设置区段的 初始权限,当然也可以使用诸如VirutalPr otect这类API函数在运行时修改权限。 那么在OllyDbg中我们如何查看各个区段 的初始权限呢,还有就是如何修改这些权 限呢? 我们可以通过单击工具栏中的M按钮来查 看各个区段的情况。 我们可以看到主模块的所在的区段开始于 400000,首先是PE头,占1000个字节,PE头 中保存了各个区段的名称,长度以及程序 运行所必须的一些信息。 我们在数据窗口中定位到PE头。 由于PE头开始于400000,所以我们输入400 000。 其实OllyDbg中有一个可以解析PE头的各 个字段的选项,我们可以在数据窗口中单 击鼠标右键。 我们可以看到显示出了DOS头的各个字段 信息。 如果我们继续往下看,我们首先会看到Off set to PE signature,这是告诉我们PE头 的偏移量,我们可以看到偏移量为100。那 么起始地址400000加上100就是400100,我 们定位到400100处。 这里你所看到的,这里是关于程序的重要 信息。 下面让我们来看看部分字节详细的解释。 也就是说基地址400000加上1000就是程序 的入口点。如果你想修改入口点的话,例 如把入口点修改为2000,我们可以在入口 点这一行上单击鼠标右键。 这里我们可以输入任意数值,例如:如果你 想让程序从402000处开始执行,我们可以 输入2000。这个2000是相对于映像基址40 0000的偏移量。 修改完毕以后,我们可以单击鼠标右键选 择-Copy to executable file,然后在弹 出的窗口中单击鼠标右键选择-Save file ,这样就可以保存到文件了,我们并不修改 入口点,只要知道可以这么做就行了。 好了,我们继续往下看。 下面各个区段的信息,首先我们看到的这 个区段起始虚拟地址为1000,注意这里是 偏移量,实际上内存地址为401000,并且Ch aracteristics(特征)为CODE,EXECUTE,RE AD (代码段,可执行,可读)。 如果我们想让该区段具有可写权限的话, 我们可以将Characteristics这个字段的6 0000020修改为E0000020,这样该区段就具 有了所有权限,嘿嘿,我们来验证一下。 好了,我们现在来将修改保存到文件。 我们将名称修改为CRACKME 3,标识这个文 件是修改版。 好了,我们现在用OllyDbg打开这个CRACKM E3.EXE。 现在我们将数据窗口显示模式切换为正常 模式。 我们按F8键单步,会发生并没有产生异常, EAX的值被成功写入了401057内存单元中 了。 下面介绍另外一种异常: 除0异常:试图除以0时会产生该异常。 例如,我们在OllyDbg中输入如下指令: (PS:原作者这个地方讲错了,他是直接DI V ECX,ECX这个时候并不为零,EAX为零,E DX指向了7C92E514,所以按照作者的做法 ,只会产生整数溢出异常,并不会产生除0 异常。) 寄存器的如下: 好了,我们F8单步一次。 寄存器的情况如下: 这里时候除数ECX为0了。我们继续F8单步 。 我们可以看到提示Integer division by zero (整数除0)异常。 无效指令,尝试执行特权指令异常: 当CPU试图执行越权指令的话就会产生该 异常。 由于OllyDbg不允许我们输入CPU不可识别 的指令,所以我们无法验证。但是程序员 可以自己设计一些处理器并不支持的指令 ,当执行到指令时显示相应的错误即可。

文档评论(0)

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

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

1亿VIP精品文档

相关文档