VB快速逆向法(特征码法)

VB程序逆向 1、VB介绍 Visual Basic 是一种具有良好图形用户界面的程序设计语言。 Visual的意思是“可视的”,也就是直观的编程方法,在编程时不需要编写大量代码去描述界面元素的外观和位置,只需把预先建立的对象拖放到窗体上。Basic是指BASIC语言,VB使用了BASIC语言作为代码。 VB采用面向对象和事件驱动的程序设计机制,这种机制下,VB程序往往是多线程的,在分析过程中定位主线程和事件处理过程尤为重要。 在编译方式上,VB既有直接编译生成的可执行程序,也有间接编译生成的可执行程序,不同的编 阅读详情

标 题: VB快速逆向法
作 者: nbw
时 间: 2005-03-17,13:20
链 接: http://bbs.pediy.com/showthread.php?t=12133

VB快速逆向法

作者:nbw
原作:B. Kathras

一般来说VB程序很难入手分析,除了利用一些已经被分析出来的VB库导出函数,在很少有入口去进行分析了。我看了B. Kathras写的文章,觉得很不错,好东西不敢独享,这里就整理一下,给大家一起看看。
首先是如何处理nag窗口,然后是处理各种控件的属性。这些方法很实用,我也享受了一下5分钟ko的乐趣。

原作来自http://www.CodeBreakers-Journal.com ,这里不是翻译,我也没有把他里面说的所有东西都试验,因此有了什么问题你可以去找作者。
阅读以前最好能够理解VB里面一些基本术语,比如Form就是窗口,Label就是标签等。不过也无大所谓。

在VB程序中,有很多方法可以初始化nag窗口。最常用的一种类似于:

Form.show

这句话被编译后,在程序中变成以下形式:

:0040203D FF92B0020000 call dword ptr [edx+000002B0]

所以,反汇编源程序,搜索字符串  +000002B0]  就可以找到这个地方。其中的寄存器一般为 edx, ecx 或者 eax …
如果要去掉这种nag,可以去掉这个call,但是有时候移除这个call的时候需要平衡堆栈,因为nop掉该函数会导致esp高24h,可以采用以下方法移除:

:0040203D 83C424 add esp, 00000024
:00402040 EB01 jmp 00402043
:00402042 90 nop

一般也可以通过对函数 __vbanew2 下断点断到这个地方。这个函数是窗口创建时候采用的函数,但是并不是类似于 DialogBoxParamA 的函数,而只是一个声明函数,比如:

Dim NagScreen as New NagForm
NagScreen.Show

另外一种显示nag窗口的方法是加载的时候利用窗口的 visible 属性。属性设定为 false 就不显示,否则就显示。属性的设置一般利用下面语句:

NagForm.Visible = True

编译后变成如下形式:

:00401FF9 6AFF push FFFFFFFF
<-这是VB中的TRUE变量

:00401FFB 50 push eax
:00401FFC 898568FFFFFF mov dword ptr [ebp+FFFFFF68], eax
:00402002 8B10 mov edx, dword ptr [eax]
:00402004 FF92BC010000 call dword ptr [edx+000001BC]
<-初始化属性的函数

可以通过搜索特征码 +000001BC] 来定位到这个地方。

对付这种nag,只需要修改一下属性变量就行了。VB中 00 代表 False ,所以把上面的变量改成 00 就可以,例如:

:00401FF9 6A00 push 00
:00401FFB 50 push eax
:00401FFC 898568FFFFFF mov dword ptr [ebp+FFFFFF68], eax
:00402002 8B10 mov edx, dword ptr [eax]
:00402004 FF92BC010000 call dword ptr [edx+000001BC]

这样就可以移除该nag。

改变对象属性

有很多对象属性我们都想要了解,我在这里列出来最常用的一些属性查找方法。
最常用的断点拦截函数是 __vbaSetObj ,但是现在的软件都非常大,以至于通过拦截这个函数来确定属性很不现实。不过可以通过别的一些特征来判定属性。
对于按钮的 Enable 属性,一般程序实现如下:

Command1.Enabled = False

编译后如下:

:00402018 57 push edi <— value of edi = 00
which in VB = False
:00402019 56 push esi
:0040201A 8B06 mov eax, dword ptr [esi]
:0040201C FF908C000000 call dword ptr [eax+0000008C] <— Initialization call

可以通过搜索特征: +0000008C] 来定位这个地方

有很多方法来处理这里的属性,比如可以把 402018 地方入栈的代表 TRUE的参数 -1 改成 00,表示False。或者把这里的call给去掉,如下:

:0040201C E901000000 jmp 00402022
:00402021 90 nop

请注意这种方法不仅仅适用于按钮,也适合处理text Box文本框的可用或者不可用。

下面是按钮的 visible/invisible 属性。程序运行时改变按钮改属性的代码如下:

Command1.Visible = False

编译后,如下:

:00402018 57 push edi <— value of edi = 00 which in VB = False
:00402019 56 push esi
:0040201A 8B06 mov eax, dword ptr [esi]
:0040201C FF9094000000 call dword ptr [eax+00000094] <— Initialization call

如果修改属性,可以通过修改 push edi 的值或者去掉这个函数。
请注意这个方法也适合处理 Label标签的 enableing/disabling 属性。

如果去掉未注册信息,有时候需要处理 Label标签的 visible/invisible 属性。程序中一般为:

Label1.Visible = False

编译后如下:

:00402018 57 push edi <— value of edi = 00 which in VB = False
:00402019 56 push esi
:0040201A 8B06 mov eax, dword ptr [esi]
:0040201C FF909C000000 call dword ptr [eax+0000009C] <— Initialization call

可以搜索特征:  +0000009C]
处理方法和上面一样。不说了。

对于菜单限制,一般处理 enabling/disabling 属性,程序中如下:

mnuRegister.Enabled = False

编译后:

:004020A8 57 push edi <— value of edi = 00 which in VB = False
:004020A9 56 push esi
:004020AA 8B06 mov eax, dword ptr [esi]
:004020AC FF5074 call [eax+74] <— Initialization call

可以搜索特征: +74]

对于text文本框的数据,也可以有相应处理,程序中如下:

Text1.Text = ”Insert blah blah here”

编译后如下:

:00401C35 6890174000 push 00401790 <— Push the address of the
above string to the stack
:00401C3A 56 push esi
:00401C3B 8B06 mov eax, dword ptr [esi]
:00401C3D FF90A4000000 call dword ptr [eax+000000A4] <— Initialization call

其中 push 00401790 是文本框中数据的地址,如果想修改文本框中的数据,可以修改这个地址的数据,或者直接修改这个地址以指向你的字符串。如果不乐意,当然也可以把这个函数给nop掉。

对于很多控件中的caption属性,我们都可以进行修改。比如窗口标题栏上的数据,或者label标签里面的内容,都可以进行处理。程序中一般实现方法是:

mainForm.Caption = ”Blah Blah v1.0 - Unregistered”

编译后:
* Possible StringData Ref from Code Obj ->”Blah Blah v1.0 - Unregistered”
|
:004020CC 68FC194000 push 004019FC <— Location of the above string
:004020D1 50 push eax
:004020D2 898564FFFFFF mov dword ptr [ebp+FFFFFF64], eax
:004020D8 8B10 mov edx, dword ptr [eax]
:004020DA FF5254 call [edx+54] <— Initialization Call

可以搜索特征: +54]

这里请注意,你可以通过搜索字符串 ”Blah Blah v1.0 - Unregistered” 来确定这个地方,但是很多时候这些字符串动态导入,无法被搜索到,因此比较保险的就是搜索所有的 call [someregister+54] ,这样可以处理所有的caption。定位以后,你可以通过上面介绍的方法进行处理。

上面介绍了很多属性的特征。最后我们来讨论一下一个对象的所有属性,其实别的对象的属性也可以通过下面方法来确定。
看一下下面的内存内容,我们可以计算出其代表的对象。

properties.
.004011D0: 00 0D 01 00-00 3E 00 00-00 00 05 00-46 6F 72 6D – > - Form
.004011E0: 31 00 0D 01-05 00 46 6F-72 6D 31 00-19 01 00 42 1 — Form1 – B
.004011F0: 00 23 FF FF-FF FF 24 05-00 46 6F 72-6D 31 00 35 # $- Form1 5
.00401200: 3C 00 00 00-59 01 00 00-48 12 00 00-7B 0C 00 00 < Y- H- {-
.00401210: 46 03 FF 01-28 00 00 00-05 07 00 4F-70 74 69 6F F- -( – Optio
.00401220: 6E 31 00 06-01 07 00 4F-70 74 69 6F-6E 31 00 05 n1 — Option1 -
.00401230: D0 02 08 07-57 03 C3 00-12 04 00 FF-03 26 00 00 —-W– – -&
.00401240: 00 04 06 00-43 68 65 63-6B 31 00 05-01 06 00 43 – Check1 — C
.00401250: 68 65 63 6B-31 00 05 D0-02 28 05 BF-04 FF 00 12 heck1 —(— -
.00401260: 03 00 FF 03-24 00 00 00-02 05 00 54-65 78 74 31 - -$ – Text1
.00401270: 00 02 04 38-04 D0 02 F7-08 77 01 0B-05 00 54 65 –8—–w— Te
.00401280: 78 74 31 00-12 01 00 FF-03 2C 00 00-00 01 08 00 xt1 – -, –
.00401290: 43 6F 6D 6D-61 6E 64 31-00 04 01 08-00 43 6F 6D Command1 — Com
.004012A0: 6D 61 6E 64-31 00 04 E0-01 60 09 BF-04 77 01 08 mand1 —?–w–
.004012B0: 00 11 00 00-FF 03 26 00-00 00 03 06-00 4C 61 62 - -& – Lab
.004012C0: 65 6C 31 00-01 01 06 00-4C 61 62 65-6C 31 00 05 el1 — Label1 -
.004012D0: B0 04 F0 00-27 06 77 01-12 02 00 FF-02 04 00 00 — ?w— –
.004012E0: 50 00 00 00-AB 51 84 9E-E1 4E 9C 4A-90 DB 82 61 P Q-NJ-a
.004012F0: 67 D3 DD F9-00 00 00 00-00 00 00 00-00 00 00 00 g—

对象名称 object = Command1
下面是各种属性:
Object.Caption = Command1
Object.Left = 480
Object.Top = 2400
Object.Width = 1215
Object.Height = 375
Object.Enabled = False

下面是VB中各种属性列表:
00 Picturebox
01 Label
02 TextBox
03 Frame
04 Command Button
05 CheckBox
06 Option Button
07 ComboBox
08 ListBox
0B Timer
0D Form

如果你想修改相应的属性,只需要修改一下内存里面的数值就可以了。

最后附上一个VB CrakeMe。理论上根据上面的文章,就可以搞定这个东西。我搞了2个,别的没搞。嘿嘿
转看雪的,http://bbs.pediy.com/showthread.php?t=12133&highlight=VB+%E9%80%86%E5%90%91+%E5%90%91

VB6逆向工程浅析 B的编译有两种方式,一种是P-Code方式,一种是本机代码。P_Code方式是VB 从早期版本保留下来的,也是比较难逆向的一种。而本机代码方式编译的程序已经 和VC很接近了。这里只探讨以本机代码方式编译的程序。由于微软在VB的实现方面 的资料很少,使人觉得VB的逆向比较难。其实掌握一些规律,VB的程序还是很容易 入门的。 立即下载

相关推荐

VB反编译 源码

VB编辑器源码工具,分析相关的控件及属性的设置问题,同时给出整个软件的具体构架。

程序逆向:Visual Basic程序逆向分析

目前VB语言碰到的都是crackme里的一些验证算法中利用VB做一个图形界面,下面记载的知识点也基本是针对VB在Crack中的应用。VB函数的调用遵循 stdcall 原则,并且函数之间会有NOP分隔,而且VB程序不是直接调Windows API函数,而是调用VB库里的函数。可以看到下图导入的函数都来自于MSVBVM50.dllVB文件使用名为MSVBVM60.dll的VB专用引擎(Microsoft Visual Basic Virtual Machine 6.0)

Reveone的博客 3400

VB反编译程序源代码

VB 编写的反编译程序源代码。功能十分强大。

VB程序逆向反汇编常见的函数(修改版)

VB程序逆向常用的函数 1) 数据类型转换: a) __vbaI2Str 将一个字符串转为8 位(1个字节)的数值形式(范围在 0 至 255 之间) 或2 个字节的数值形式(范围在 -32,768 到 32,767 之间)。 b)__vbaI4Str 将一个字符串转为长整型(4个字节)的数值形式(范围从-2,147,483,6482,147,483,...

LindaXu1220的博客 803

制作特征码(通过API获取底层硬件信息)

这是由制作特征码源码编译出来的预览版,符合要求的话就给5个分下同名的压缩包。特征码是现在很多软件用来反盗版的手段,根据每台电脑的硬件信息的不同,经过自定义的算法,计算出一组特定的数字,这就是唯一的特征码。

VB函数逆向 msvbvm60.dll代码

VB函数逆向 msvbvm60.dll代码实现,对于逆向VB来说是一个不错的资源,当你看到一系列头痛而繁杂的系统函数时,这个就派上用场了!

VB程序逆向反汇编常见的函数

转自: http://www.cnblogs.com/bbdxf/p/3780187.html

ProgrammingRing的专栏 8128

VBExplorer1.1,可以对vb6做的程序进行逆向

VBExplorer1.1,可以对vb6做的程序进行逆向,不过值可以得到基本信息,想要全的只有靠反汇编了。

vb画图程序代码

SavePicture Picture1.Image, App.Path & “\我的图片.jpeg”

qq_32257509的博客 1014

代码审计工具学习之Seay(安装以及初步认识)

目录 1.1名词解释 1.2代码审计的重要性 1.3代码审计的步骤 1.4代码审计的内容 1.5常见的代码审计工具 2 Seay 2.1什么是Seay 2.2Seay的安装过程 3典型漏洞分析 3.1什么是命令注入漏洞 3.2 如何理解命令注入漏洞 3.3 如何防御命令注入漏洞 4 利用工具对命令注入漏洞进行分析 4.1DVWA靶场命令注入漏洞分析 4.2 Pikachu靶场命令注入漏洞分析 1.1名词解释 软件代码审计是对编程项目中源代码的全面...

weixin_52515588的博客 2万+

光电容积脉搏波PPG信号分析笔记

脉搏波信号PPG分析笔记

teresa_zp的专栏 6475

PC逆向 VB按钮事件

首先打开,右键脚本,运行VB事件断点设置,再次运行 F7跟进去 右键,智能搜索字符串 看到注册提示 一定有一条指令跳转到这条mov指令 找到VB的比较字符串指令,下断点并运行,在数据窗口跟随 右下角查找到了假码,往上翻翻就能看到真码 ...

XFox_的博客 337

Apollo学习笔记(4)坐标系

百度Apollo项目用到了多种坐标系,其中帮助文档提及的坐标系包括: 全球地理坐标系(The Global Geographic coordinate system ) 局部坐标系—东-北-天坐标(The Local Frame – East-North-Up,ENU) 车身坐标系—右-前-天坐标(The Vehicle Frame —Right-Forward-Up,RFU) 车身坐标系—前-左-天坐标(The Vehicle Frame —Front-Left-Up,FLU) 还有一种Frenet坐标

qq_24649627的博客 5798

OD使用教程10 - 调试篇10|解密系列

OD使用教程10 - 调试篇10 让编程改变世界 Change the world by program 大家或许有所察觉了,随着我们课程的不断深入学习,我们感觉自身逆向的“内功”也在不断的增进! 我们从爆破入手,到现在逐步大家进入程序的内部,认识不同编译器开发的程序,探索不同的加密逻辑。 前边,我们的例子中既有VC++开发的程序,也有Delphi开发的程序,今天我们给...

weixin_34357267的博客 276

解决VM 与 Device/Credential Guard 不兼容。在禁用 Device/Credential Guard 后,可以运行 VM 的方法

在启用了Credential Guard或Device Guard的Windows 10主机上启动12.5版之前的VMware Workstation中的虚拟机时,将显示蓝色诊断屏幕(BSOD)。 会看到类似于以下内容的错误: VMware Workstation和Device / Credential Guard不兼容。禁用Device / Credential Guard后,可以运行VMwar...

Hern(宋兆恒) 39万+

GEE入门之路(从【初学者】角度,大白话)——附海面风速插值代码

非常初级的GEE入门教程!大白话!有手就行!附海面风速插值代码,克里金插值,时间插值。

weixin_46812066的博客 4084

VB程序逆向关键点

VB程序逆向关键点 关注加粗的即可!!

u011513939的博客 651

基于YOLOv8的铁路轨道异物检测系统设计与实现

目标检测是计算机视觉领域的核心任务之一,旨在识别图像中特定目标的位置和类别。传统方法主要依赖手工特征(如HOG、SIFT等)和分类器(如SVM),而深度学习方法通过卷积神经网络自动学习特征表示,显著提升了检测性能。YOLO(You Only Look Once)系列算法作为单阶段目标检测的代表,以其高效的检测速度著称。YOLOv8是Ultralytics公司于2023年发布的最新版本,在精度和速度上都有进一步提升。

YOLO 574

VB初级逆向与利用

今天做一个VB程序的自显注册码。我也不知道该怎么叫,就是找到出现注册码的地方,然后用对话框弹出来。说白了就是用MessageBox把一个字符串给弹出来(没追求阿。。。)    为了有点追求,今天不导入user32里面的API,而是把VB里面自带的Msgbox函数给挖出来调用,就是引用MSVBVM60.rtcMsgBox函数。我手头没有OP资料,自己分析一下这个函数的调用吧。    自己用V

632

毕设帮扶:从0到1搭建基于YOLOv5的打架斗殴检测系统——助你搞定深度学习毕设

做完这个毕设,你已经掌握了从数据准备到模型部署、界面开发的全流程。把模型部署到边缘设备(如安防摄像头的嵌入式系统)上,实现本地化实时检测与报警;加入行为严重程度分析(如轻微推搡 vs 严重斗殴)、涉事人员数量统计,让系统从“检测”升级为“智能安防决策”;尝试融合声音、红外等多模态数据,打造全方位的暴力事件监测系统。按照这个教程一步步做,你的毕设肯定能做得很扎实。要是过程中遇到啥问题,别担心,慢慢梳理或者咱们一起聊聊,一定能把这个毕设做成你满意的作品。

LXY_LOVE36的博客 118

YOLOv11改进 | Conv/卷积篇 | 轻量化多尺度异构卷积(MSHC)优化YOLOv11精度(全网独家首发)

本文介绍了Hype-YOLO提出的MANet结构,这是C3、C2f、C3k2的升级版,能显著增强特征提取能力。MANet整合了DSConv和C2f结构,通过多分支异构设计提升梯度流动和特征语义深度。文章详细解析了MSHC模块的原理,包括其多尺度并行建模、通道混洗等核心机制,并提供了完整的代码实现和训练教程。实验表明,Hype-YOLO的精度优于YOLOv11。该结构在保持轻量化的同时,通过异构分支设计实现了更丰富的特征表达,适用于目标检测等视觉任务。

Snu77的博客 949

VB程序逆向常用的函数

1) 数据类型转换: a) __vbaI2Str    将一个字符串转为8 位(1个字节)的数值形式(范围在 0 至 255 之间) 或2 个字节的数值形式(范围在 -32,768 到 32,767 之间)。b)__vbaI4Str   将一个字符串转为长整型(4个字节)的数值形式(范围从-2,147,483,6482,147,483,647) c)__vbar4Str  将一个字符...

hereson 453

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

逆向——VB调试

逆向——VB调试VB调试(一)认识VB两种编方式VB逆向中常用的函数:数据类型转换数据移动数学运算程序设计杂项比较函数在动态跟踪,分析算法时,尤其要注意的函数:函数中的缩写Btw调试中相关使用拦截警告声数据移动数据类型转换数值运算:针对变量VB的指针程序结构字符串操作参考文献 VB调试(一) 因为VB的程序有单独的一个库,所以专门说明。 认识VB 两种编方式 N-code:VB 5.0以后,为了...

wk19951125的博客 1481

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

OD 实验(十) - 对一个 VB 程序的逆向

前话: VB 程序用 OD 进行逆向的话,可以先查找相关的变量和字符串,以寻找突破口 变量: __vbaVarTstEq __vbaVarCompEq __vbaVarTstNe __vbaVarCompLe __vbaVarCompLt __vbaVarCompGe __vbaVarCompGt __vbaVarCompNe 字符串: __vbaStrCmp ...

andiao1218的博客 631

Easy_vb(逆向)

题目来自MCTF。用IDE打开,只有一个主函数,在函数中就可以找到flag,按要求提交。

WYJ____的博客 1500
上一篇: 加密与解密二版菜鸟学习笔记(2) - SEH 结构化异常处理
下一篇: VB6逆向工程浅析
vbsourcecode
博客等级 码龄17年 19粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值