使用OllyDbg从零开始Cracking-09第九章-基本概念.pdfVIP

使用OllyDbg从零开始Cracking-09第九章-基本概念.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文档。上传文档
查看更多
第九章-基本概念 本章我们将开始破解。我们先从基本的概 念开始一步步的来介绍破解所需要的步骤 。 本次实验依然是我们熟悉的Cruehead`a的 CrackMe,但是不要把自己局限于破解这个 简单的CrackMe的不同方式-在此过程中, 我们将介绍适用于更加复杂的软件的一些 标准方法。 让我们用调试器开始破解之旅吧。 通过这个CrackMe我们可以掌握一些基本 的概念。 入口点:程序刚刚被加载第一条指令的地 址。为了不和OEP (原始入口点)相混淆,我 们稍后再来介绍OEP的概念。当用OD加载 应用程序后,调试器就会停在入口点处,分 析代码并且等待用户的进一步提示。 对于Cruehead`a的CrackMe这个程序来说, 入口点为401000。通常情况下,状态栏会 显示调试器暂停的原因。现在就提示我们 ,当前是入口点: 大部分(99%)的程序启动的时候都会停在 入口点处。还有一些程序通过一些修改方 式让其在启动的时候不停在入口点处。这 些方法我们将在后面讨论。这些方法就是 我们常说的反调试。 接下来,让我们来了解一下DLL (动态链接 库)的概念以及DLL导出函数的功能。 注意一下突出显示的部分,举个例子,比如 我们要调用401020或者要跳转到421367, 这里会是外部函数的名称替代了这个绝对 地址。 CALL LoadIconA 在最右边的列中显示了一些额外的信息, 调用的是LoadIconA。 Windows操作系统支持的所谓的动态链接 库 (扩展名为DLL文件),它们与正常的可执 行文件EXE具有相同的格式。动态链接库 可导出函数供其他可执行文件 (EXE和DLL) 调用。不是在多个可执行文件中有相同的 静态副本,而是把功能放置在DLL中。如果 一个功能的代码量很大,那么这样就可以 缩减可执行文件的大小,更重要的是可以 节省内存。Windows的基本功能:文件,内 存,进程,线程,图形,声音,网络等都是在 标准的动态链接库中实现的。LoadIconA 是在User32.dll中实现的一个加载位图的 应用程序接口。应用程序接口也称之为AP I。 让我们来看看另一个API MessageBoxA的 例子。 在命令栏中输入: ? MessageBoxA 有个简单的提示,该函数的地址是77D504E A。我们单击鼠标右键选择-Goto-Express ion输入这个地址。 我机器上面提示的地址可能和你机器上面 的地址不一样。 如果你是windows 9x的话,就不能这样做 了,我们后面会讲到。 可以看到该函数属于USER32.DLL,通常在 调试器中显示的函数名称前面会有DLL的 名称 (例如Call USER32.MessageBoxA)。 从当前地址开始到函数返回实现了Messag eBoxA的功能。MessageBoxA便于我们的识 别,但并不是机器码,给破解者提供了一定 的帮助。 想要返回到前一条指令处的话,只需要按 一下减号键。转到MessageBoxA的函数实 现处,也可以直接单击鼠标右键选择Goto- Expression输入MessageBoxA。 这里我们又进入了USER32.DLL的MessageB oxA函数中。该函数名称是区分大小写的( 这里名称是MessageBoxA而不是messagebo xa)。 按减号-回到入口点。 单击鼠标右键:选择Search for-Name(lab el)in current module Ctrl+N菜单项。 获取该CrackMe的API的名称列表。 查找我们关注的API函数的话,不需要一个 个去看,只需要输入API函数的名称即可。 这里我们按M键: 光标定位到第一个函数名称以M开始的API 上。 标题栏显示你正在搜索的字母。 在函数名称上单击鼠标右键弹出的菜单项 有: 选择Follow import in Disassembler选 项,我们就可以转到API函数的实现处。这 也是另一种转到API函数实现代码的方法 。 在这里新手普遍会犯一个错误,现在单击 鼠标右键选择-Search for-Name(label)i n current module。这个时候我们得到的 函数名称是USER32.DLL库中的函数名称, 并不是我们的CrackMe主程序的导入表中 的函数名。菜单项中明确指出是搜索当前 模块,我们现在这种情况,当前模块是USER 32,因此MessageBoxA是位于该模块当中的 。 为了避免这样的错误,要记得

文档评论(0)

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

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

1亿VIP精品文档

相关文档