- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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,都是读
您可能关注的文档
- 糖尿病教育-01-糖尿病基础知识.pptx
- 糖尿病教育-02-从关键指标看糖尿病的诊断与治疗.pptx
- 糖尿病教育-05-糖尿病降糖药物的选择.ppt
- 糖尿病教育-08-HbA1c测试介绍.pptx
- 糖尿病教育-09-糖尿病与并发症.pptx
- 糖尿病教育-11-关注下肢血管病变和糖尿病足.pptx
- 糖尿病教育-12-β细胞功能知多少.pptx
- 糖尿病教育-16-体重控制.pptx
- 糖尿病教育-17-肥胖糖尿病患者的治疗与管理.pptx
- 人工神经元网络模型.pptx
- 使用OllyDbg从零开始Cracking-31第三十一章-脱壳简介.pdf
- 使用OllyDbg从零开始Cracking-32第三十二章-OEP寻踪.pdf
- 使用OllyDbg从零开始Cracking-33第三十三章-神马是IAT 如何修复.pdf
- 使用OllyDbg从零开始Cracking-34第三十四章-手脱UPX,修复IAT.pdf
- 使用OllyDbg从零开始Cracking-36第三十六章-IAT重定向.pdf
- 使用OllyDbg从零开始Cracking-38第三十八章-手脱Yoda's Protector v1.pdf
- 使用OllyDbg从零开始Cracking-39第三十九章-神马是stolen bytes.pdf
- 使用OllyDbg从零开始Cracking-40第四十章-OllyDbg脚本的编写.pdf
- 使用OllyDbg从零开始Cracking-41第四十一章-神马是AntiDump.pdf
- 使用OllyDbg从零开始Cracking-42第四十二章-ACProtect V1.pdf
原创力文档


文档评论(0)