2021-02-28

abex’ crackme #2
第二个crackme文件是由Visual Basic 文件编译而成
1.VB文件的特征
VB文件使用名为MSVBVM60.dll的BV专属引擎,在显示消息框时,VB代码中调用MsgBox()函数。VB编译器真正调用的是MSVBVM60.dll里面的MessageBoxW()函数,在该函数内部通过直接调用user32.dll里面的MessageBoxW()函数来实现。
VB主要用来编写GUi程序,IDE用户界面本身也最适合于GUI编程。由于VB程序采用windows操作系统的事件驱动方式工作,所以在main()或winmain()中并不存在用户代码,用户代码存在于各个事件处理程序中。

在这里插入图片描述
执行程序后,在EP代码中首先要调试VB引擎的主函数
EP的地址为401238。401238地址处的PUSH 401E14命令用来RT_MainStruct结构体的地址压入栈中。然后通过call命令执行JMP语句。该命令会跳转到VB引擎的主函数ThunRTMain()。

2个需要注意的方面
(1).40123D地址处的CALL 401232命令用于调用ThunRTMain()函数,在这里是通过JMP命令跳转。这就是VC++ VB编译器中常用的间接用法
提示:4010A0地址是IAT区域,包含着MSVBVM60,ThunRTMain()函数的实际地址。

(2).ThunRTMain()函数的参数RT_MainStruct结构体,RT_MainStruct结构体的成员是其他结构体的地址。也就是说VB引擎通过参数传递过来的RT_MainStruct结构体获取程序运行需要的所有信息。

2.分析crackme
在这里插入图片描述

打开字符串窗口,可以发现程序显示消息框所用的字符。还有实际调用消息框函数的代码(4034A6)
从以往的经验来看,程序会通过比较输入字符串与预留的正确字符串进行比较,从而输出不同情况的结果。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
可以看到在UNICODE "Wrong serial!"之前有两个je判断,应该是对应着两种不同的结果。在403329地址的__vbaVarTstEq()函数,比较(TEST命令)返回值(AX)后,由JE命令决定执行哪段代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值