使用OllyDbg从零开始Cracking-30第三十章-P-CODE-Part2.pdfVIP

使用OllyDbg从零开始Cracking-30第三十章-P-CODE-Part2.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文档。上传文档
查看更多
第三十章-P-CODE-Part2 (本章CrackMe支持库MSVBVM50.DLL) 本章我们继续讨论P-CODE。 以下是我从JBDUC的教程里收集的一些操 作码: 6c → ILdRf 将指定操作数压入堆栈 1b → LitStr5 将字符串压入堆栈 fb → Lead0 30 → EqStr 比较两个字符串(与Lead0配 合使用) 2f → FFree1Str 释放内存空间 1a → FFree1Ad 释放内存空间 0f → VCallAd 通过虚拟机运行操作码 1c → BranchF 条件跳转指令,如果栈顶 的值为false则跳转 (相当于汇编指令JNE/ JNZ) 1d → BranchT 条件跳转指令,如果栈顶 的值为true则跳转 (相当于汇编指令JE/JZ ) 1e → Branch 无条件跳转 (嘿嘿,相当于 汇编指令JMP) fc → Lead1 c8 → End 终止程序 (与Lead1配合使用) f3 → LitI2 将立即数压入堆栈 f4 → LitI2_Byte 将指定数据转化为字 节整型并压入堆栈 70 → FStrI2 将栈顶的WORD型元素保存 到内存单元中,然后执行出栈操作 6b → FLdI2 将WORD型参数压入堆栈 a9 → AddI2 栈顶两个WORD型元素相加, 相加的结果置于栈顶 ad → SubI2 栈顶两个WORD型元素相减, 相减的结果置于栈顶 b1 → MulI2 栈顶两个WORD型元素相乘, 相乘的结果置于栈顶 好了,以上列出了一些操作码以及相应的 含义,这里还有一份P-Code_OPCODES 文档,这份文档是关于VB P-CODE虚拟机的 说明文档,其阐述了操作码的解析原理(但 是并不全,嘿嘿)。如果大家遇到了不熟悉 的操作码的话,可以参考一下该文档,可能 有帮助。 好了,这里我们首先来讲解clave2这个Cra ckMe,将其加载到ExDec看看都显示些什么 。 这里我们可以看到开始于401CC0处,这里 不能完全依然于ExDec,因为有时候它的分 析不怎么准确,所以我们还是像上一章节 一样手工来定位第一个操作码吧。 我们定位到入口点上面的API函数MethCal lEngine。 这里我们给JMP MethCallEngine这一行设 置一个断点,为了防止还有其他地方调用M ethCallEngine,我们在JMP MethCallEngi ne这条指令上面单击鼠标右键选择-Follo w定位到MethCallEngine的入口点,在入口 点处也设置一个断点。 我们运行起来看看会不会触发刚刚设置的 断点。 我们可以看到弹出了注册窗口,但是并没 有触发我们设置的断点,说明在执行P-COD E之前注册窗口就产生了,可能有的程序执 行PCODE在窗口产生之前,而我们这里刚好 相反,其实这无关紧要,现在我们随便输入 一个错误的用户名和序列号。 接着我们单击Registrar (注册)按钮,就会 断在JMP MethCallEngine这一行,好,现在 单击工具栏中的M按钮打开区段列表窗口 定位到代码段 (这里我们使用原版的OD,不 用那个Patch过的OD,那个Patch过的OD对P -CODE应用程序并不奏效),对代码段设置 内存访问断点。 接下来我们多运行几次,直到断在读取第 一个操作码的指令处为止。 这里我们可以看到ESI指向了第一个操作 码,并且该操作码将被保存到AL中。 和ExDec中显示的第一个操作码是位于401 CC0处的04一致。 我们应该还记得上一章介绍过的04这个操 作码是将后面紧跟的参数压入堆栈,这里 该参数是EBP - 8C。 下面我们来看看P-CODE的说明文档中操作 码是如何解析的,如下图: 04 567B 0B8E 2 1 2 就是将 一个参数压入堆栈, 0B8E指的是对应参数 的RVA (相对虚拟地址), 第一个2指的是所 有参数所占的总字节数,接下来的一个1指 的是参数的个数,最后的一个2指的是单个 参数所占的字节数,由于这个例子只有一 个参数,所以最后只有一个2,如果具有多 个参数的话,后面会依次显示各个参数所 占的字节数。 我们这里的第一个操作码所执行的操作即 PUSH EBP - 8C,继续看下面的操作码,但 是本章我们不跟上一章那样从头到尾跟踪 每个操作码,这里我们只跟踪关键的操作 码。 我们看到这两处VCALLHresult,都是读

文档评论(0)

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

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

1亿VIP精品文档

相关文档