VB程序破解

VB 程序简介

  现在不少程序是用 VB 写的,你通过反汇编或跟踪调试时很容易鉴别某个程序是否为 VB 程序,VB EXE 文件并不是真正的编译可执行文件,它们需其动态链接库才能正常运行,各版本的链接库如下:

VB3 链接库为 vbrun300.dll

VB4 链接库为  vb40016.dll - 16 位,较少见;

VB4 链接库为  vb40032.dll - 32 位;

VB5 链接库为 msvbvm50.dll

VB6 链接库为 msvbvm60.dll

  VB 程序执行时从本质上讲是解释执行,它们只是调用  VBRUNxxx.DLL 中的函数   ,这样可使程序员不需写大量的程序代码就可编写出较好的图形界面的 windows 程序,不过 VB 是真正的程序吗?

 当然 VB 程序大大方便了程序编写者,但对我们来说, VB 程序向来是谁见谁头痛,一般用 VB 做的程序无论注册码也好, 30 天到期也好,如果用常规方法都很难有被破解的可能。原因很简单, VB exe 是伪代码,程序都在 vbXXX.dll 里面执行,你只能在 vbdll 里面用 sice 打转转,什么都改不成,而且代码质量不高,结构还颇复杂。

 不过你学完这一课,你就不用怕 Vb 程序,在这里我就谈谈两种常用方法,一、用 SOFTICE 对付;二、用 SmartCheck 。这一节就讲讲 SOFTICE 破解 VB 程序。

--------------------------------------------------------------------------------

SOFTICE 配制

 虽然大部分 VB 程序仍调用 Win32 API 函数,但如想在 VB dll 运行库中设断的话,你就必须把 VB dll 运行库加入 SOFTICE 配制里去。具体你可参考第五课中的《 SOFTICE 安装及使用》。

下例是在 win95/98 下你把相关的 VB DLL 运行库加入 winice.dat 配制文件里。 ( 部分 )

; 注意分号后是描述语言,不被执行。每次只装载需要的一种 VB dll ,不要同时装载两个以上,把要装载那种 VB dll 那一行的分号去掉,重新启动即可。另外,判断软件是何种 VB dll 有几种方法,最直接一种用 WDasm89 查看,还有一种方法是用十六进制工具打开程序,观察。或用 SOFTICE 跟进去(用 bpx hmemcpy) ,稍转一圈,你观察一下调试窗口领空处会出现何种 VB DLL 即可。

; EXP=c:/windows/system/msvbvm60.dll   ; Visual Basic 6
; EXP=c:/windows/system/msvbvm50.dll   ; Visual Basic 5
; EXP=c:/windows/system/vb40032.dll    ; Visual Basic 4(32-bit)
; EXP=c:/windows/system/vb40016.dll   ;Visual Basic 4(16-bit) 较少见
; EXP=c:/windows/system/vbrun300.dll   ; Visual Basic 3

   这样配制好后,重新启动,就可设 VB 运行库中各函数的断点了。

--------------------------------------------------------------------------------

VB dll 常用函数

1 、字符处理函数

MultiByteToWideChar, rtcR8ValFromBstr, WideCharToMultiByte, __vbaStrCmp, __vbaStrComp, __vbaStrCopy, __vbaStrMove, __vbaVarTstNe .

注意:这些函数前的下划线 __ 是由两根短线 _ 组成的,不要弄错。 如果你是 crack VB6 程序,你应在断点前增加 msvbvm60! 如:  bpx msvbvm60!__vbastrcomp 

VB5以前版本就没此限制 。如 bpx __vbaStrCmp

一些常用字符串函数

Val()  转换字符串为数字 .

Str$() -  转换数字为字符串 .

Left$() -  按要求从左取字符。例如:  Left$(Theodolite, 4) = "Theo".

Right$() -  按要求从右取字符 .

Ltrim$() -  去除字符串左边空格例如:  Ltrim$ (" Hello ") = "Hello ".

Rtrim$() -  去除字符串左边空格 .

Trim$()  去除字符串两边空格 .

Asc() -  转换字符为 ANSI 编码  . 例如: Asc("A") = 65. (注:65是ASCII码的十进制)

Chr$() -  转换 ANSI 编码为字符 . 例如  Chr$(65) = "A".

几个常用函数简解:

1、 __vbavartstne

如是在VB5中CALL MSVBVM50!___vbavartstne

进去后在0F04E351你将看到:
push dword ptr [ebp+0c] ;Push address *真* serial 的地址
push dword ptr [ebp+10] ;Push address 你输入的serial地址

下命令:d ebp+0c
你将在数据窗口看到 4字节地址倒序排列,你再次D 地址(己纠正顺序的), 就可看到序列号了。


2、 __vbaR8Str

在 VB5中是如下情况:
Push ebp-20
Call MSVBUM50.__vbaR8Str ;转换 string 到 Integer/Real
fcomp qword ptr [00401028] ;数据比较

在这行fcomp qword ptr [00401028] Type: DL 00401028 将看到*real* serial #.

DL 是显示 Long/real 型,SOFTICE默认时是DB状态。


3、 __vbastrcmp

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
反编译工具(VB Decompiler Pro):是一款针对使用Visual Basic 5.0/6.0开发的程序的反编译器。反编译工具(VB Decompiler Pro)可以被编译成伪代码p-code或native code模式。由于伪代码是由高级指令组成, 因此是很有可能反编译成源代码的(当然, 变量名,函数名等等是无法反编译的).反编译工具(VB Decompiler Pro)可以恢复众多伪代码指令,但要反编译成源代码还是有很多工作需要完成, 反编译器将帮助您更轻松的分析程序算法以及部分恢复源代码。 如果一个程序被编译成native code, 从机器码恢复源代码是几乎不可能的. 但即便是这种情形下VB Decompiler还是可以帮助你分析程序. VB Decompiler包含了一个强大的支持包含MMX和SSE的Pentium Pro指令集的反编译器. 它还包含一个代码分析器, 用于搜索所有API调用,汇编代码中的字符串引用并将结果修改为相应的注释。 加入一个程序被编译成.net汇编,反编译器将恢复所有的托管代码的数据表和模块,并且使用IL反汇编器反汇编所有的方法,函数以及事件。反编译并不需要.NET Framework并且支持所有的32位Windows操作系统。 VB Decompiler也将反编译文件中的所有的图形界面窗体以及控件。出于技术需要,反编译器可能显示所有控件的编译地址。 对于加壳的VB程序,首先需要脱壳后才能正常反编译。 总而言之, VB Decompiler是一款出色的程序分析工具. 尤其是当您不慎丢失源代码并且需要部分恢复原工程的时候。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值