- 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-Part1
(本章的CrackMe需要支持库MSVBVM50.DLL)
前面章节我们已经介绍了Visual Basic破解相关的基础知识,如果大家还想更加深入的研究VB应用程序破解的话,可以继续学习高级篇中的关于VB破解的相关内容。(PS:就是我打包上传到百度网盘的西班牙破解文集系列)
COCO写的VB破解教程就比较好,其中可能会涉及到比较复杂的处理技巧,拿来练习做好不过了。还有一些其他优秀教程可供我们更加深入的研究VB Cracking。接着下来我们将讨论下一个话题-P-CODE。
我们知道VB编写的应用程序有两种编译方式:一种是Native方式,我们前面章节已经讨论过了,两一种就是P-CODE方式-我们接下来将讨论的话题。
Native编译的代码和P-CODE的主要区别在于:Native是直接执行代码段中的代码的。而对于P-CODE,如果我们使用之前那个Patch过的OD加载它,并且给代码段设置内存访问断点的话(实际上是内存执行断点),除非是直接调用API函数,否则不会断下来。
说明,该区段没有直接可供CPU执行的代码。
P-code,实际上是一组自定义的指令集,必须通过基于堆栈的虚拟机翻译为80X86上的指令集才能执行,即通过msvbvm50.dll和msvbvm60.dll这两个动态库来解释执行。也可以理解为通过P-CODE告诉虚拟机将要进行什么操作。例如:
1e 表示 执行无条件跳转(JMP)
1e意味着执行无条件跳转,该无条件跳转是通过虚拟机(msvbvm50.dll,msvbvm60.dll)来执行的,也就是说P-CODE程序会读取代码段中的值,然后由这些值来告诉虚拟机需要执行什么操作。这也就是为什么我们说P-CODE程序的代码段中没有可执行代码的缘故。
现在就让我们一起拿起“手术刀”来跟踪,剖析一个CrackMe的P-CODE的奥秘吧。
我们实验的这个CrackMe名字叫做clave1,这个CrackMe是我朋友JB DUC写的,用来介绍P-CODE相关的内容正好合适,我们需要找到该CrackMe的正确序列号。
很多人调试P-CODE可能喜欢用WKT,如果大家想了解WKT怎么调试P-CODE的话,可以看JB DUC关于P-CODE的破解教程,我们这里还是用OllyDbg来调试了,由于微软官方并没有提供操作码的清单,所以还会用到另外一个工具EXDEC-这个工具可以识别操作码的名称。
我们使用原版的OD,配置好反反调试插件,加载该CrackMe。可以看到停在了入口点处。
说明一点,之前介绍的用于剔除Native程序的NAG窗口的4C法同样适用于P-CODE。
现在我们来看看跟Native的不同的地方:
我们从入口点往下看,会发现没有几行代码。
我们只看到了大片的字节码,这里不要试图去分析这些字节码(毫无意义),我们应该还记得对于Native方式编译的VB应用程序,入口点往下还会有大量的代码吧。
也有相似的字节码,我们继续往下。
这里我们可以看到大段的代码,而P-CODE的程序的话OllyDbg可能也会显示处少量的代码,OD识别成了指令,但其实这些地方也是纯字节码。
我们继续来看刚刚那个P-CODE的CrackMe。
另外一个特征就是MethCallEngine这个API函数,该函数我们在P-CODE方式编译的VB应用程序中都能看到,所以我们甄别一个VB应用程序是不是以P-CODE方式编译的,一般有两步:1:看代码段中入口点以下是不是大片的字节码 2:看有没有MethCallEngine这个函数。
好了,现在我们来看看字符串列表中有没有什么有价值的字符串。
貌似没看到什么有用的字符串。
好,那我们直接给JMP MethCallEngine这一行下一个断点吧。
接下来我们选中JMP MethCallEngine这一行,单击鼠标右键选择-Follow,转入MethCallEngine内部,接着在MethCallEngine入口点处设置一个断点。
运行起来。
弹出了注册窗口,等待我们输入序列号。对于Native的VB程序,我们可以断API函数,但是P-CODE就搞不定了,但4C法对P-CODE程序依然有用。
现在我们随便输入一个错误的序列号。
我们单击Registrar(西班牙语:注册)按钮。
断在了JMP MethCallEngine处,MethCallEngine函数对P-CODE进行初始化。
我们继续运行,断在了MethCallEngine的入口处,我们来看看它做了些什么。
我们可以看到跳转到了7413D243处。
现在我们用ExDec打开该CrackMe。ExDec是一款专门针对P-CODE的反编译器。我们来看看它显示了些什么。
我们可
文档评论(0)