亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 邏輯算法 > 正文

(看雪教程) 第7章第2節動態跟蹤分析

2019-09-10 09:02:19
字體:
來源:轉載
供稿:網友

 
一、SOFTICE配制
二、VB dll 常用函數
  1 、字符處理函數
  2 、警告窗口函數
三、VB字串格式
四、oleaut32.dll簡介
五、Visual Basic 程序比較方法
一、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


一些常用字符串函數:

Val() 轉換字符串為數字 Rtrim$() 去除字符串左邊空格
Str$() 轉換數字為字符串 Trim$() 去除字符串兩邊空格
Left$() 按要求從左取字符。例如: Left$(Theodolite 4) = "Theo" Asc() 轉換字符為 ANSI 編碼 . 例如: Asc("A") = 65 注:65是ASCII碼的十進制
Ltrim$() 去除字符串左邊空格例如: Ltrim$ (" 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 #.

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 EAXEAX <-- 測試比較結果
:005BDC56 JNZ 005BDC64 <-- 不相等跳走


2 、警告窗口函數


rtcBeep rtcGetPresentDate (time API) rtcMsgBox

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


三、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 下查看內存中的字符串時看到情況有可能是: C R A C K Z

有些情況下應該用 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 8B7D0C mov edi dword ptr [ebp+0C]
:77A12A06 8B7508 mov esi dword ptr [ebp+08]
:77A12A09 8B4D10 mov ecx dword ptr [ebp+10]
:77A12A0C 33C0 xor eax eax
:77A12A0E F3 repz
:77A12A0F 66A7 cmpsw
:77A12A11 7405 je 77A12A18
:77A12A13 1BC0 sbb eax eax
:77A12A15 83D8FF sbb eax FFFFFFFF
:77A12A18 85C0 test eax eax
:77A12A1A 7F45 jg 77A12A61
:77A12A1C 7D16 jge 77A12A34
:77A12A1E 33C0 xor eax eax

看來有必要仔細看一下oleaut32.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 Message

Else

GoTo Wrong Message

End if


這是一種簡單保護方案,如果程序者用這種函數保護,用 SOFTICE 很容易攔截。


可用到的斷點:

i) __vbastrcomp or __vbastrcmp (下劃線是兩短線 _ 組成) <-- 串比較函數


注意:如果你是 crack VB6 程序,你應在兩斷點前增加 msvbvm60! 。

如: bpx msvbvm60!__vbastrcomp or bpx msvbvm60!__vbastrcmp


ii) 搜索特殊比較代碼(具體參考下一節)

如: 56578b7c24108b74240c8b4c241433c0f366a7


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 Message

Else

GoTo Wrong Message

End If


在這方法里, 1 中的兩個斷點將不起作用,因為程序不再用

__vbastrcomp 等 ...


有用斷點 :

i) __vbavartsteq <-- 測試變量是否相等


注意:如果你是 crack VB6 程序,你應在兩斷點前增加 msvbvm60! 。

例: bpx msvbvm60!__vbavartsteq


3) 長整型( long) 比較

這也是一個普通的方法。兩個變量(長整型)互相比較。

long 型數據類型是 4 字節( 32 位)整數,其范圍 -2147483648 到 2147483647 。因此該種方法存在只能比較數字的局限性。

一個此類型范例:


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 Message

End 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 ) : __vbai4str

iii) 字符串( 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) 除法 : __vbavaridiv <--Dividing 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) __vbafreeobj

iv) __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


=============================
看雪2000/2/21 整理 

一、SOFTICE配制
二、VB dll 常用函數
  1 、字符處理函數
  2 、警告窗口函數
三、VB字串格式
四、oleaut32.dll簡介
五、Visual Basic 程序比較方法
一、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


一些常用字符串函數:

Val() 轉換字符串為數字 Rtrim$() 去除字符串左邊空格
Str$() 轉換數字為字符串 Trim$() 去除字符串兩邊空格
Left$() 按要求從左取字符。例如: Left$(Theodolite 4) = "Theo" Asc() 轉換字符為 ANSI 編碼 . 例如: Asc("A") = 65 注:65是ASCII碼的十進制
Ltrim$() 去除字符串左邊空格例如: Ltrim$ (" 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 #.

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 EAXEAX <-- 測試比較結果
:005BDC56 JNZ 005BDC64 <-- 不相等跳走


2 、警告窗口函數


rtcBeep rtcGetPresentDate (time API) rtcMsgBox

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


三、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 下查看內存中的字符串時看到情況有可能是: C R A C K Z

有些情況下應該用 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 8B7D0C mov edi dword ptr [ebp+0C]
:77A12A06 8B7508 mov esi dword ptr [ebp+08]
:77A12A09 8B4D10 mov ecx dword ptr [ebp+10]
:77A12A0C 33C0 xor eax eax
:77A12A0E F3 repz
:77A12A0F 66A7 cmpsw
:77A12A11 7405 je 77A12A18
:77A12A13 1BC0 sbb eax eax
:77A12A15 83D8FF sbb eax FFFFFFFF
:77A12A18 85C0 test eax eax
:77A12A1A 7F45 jg 77A12A61
:77A12A1C 7D16 jge 77A12A34
:77A12A1E 33C0 xor eax eax

看來有必要仔細看一下oleaut32.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 Message

Else

GoTo Wrong Message

End if


這是一種簡單保護方案,如果程序者用這種函數保護,用 SOFTICE 很容易攔截。


可用到的斷點:

i) __vbastrcomp or __vbastrcmp (下劃線是兩短線 _ 組成) <-- 串比較函數


注意:如果你是 crack VB6 程序,你應在兩斷點前增加 msvbvm60! 。

如: bpx msvbvm60!__vbastrcomp or bpx msvbvm60!__vbastrcmp


ii) 搜索特殊比較代碼(具體參考下一節)

如: 56578b7c24108b74240c8b4c241433c0f366a7


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 Message

Else

GoTo Wrong Message

End If


在這方法里, 1 中的兩個斷點將不起作用,因為程序不再用

__vbastrcomp 等 ...


有用斷點 :

i) __vbavartsteq <-- 測試變量是否相等


注意:如果你是 crack VB6 程序,你應在兩斷點前增加 msvbvm60! 。

例: bpx msvbvm60!__vbavartsteq


3) 長整型( long) 比較

這也是一個普通的方法。兩個變量(長整型)互相比較。

long 型數據類型是 4 字節( 32 位)整數,其范圍 -2147483648 到 2147483647 。因此該種方法存在只能比較數字的局限性。

一個此類型范例:


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 Message

End 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 ) : __vbai4str

iii) 字符串( 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) 除法 : __vbavaridiv <--Dividing 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) __vbafreeobj

iv) __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


(編輯:天命孤獨)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲女人被黑人巨大进入al| 中文字幕日韩专区| 国产精品免费在线免费| 一本色道久久综合狠狠躁篇的优点| 成人免费看吃奶视频网站| 大量国产精品视频| 久久久久久久久久久91| 久久久视频免费观看| 日韩欧美在线观看视频| 欧美日韩高清区| 日韩视频精品在线| 国产成人涩涩涩视频在线观看| 亚洲女人天堂色在线7777| 国产欧美一区二区三区久久| 91国偷自产一区二区三区的观看方式| 国产精品狠色婷| 精品国产乱码久久久久酒店| 亚洲无限av看| 国产成人精品免高潮在线观看| 成人欧美一区二区三区黑人孕妇| 国产精品小说在线| 久久久久久999| 国产a∨精品一区二区三区不卡| 久热国产精品视频| 中文字幕精品一区二区精品| 成人网在线观看| 日韩中文字幕在线看| 亚洲性夜色噜噜噜7777| 色综合久久中文字幕综合网小说| 精品久久久久久电影| 欧美一乱一性一交一视频| 色香阁99久久精品久久久| 国产精品久久精品| 欧美成人免费在线观看| 日韩美女av在线免费观看| 国产成人免费91av在线| 91成品人片a无限观看| 日韩高清电影免费观看完整版| 日韩精品在线免费观看| 久久久久国色av免费观看性色| 欧美精品情趣视频| 亚洲人成电影网| 日韩视频免费中文字幕| 亚洲新中文字幕| 永久免费看mv网站入口亚洲| 555www成人网| 国产成人亚洲综合| 日韩亚洲欧美中文高清在线| 亚洲美女喷白浆| 久久精品中文字幕| 亚洲国产天堂久久国产91| 91亚洲va在线va天堂va国| 欧美日韩国产二区| 久久国产精品偷| 午夜伦理精品一区| 亚洲mm色国产网站| 欧美色视频日本版| 久久夜色精品国产亚洲aⅴ| 日韩欧美精品网址| 久久久久亚洲精品| 日韩免费观看网站| 伦伦影院午夜日韩欧美限制| 欧美国产视频一区二区| 亚洲国产高清高潮精品美女| 欧美日韩综合视频网址| 亚洲女人天堂网| 1769国产精品| 欧美区在线播放| 久久成人亚洲精品| 在线播放精品一区二区三区| 欧美成人免费在线观看| 成人两性免费视频| 日韩在线观看网址| 高清在线视频日韩欧美| 国产一区二区三区毛片| 亚洲欧美日本另类| 国产精品视频地址| 曰本色欧美视频在线| 国产在线日韩在线| 2020国产精品视频| 北条麻妃一区二区在线观看| 91欧美激情另类亚洲| www.亚洲男人天堂| 国产日韩欧美在线观看| 8x海外华人永久免费日韩内陆视频| 久久精视频免费在线久久完整在线看| 国产精品免费在线免费| 亚洲大胆人体视频| 国产欧美久久久久久| 国产精品久久久久久五月尺| 国产精品视频yy9099| 91日本在线视频| 91免费精品视频| 一本一本久久a久久精品牛牛影视| 亚洲精品视频在线观看视频| 欧美成人午夜激情| 在线观看国产成人av片| 97国产精品久久| 国外日韩电影在线观看| 欧美午夜视频一区二区| 亚洲天堂网在线观看| 亚洲女人天堂视频| 亚洲国产天堂久久综合网| 久久久久久成人| 日韩精品在线观| 亚洲免费一级电影| 久久精品国产96久久久香蕉| 亚洲新声在线观看| 国产精品一区二区av影院萌芽| 国产视频久久久久| 日韩亚洲欧美中文高清在线| 国模精品一区二区三区色天香| 亚洲一区二区久久久| 久久精品国产久精国产思思| 精品国产户外野外| 精品国产欧美一区二区五十路| 欧美激情a在线| 亚洲成人黄色网址| 欧美成年人视频网站欧美| 久久99久久久久久久噜噜| 国产精品高清免费在线观看| 欧美激情a∨在线视频播放| 91po在线观看91精品国产性色| 欧美午夜电影在线| 精品久久久国产精品999| 欧美高清在线视频观看不卡| 国产福利视频一区二区| 国模精品一区二区三区色天香| 日韩av在线免费观看一区| 日韩欧美亚洲成人| 91久久久久久久久| 97精品国产97久久久久久免费| 九色精品免费永久在线| 欧美人交a欧美精品| 欧美成在线观看| 91地址最新发布| 日本精品中文字幕| 亚洲自拍小视频免费观看| 欧美日本亚洲视频| 国产精品成人av性教育| 福利视频一区二区| 久久国产加勒比精品无码| 久久久久久久一区二区| 成人激情免费在线| 日韩成人av在线| 成人欧美在线观看| 日本在线精品视频| 一区二区三区动漫| 精品美女永久免费视频| 日本电影亚洲天堂| 亚洲欧美在线看| 亚洲精品自产拍| 一区二区欧美日韩视频| 亚洲精品456在线播放狼人| 黑人狂躁日本妞一区二区三区| 欧美在线观看网址综合| 欧美极品少妇与黑人| 日韩精品极品在线观看| 热久久视久久精品18亚洲精品| 久久久久国产精品免费| 亚洲电影中文字幕| 国产精品久久久久久久久久ktv| 国产精品免费久久久久久| 欧美性xxxx极品hd欧美风情|