Visual Basic文件浅析及算法分析.pdf

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

VisualBasic文件浅析及算法分析

VisualBasic文件特征

1.1、VB专用引擎

VB文件使用名为MSVBVM60.dll的VB专用引擎。举个VB引擎的例子,显示消息框时,VB

代码中要调用MsgBox()函数。其实,VB编辑器真正调用的是MSVBVM60.dll里的

rtcMsgBox()函数,在函数内部通过调用user32.dll里的MessageBox()函数来工作。

1.2、本地代码与伪代码

根据使用的编译选项不同,VB文件可以编译为本地代码与伪代码。本地代码使用方便调试

器解析的IA-32指令;而伪代码是一个解释器语言,它使用由VB引擎实现虚拟机并可自解析

的指令。

1.3、事件处理程序

VB主要用于编写GUI程序。因为VB程序采用Windows操作系统的事件驱动,所以用户代码

存在于各个事件处理程序之中。

1.4、未文档化的结构体

VB使用的各种信息以结构体形式存在于文件内部。

查看serial值

运行OD,打开abexcrackme#2.exe。执行程序后,首先调用的VB引擎的主函数

ThunRTMain()。

EP的地址为00401238。00401238地址处的PSUH指令用来把RT_MainStruct结构体的地

址(00401E14)压入栈。

然后40123D地址处的CALL00401232指令来调用401232处的指令(跳转到主函数

ThunRTMain())前面压入栈的值作为主函数的参数。

先运行abexcrackme#2.exe看看具体体现。可以看到输入错误的数据,会提示

Nope,thisserialiswrong!这就有捷径了啊。

这里本来想要查看字符串的方法需要定位到关键位置,但是我在使用OD下断点,然后运行

之后就卡壳(不能进行任何操作,于是放弃这个方法,决定一步一步的调试到指定位置)。

卡壳如下,有知道原因的师傅请指导一下:

重新调试。直接F8执行00401238pushabexcrac.00401E14,可以看到数据已经被压入

右下角栈窗口,不要问为什么不F7,因为F7直接进入函数内部,太繁琐了。

再F8执行0040123D处的指令,熟悉的窗口再次出现。

随便输入一串数字,点击check。如果不下断点就会弹出上面的错误提醒。这里在

00403324处下了一个断点,目的是让程序停留在这里。

那么为什么是停留在这里呢,我们在这个地址后面可以看见一个Yep,thiskeyisright!,

再往下面看可以看见,

可以看见Nope,thisserialiswrong!。那么可以推断这两个就是输入数据之后弹出的提

醒。那么要想二选一,在它们的前面必然会有一个判断语句。向上面看,可以发现两个

push指令,可以猜测这就是我们输入的数据。这也是在00403324下断点的原因。接下来

执行这两条push指令,执行之前先记录一下右上角寄存器窗口的数据。

然后依次执行两条push指令。

push

edx

push

eax

执行之后,从栈窗口可以看见两个熟悉的值。

执行完后,选中pushedx右击选择followindump-Implicitstackaddress。可以看

到下方的数据窗口有变化,但是为乱码。

在数据窗口右击选择Long-AddresswithASCIIdump转换数据窗口的查看形式。

然后在数据窗口跳转到EDX的地址处,可以看到两个值,一个是我们前面输入,那另一个就

是正确的序列值。

文档评论(0)

137****9859 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档