驱动管家:安全、高效、精准的专业驱动下载站!

VB dll常用函数有哪些?Visual Basic程序比较方法

2018-03-17 10:56:18责编:llp   来源:驱动管家     人气:

一、SOFTICE 配制

虽然大部分 VB 程序仍调用 Win32 API 函数,但如想在 VB dll 运行库中设断的话,你就必须把 VB dll 运行库加入 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

一些常用字符串函数:

Val() 转换字符串为数字 Rtrim$() 去除字符串左边空格

Str$()转换数字为字符串 Trim$() 去除字符串两边空格

Left$()按要求从左取字符。例如:Left$(Theodolite, 4) = "Theo" Asc()转换字符为 ANSI 编码. 例如: Asc("A") = 65 注:65是ASCII码的十进制

Ltrim$() 去除字符串左边空格例如:Ltrim$Content$nbsp;(" Hello ") = "Hello " Chr$() 转换 ANSI 编码为字符 . 例如Chr$(65) = "A"

Right$() 按要求从右取字符 几个常用函数简介:

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 #.

O

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

3、 __vbastrcmp

例:

:005BDC32 CALL [MSVBVM50!__VbaFreeVar]

:005BDC38 MOV ESI,[EBP 08]

:005BDC3B PUSH ESI

:005BDC3E CALL [ECX 00000790] <-- 值返回到 EDX.

:005BDC44 MOV EDX,[ESI 4C] <-- 输入的号码,但倒转

:005BDC47 MOV EAX,[005E0078] <-- 正确号码

:005BDC4C PUSH EDX

:005BDC4D PUSH EAX <-- Push参数给 __vbaStrCmp.

:005BDC4E CALL [MSVBVM50!__vbaStrCmp] <-- Visual Basic 字符串比较

:005BDC54 TEST EAX,EAX <-- 测试比较结果

:005BDC56 JNZ 005BDC64 <-- 不相等跳走

2 、警告窗口函数rtcBeep, rtcGetPresentDate (time API),

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

三、VB字串格式  

在大部分 VB 程序中,我们能用 bpx Hmemcpy 命令设断,但是你将发现自己不久进入VBRUNxxx.DLL 运行库,很快陷入 Vb dll 中,在大多数情况下,你很难到达其 EXE 文件中的真正比较核心。你通常是依靠字符串的线索来跟踪程序,你们还应记得 VB ( VB4 以上)程序储存和比较字符是用 wide character 格式(本质是中在各字符间填 0x00)。

The MultiByteToWideChar( ) function maps a character string to a wide-character (Unicode) string. The character string mapped by this function is not necessarily from a multibyte character set. 

int MultiByteToWideChar(

UINT CodePage, // code page

DWORD dwFlags, // character-type options

LPCSTR lpMultiByteStr, // string to map

int cbMultiByte, // number of bytes in string

LPWSTR lpWideCharStr, // wide-character buffer

int cchWideChar // size of buffer

); 如:

原来字符串 : CRACKZ (43h 52h 41h 43h 4Bh 5Ah). Wide 字符串格式 : C R A C K Z (43h 00h 52h 00h 41h 00h 43h 00h 4Bh 00h 5Ah). 这时在 SOFTICE 下查看内存中的字符串时看到情况有可能是:有些情况下应该用 DL (长实型)命令,才能看到正确数字序号。( SOFTICE 默认时为 DB (字节型))

 在多数情况下,在 VB 中设置正确断点是较困难的。断点设置好后,尝试输入序列号,运行后,应返回 VBRUNxxx.DLL 里,现在查找寄存器 (EAX & EBX) 中的值,那里放有你输入字符串长度,如果没发现什么,你应按 ctrl D 再次返回到 VB dll 中另一处,继续查看,一直重复。  一但当你在寄存器中发现字符串长度时,你应一步一步注意观察,如果你幸运的话,你会发现输入字符串躺在寄存器或其显示附近内存里。这时你在 SOFTICE 里的数据窗口中用 ALT光标键滚动查找,说不定会发现正确序列号懒洋洋躺在那附近。

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

四、oleaut32.dll简介 (作者:dr0)

破解VB程序时,对vbrun*.dll(VB4、VB3版本)和msvbvm*.dll(VB5、VB6)强调得比较多,实际上VB程序的很多运算是在oleaut32.dll中完成的,这个dll提供了很多对VB中的Variant类型的变量进行操作的函数,主要是一系列VarXXX( ),其中有几个是用来比较字符串和数值的,如下: Addr:77A11AAE Ord: 176 (00B0h) Name: VarCmp

Addr:77A0E5D1 Ord: 311 (0137h) Name: VarCyCmp

Addr:77A0E5F8 Ord: 312 (0138h) Name: VarCyCmpR8

Addr:77A129CD Ord: 314 (013Ah) Name: VarBstrCmp

Addr:77A12958 Ord: 316 (013Ch) Name: VarR4CmpR8

Addr:77A13697 Ord: 204 (00CCh) Name: VarDecCmp

Addr:77A1298B Ord: 298 (012Ah) Name: VarDecCmpR8 这里有个小程序RAMQuota(www.stepnet.com.au),是用VB6写的,它使用上述函数中的VarBstrCmp( )比较注册码。该函数的关键指令如下:

:77A12A03 8B7D0Cmov edi, dword ptr [ebp 0C]

:77A12A06 8B7508mov esi, dword ptr [ebp 08]

:77A12A09 8B4D10mov ecx, dword ptr [ebp 10]

:77A12A0C 33C0xor eax, eax

:77A12A0E F3repz ;

:77A12A0F 66A7cmpsw

:77A12A11 7405je 77A12A18

:77A12A13 1BC0sbb eax, eax

:77A12A15 83D8FFsbb eax, FFFFFFFF

:77A12A18 85C0test eax, eax _2

:77A12A1A 7F45jg 77A12A61

:77A12A1C 7D16jge 77A12A34

:77A12A1E 33C0xor eax, eax

看来有必要仔细看一下oleaut32.dll

五、Visual Basic 程序比较方法 

VB dll常用函数有哪些?Visual Basic程序比较方法

 在Visual Basic 里有 8 种以上的方法检测正确的序列号 / 密码。我这里将谈谈这 8 种方法,它们都是较容易并用得较多。首先是最普通的 3 种:

1) 串(string) 比较

在这比较方法里,正确密码串如: "Correct Password" 和你输入的密码串如: "Entered Password" 比较。

串是由相邻的字符按顺序排列组成,一个串包括字母、数字、空格和标点符号。一个固定长度的串可储存 0 到 63K 字符。如是动态的串其储存字符个数可达 20 亿字符。

VB 串比较代码一般格式:If "Correct Password" = "Entered Password" then<-- 直接比较两个串字符

GoTo Correct MessageElse

GoTo Wrong MessageEnd if这是一种简单保护方案,如果程序者用这种函数保护,用 SOFTICE 很容易拦截。

可用到的断点:

i) __vbastrcomp or __vbastrcmp(下划线是两短线 _ 组成)<-- 串比较函数注意:如果你是 crack VB6 程序,你应在两断点前增加 msvbvm60! 。

如:bpx msvbvm60!__vbastrcomp or bpx msvbvm60!__vbastrcmp

ii) 搜索特殊比较代码(具体参考下一节) 如: 56,57,8b,7c,24,10,8b,74,24,0c,8b,4c,24,14,33,c0,f3,66,a7

2)变量(Variant)比较

在这方法中,两个变量(变量数据类型)互相比较。变量数据类型是一种特殊数据类型,包括数字、字符串或日期数据及一些用户定义的类型。这种类型储存数字长度是 16 字节或字符 22 字节(加上串长度)。

一个范例代码:

Dim correct As Variant, entered As Variant<-- 定义 "correct" and "entered"作为变量 correct = Correct Password<-- 设置"correct" 放置 "Correct Password"entered = Text1.Text<-- 设置"entered"作为你输入密码

If correct = entered Then<-- 用变量方法比较

GoTo Correct MessageElse GoTo Wrong Message

End If 在这方法里, 1 中的两个断点将不起作用,因为程序不再用__vbastrcomp等 ...

有用断点:

i) __vbavartsteq<-- 测试变量是否相等 %

注意:如果你是 crack VB6 程序,你应在两断点前增加。 例:bpx msvbvm60!__vbavartsteq3) 长整型( long) 比较 ;这也是一个普通的方法。两个变量(长整型)互相比较。long 型数据类型是 4 字节( 32 位)整数,其范围 -2,147,483,648到2,147,483,647 。因此该种方法存在只能比较数字的局限性。 一个此类型范例: Dim correct As Long, entered As Long<-- 定义"correct"和"entered"作为长整型 correct = 12345<-- 设置 "correct" 为正确密码

entered = Text1.Text<-- 设置"entered" 为输入密码

If entered = correct Then<-- 用长整型方法比较

GoTo Correct Message Else GoTo Wrong MessageEnd If

对这种类型没有专门的断点函数,因为其数据比较是在主程序里而不是在 VB dll 中。

--------------------------------------------------------------------------------另外还有其它的 5 种方法,如果下面的方法你听起来有点怪或不太可能,你可忽略它们,但记得 VB 保护方式不限于上述三种。 4)单精度实数(Single)比较 5)双精度(Double)比较

6) 整型(Integer)比较

7)字节(Byte)比较8) CURRENCY型比较 上述8个比较方式是不是意味着我们每次能中断在其单个某一类型的比较程序里?回答是否定的。这是因为程序有可能同时采用两种方法来比较,如Currency和String, Variant 和 Long 等... 一些可能用上的断点

1) 数据类型转换

i)字符串( String )转换字节( Byte )或整型( Integer ) : __vbai2str

ii)字符串( String )转长型( Long ) : __vbai4striii)字符串( String )转换单精度型( Single ) : __vbar4str

iv)字符串( String )转换双精度型( Double ) : __vbar8str

v) 字符串( String )转 Currency 型 : VarCyFromStr ( 适合 VB6.你的 WINICE.DAT 必须有 OLEAUT32.DLL)vi) 整型( Integer )转字符串型( String ) : VarBstrFromI2 ( 适合 VB6.你的 WINICE.DAT 必须 OLEAUT32.DLL)2) 移动数据

i) 字符串( String )到内存 : __vbaStrCopy ii) 变量( Variant )到内存 : __vbaVarCopy or __vbaVarMove

3)运算符

i) 加法 : __vbavaradd<-- 增加变量

ii) 减法 : __vbavarsub<-- 减去变量iii)乘法 : __vbavarmul<-- 乘以变量

iv)除法 : __vbavarip<--piding Variant to get answer in Integer

v) XOR: __vbavarxor<--XOR 4)其它类i) __vbavarfornext<--Used in codes where there is a For... Next... Statement (Loop)ii) __vbafreestr

iii) __vbafreeobjiv) __vbastrvarval<--Get the value from a specific location in a String

v) multibytetowidechar

vi) rtcMsgBox

vii) __vbavarcat<--Joining 2 Variants together viii) __vbafreevar

ix) __vbaobjset

  • 渗透获取整个服务器群权限的实例

    渗透获取整个服务器群权限的实例

    开局:入手点是一个注射点:sa,内网, 轻车熟路写个vbs脚本,下好lcx,转发端口。以下是引用片段:down vbsiLocal = LCase(WScript Arguments(1))iRemote = LCase(W

    详情2018-03-04 15:19:18责编:llp   来源:驱动管家     
  • 什么是数字遗物?人死了各种私人账号如何处理?

    什么是数字遗物?人死了各种私人账号如何处理?

    人总有一死,现在想想我的八位qq那么值钱,等我死了岂不是更值钱了?我的qq号以后怎么办呢,更别说自媒体管理员,几百万人的粉丝账号怎么办?你考虑过死了以后你的私人账号怎么办吗?那你在离开人世之前,考虑过

    详情2018-02-03 16:19:03责编:llp   来源:驱动管家     
  • 合并一张php一句话图片马的方法 edjpgcom怎么使用?

    合并一张php一句话图片马的方法 edjpgcom怎么使用?

    以目前流行的PHP为例:先合并一张PHP一句话图片马,合并方法:①、DOS合并:copy 1 gif b + 1 txt a php gif②、用edjpgcom,进行图片和一句话木马的合并,一句话代码为图片随便找一张 【顺带着说一下edjpg

    详情2018-02-09 10:31:58责编:llp   来源:驱动管家     
  • openssh存在三大安全漏洞 这些漏洞怎么修复?

    openssh存在三大安全漏洞 这些漏洞怎么修复?

    一:漏洞分析最近进行linux系统安全加固分析,进行漏洞扫描扫描分析,不扫不知道,一扫吓一跳,linux系统服务器的OPENSSH存在3大安全漏洞,祥如下:1:OpenSSH GSSAPI 处理远端代码执行漏洞漏洞分类 守护进程

    详情2018-01-24 15:38:43责编:llp   来源:驱动管家     
  • sql注入的作用 如何避免SQL注入?

    sql注入的作用 如何避免SQL注入?

    本文详细讲述了 sql注入的原理及防范技巧,目的是让初学者利用SQL注入技术来解决他们面临的问题, 成功的使用它们,并在这种攻击中保护自己。希望能对大家有所帮助。一、 介绍当一台机器只打开了80端口, 你最依

    详情2018-03-09 15:21:26责编:llp   来源:驱动管家     
  • 字符功能调用类介绍 bios中断目录控制功能描述

    字符功能调用类介绍 bios中断目录控制功能描述

    中断INT 21H :1、字符功能调用类(Character-Oriented Function)01H、07H和08H —从标准输入设备输入字符02H —字符输出03H —辅助设备的输入04H —辅助设备的输出05H —打印输出06H —控制台输入 输出09

    详情2018-02-26 17:48:21责编:llp   来源:驱动管家     
  • 安全的web目录怎么弄?如何用mcafee设置安全web目录?

    安全的web目录怎么弄?如何用mcafee设置安全web目录?

    殊不知此站大有文章,虽手握服务器权限,但仍对Web目录无可奈何 在下一向积极好学,碰到如此变态之服务器,必然是要扒皮抽筋找其原因 首先查看目录权限,发现并无什么特别之处,更何况我现在是管理员权限,应该是畅通无

    详情2018-02-23 14:27:07责编:llp   来源:驱动管家     
  • 防止用户隐私泄露要学会禁用cookie功能

    防止用户隐私泄露要学会禁用cookie功能

    随着网络安全知识的普及,越来越多的用户知道了Cookie功能会造成用户的隐私泄露,Cookie实际上是一些小的数据包,里面包含着关于你网上冲浪习惯的信息,可以方便你以后的操作,但随后就为因特网上了解Cookie的站

    详情2018-03-03 14:02:21责编:llp   来源:驱动管家     
  • 入侵检测系统suricata ids怎么在linux服务器上安装?

    入侵检测系统suricata ids怎么在linux服务器上安装?

    本篇文章将演示如何在Linux服务器上安装和配置Suricata IDS。在Linux上安装Suricata IDS不妨用源代码构建Suricata。你先要安装几个所需的依赖项,如下所示。在Debian、Ubuntu或Linux Mint上安装依赖项$ sudo

    详情2018-01-25 17:08:31责编:llp   来源:驱动管家     
  • 管家婆软件的漏洞分析:该漏洞很容易被入侵

    管家婆软件的漏洞分析:该漏洞很容易被入侵

    管家婆搞活动的页面,选漂亮的财务MM和帅蝈蝈,获奖的出国旅游呀!!!俺向二师兄保证绝对木有看MM的手机号。。。http: www grasp com cn talent TalentDetail aspx?c=bb7f3776-61e0-4733-9645-28927d7eebf8注射

    详情2018-01-22 14:56:25责编:llp   来源:驱动管家