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

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

内容简介:本文通过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. CrackMe008(Andrénalin.1.exe)
3. CrackMe009(Andrénalin.2.exe)
4. CrackMe010(André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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

程序员的自我修养

程序员的自我修养

陈逸鹤 / 清华大学出版社 / 2017-5 / 49.00

程序员作为一个职业、也作为一个群体,正逐渐从幕后走向前台,并以他们自己的能力加速改变着世界,也改变着人们生活的方方面面。然而,对于程序员,特别是年轻程序员们来说,如何理解自己的职业与发展,如何看待自己的工作与生活,这些问题往往比那些摆在面前的技术难题更让他们难以解答。 这本书从一个成熟程序员、一名IT管理者的角度,以杂记的形式为大家分享关于国内程序员职业生涯、个人发展、编程中的实践与认知乃至......一起来看看 《程序员的自我修养》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

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

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具