VB反汇编特点汇总:秒破Crackme8-10

栏目: ASP.NET · 发布时间: 6年前

内容简介:本文通过VB自写自逆,搞清楚VB逆向特点、p-code、native-coed、变量结构特点、默认浮点、epb-0×34法则等,不仅秒破Crackme8-10,以后遇到VB就不会头晕眼花了。

*本文作者:huluwa007,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

本文通过VB自写自逆,搞清楚VB逆向特点、p-code、native-coed、变量结构特点、默认浮点、epb-0×34法则等,不仅秒破Crackme8-10,以后遇到VB就不会头晕眼花了。

VB反汇编特点汇总:秒破Crackme8-10

准备

网盘链接: https://pan.baidu.com/s/1j_38rOvm83zoyTcJxutwXw 提取码: awdv

【环境和工具】

1. win7/xp虚拟机环境
2. CrackMe008Andrénalin.1.exe
3. CrackMe009Andrénalin.2.exe
4. CrackMe010Andrénalin.3.exe
5. VB6写的研究程序(pcode版)
6. VB6写的研究程序(ncode版)
7. ollydbg
8. VB Decompiler

【学习层次】

1. 了解VB开发特点
2. 理解VB反汇编特点
3. 掌握VB反汇编技巧

VB自编自逆

这一段文章搞透后,不仅能秒破CrackMe8-10,以后在遇到VB就不会蒙圈了。

程序界面:

VB反汇编特点汇总:秒破Crackme8-10

程序源码:

VB反汇编特点汇总:秒破Crackme8-10

完整工程文件和源码在网盘。

VB反汇编特点汇总

1. 两种编译

VB6.0之后的版本,在选择编译最终程序的时候,是由两种选择的,分别是:

p-code模式
native-code模式

如下图:

VB反汇编特点汇总:秒破Crackme8-10

p-code

伪代码,并不是真正编译的机器码,需要经过msvbvm60.dll的翻译和解释才能执行;

比较小;

VB特有;

字串很难搜索;

OD几乎无法分析,跟变态壳似的;

VB Decompiler可以直接逆出伪源码。

例如上方程序,用p-code编译的版本,od中甚至连MsgBox断点都不好下,各种绕的晕头转向。

VB反汇编特点汇总:秒破Crackme8-10

然而,遇到p-code的,就直接上神器VB Decompiler吧,工具在网盘-常用 工具 里面,如图,可以直接翻译伪源码:

VB反汇编特点汇总:秒破Crackme8-10

native-code

和其他开发环境类似,直接编译出真正的机器码,cpu直接执行;

既然cpu可以直接认识,那么od也就认识了;

OD可以逆向动态分析;

程序会比p-code大;

VB Decompiler也很好用,也是可以逆出伪源码。

如图,在od中,字符串搜索和堆栈跟踪符合正常预期。

VB反汇编特点汇总:秒破Crackme8-10

VB反汇编特点汇总:秒破Crackme8-10

VB Decompiler逆出伪源码:

VB反汇编特点汇总:秒破Crackme8-10

2. native-code反汇编的变量结构特点

native-code编译的VB程序是可以用OD正常动态调试的,OD对其常用函数的识别也是很好的。但是对VB不熟的还是依然会茫然,其中一个原因就是变量结构问题。我们以自己写的这个探索程序为例子,整数1乘以2,逆向看看VB的计算过程。

VB反汇编特点汇总:秒破Crackme8-10

OD中断在了即将进行计算之前,请仔细观看下图,识别相应的参数和寄存器和堆栈和内存数据,就可以看出端倪。

VB反汇编特点汇总:秒破Crackme8-10

可以看出变量结构特性是:

寄存器接收变量的地址;

地址指向的是一个类似C++结构体一样的结构;

其中首地址存放的是变量类型编号;

首地址+0×8,存放的才是实质的数据。

我总结了几个常用的变量数据类型,编号对应如下:

编号 类型 [首地址+0x8]
2 int
3 long
4 单精浮点 32位浮点值
5 双精浮点 64位浮点值
8 字符串 字符串地址
11 byte

3. 变量未声明类型,数值计算采用64位双精

VB声明变量,格式如下图:

VB反汇编特点汇总:秒破Crackme8-10

AS后面是接类型,也可以不写AS,根据需要自动转换,那么当转换位数值类型时,默认是64位双精浮点型。我们依然利用这个乘法探索程序,逆向进行验证,源码如下图:

n1、n2、nRes三个变量;

均未指定类型;

Val是把字符串转换为数字;

其实不用val转换,直接用字符串向乘,VB在计算的时候也会转。

为了反汇编看起来条线清晰方便,我们就提前转一下。

VB反汇编特点汇总:秒破Crackme8-10

程序操作如下图:

2和3相乘,点击默认类型计算结果;

我们用OD逆向分析计算过程。

VB反汇编特点汇总:秒破Crackme8-10

OD中逆向计算过程如下图:

可见两个乘数2和3,默认类型编号是5,即双精浮点型。

VB反汇编特点汇总:秒破Crackme8-10

切换内存显示模式为64浮点后,如下图:

VB反汇编特点汇总:秒破Crackme8-10

可见,确实VB会把没有声明类型的数字类型变量,默认采用64位双精浮点。

4. 另外两个特性

VB字符串默认编码是unicode
VB反汇编中很多时候会在[ebp-0x34]这个堆栈地址中看到最终的计算的结果。

秒破CrackMe8-10

知道了VB反汇编的特点后,CrackMe8-10其实很简单。若是直接用 VB Decompiler,那就更简单了。但是还是推荐用OD去好好分析分析,毕竟CrackMe的终极目标还是学习。

三合一注册机效果动图:

VB反汇编特点汇总:秒破Crackme8-10

crackme008

VB反汇编特点汇总:秒破Crackme8-10

固定码,SynTaX 2oo1 ,开发者都说了Very very easy!我们就直接pass了。

crackme009

1. 输入用户名123456,和伪码654321

VB反汇编特点汇总:秒破Crackme8-10

2. OD中研究算法发现定义了循环,根据上文总结的VB的特点,可以轻易的得出结论,若是不知道这个特点,很容易跟看堆栈看的一脸懵逼。

VB反汇编特点汇总:秒破Crackme8-10

循环体实质内容,我们用VB的另外一个特性就是[ebp-0x34]结果特性来分析,如下图:

VB反汇编特点汇总:秒破Crackme8-10

每执行一次循环内容,[ebp-0x34]值得动态变化如下图:

VB反汇编特点汇总:秒破Crackme8-10

可以看出,这个循环得实质就是”用户名字符asc码求和”,用户名”123456″,即0×31+0×32+0×33+0×34+0×35+0×36 = 0×135再继续往下,发现这个结果会去做一个乘法,如图:

VB反汇编特点汇总:秒破Crackme8-10

再继续往下,相乘的结果,转化为十进制数字后进行字符串格式化,并且第4位和第九位换成”-“,如下图:

VB反汇编特点汇总:秒破Crackme8-10

动态观察,[ebp-0x34]的变化。

VB反汇编特点汇总:秒破Crackme8-10

根据以上分析,我们写出注册机源码:

VB反汇编特点汇总:秒破Crackme8-10

crackme010

VB反汇编特点汇总:秒破Crackme8-10

crackme010,我们依然是可以用OD逆向,好好熟悉VB反汇编特点,这里我们用另外一个神器VB Decompiler,网盘的常用工具里面有VB Decompiler直接逆出伪源码。

VB反汇编特点汇总:秒破Crackme8-10

翻译为C++源码,注意这里有个转义符,如果一个”\”则被识别为转义符,而”\”则被转移为反斜杠”\” 如图:

VB反汇编特点汇总:秒破Crackme8-10


以上所述就是小编给大家介绍的《VB反汇编特点汇总:秒破Crackme8-10》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Operating System Algorithms

Operating System Algorithms

Nathan Adams、Elisha Chirchir / CreateSpace Independent Publishing Platform / 2017-4-21 / USD 39.15

Operating System Algorithms will walk you through in depth examples of algorithms that you would find in an operating system. Selected algorithms include process and disk scheduling.一起来看看 《Operating System Algorithms》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具