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

首頁(yè) > 學(xué)院 > 邏輯算法 > 正文

(看雪教程) 第7章第2節(jié)動(dòng)態(tài)跟蹤分析

2019-09-10 09:02:19
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

 
一、SOFTICE配制
二、VB dll 常用函數(shù)
  1 、字符處理函數(shù)
  2 、警告窗口函數(shù)
三、VB字串格式
四、oleaut32.dll簡(jiǎn)介
五、Visual Basic 程序比較方法
一、SOFTICE 配制


 雖然大部分 VB 程序仍調(diào)用 Win32 API 函數(shù),但如想在 VB dll 運(yùn)行庫(kù)中設(shè)斷的話,你就必須把 VB dll 運(yùn)行庫(kù)加入 SOFTICE 配制里去。具體你可參考第五課中的《 SOFTICE 安裝及使用》。

下例是在 win95/98 下你把相關(guān)的 VB DLL 運(yùn)行庫(kù)加入 winice.dat 配制文件里。 ( 部分 )


; 注意分號(hào)后是描述語(yǔ)言,不被執(zhí)行。每次只裝載需要的一種 VB dll ,最好不要同時(shí)裝載兩個(gè)以上,把要裝載那種 VB dll 那一行的分號(hào)去掉,重新啟動(dòng)即可。另外,判斷軟件是何種 VB dll 有幾種方法,最直接一種用 WDasm89 查看,還有一種方法是用十六進(jìn)制工具打開(kāi)程序觀察。或用 SOFTICE 跟進(jìn)去(用 bpx hmemcpy) ,稍轉(zhuǎn)一圈,你觀察一下調(diào)試窗口領(lǐng)空處會(huì)出現(xiàn)何種 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) 較少見(jiàn)
; EXP=c:/windows/system/vbrun300.dll ; Visual Basic 3


這樣配制好后,重新啟動(dòng),就可設(shè) VB 運(yùn)行庫(kù)中各函數(shù)的斷點(diǎn)了。

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

二、VB dll 常用函數(shù)

1 、字符處理函數(shù)

MultiByteToWideChar rtcR8ValFromBstr WideCharToMultiByte __vbaStrCmp __vbaStrComp __vbaStrCopy __vbaStrMove __vbaVarTstNe .

注意:這些函數(shù)前的下劃線 __ 是由兩根短線 _ 組成的,不要弄錯(cuò)。 如果你是 crack VB6 程序,你應(yīng)在斷點(diǎn)前增加 msvbvm60! 。 如: bpx msvbvm60!__vbastrcomp


一些常用字符串函數(shù):

Val() 轉(zhuǎn)換字符串為數(shù)字 Rtrim$() 去除字符串左邊空格
Str$() 轉(zhuǎn)換數(shù)字為字符串 Trim$() 去除字符串兩邊空格
Left$() 按要求從左取字符。例如: Left$(Theodolite 4) = "Theo" Asc() 轉(zhuǎn)換字符為 ANSI 編碼 . 例如: Asc("A") = 65 注:65是ASCII碼的十進(jìn)制
Ltrim$() 去除字符串左邊空格例如: Ltrim$ (" Hello ") = "Hello " Chr$() 轉(zhuǎn)換 ANSI 編碼為字符 . 例如 Chr$(65) = "A"
Right$() 按要求從右取字符

幾個(gè)常用函數(shù)簡(jiǎn)介:

1、 __vbavartstne

如是在VB5中CALL MSVBVM50!___vbavartstne

進(jìn)去后在0F04E351你將看到:
push dword ptr [ebp+0c] ;Push address *真* serial 的地址
push dword ptr [ebp+10] ;Push address 你輸入的serial地址

下命令:d ebp+0c
你將在數(shù)據(jù)窗口看到 4字節(jié)地址倒序排列,你再次D 地址(己糾正順序的), 就可看到序列號(hào)了。


2、 __vbaR8Str

在 VB5中是如下情況:
Push ebp-20
Call MSVBUM50.__vbaR8Str ;轉(zhuǎn)換 string 到 Integer/Real
fcomp qword ptr [00401028] ;數(shù)據(jù)比較

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

DL 是顯示 Long/real 型,SOFTICE默認(rèn)時(shí)是DB狀態(tài)。


3、 __vbastrcmp

例:


:005BDC32 CALL [MSVBVM50!__VbaFreeVar]
:005BDC38 MOV ESI[EBP+08]
:005BDC3B PUSH ESI
:005BDC3E CALL [ECX+00000790] <-- 值返回到 EDX.
:005BDC44 MOV EDX[ESI+4C] <-- 輸入的號(hào)碼,但倒轉(zhuǎn)
:005BDC47 MOV EAX[005E0078] <-- 正確號(hào)碼
:005BDC4C PUSH EDX
:005BDC4D PUSH EAX <-- Push參數(shù)給 __vbaStrCmp.
:005BDC4E CALL [MSVBVM50!__vbaStrCmp] <-- Visual Basic 字符串比較
:005BDC54 TEST EAXEAX <-- 測(cè)試比較結(jié)果
:005BDC56 JNZ 005BDC64 <-- 不相等跳走


2 、警告窗口函數(shù)


rtcBeep rtcGetPresentDate (time API) rtcMsgBox

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


三、VB字串格式

 在大部分 VB 程序中,我們能用 bpx Hmemcpy 命令設(shè)斷,但是你將發(fā)現(xiàn)自己不久進(jìn)入 VBRUNxxx.DLL 運(yùn)行庫(kù),很快陷入 Vb dll 中,在大多數(shù)情況下,你很難到達(dá)其 EXE 文件中的真正比較核心。你通常是依靠字符串的線索來(lái)跟蹤程序,你們還應(yīng)記得 VB ( VB4 以上) 程序儲(chǔ)存和比較字符是用 wide character 格式(本質(zhì)是中在各字符間填 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
);

如:


原來(lái)字符串 : 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).


這時(shí)在 SOFTICE 下查看內(nèi)存中的字符串時(shí)看到情況有可能是: C R A C K Z

有些情況下應(yīng)該用 DL (長(zhǎng)實(shí)型)命令,才能看到正確數(shù)字序號(hào)。( SOFTICE 默認(rèn)時(shí)為 DB (字節(jié)型))

 在多數(shù)情況下,在 VB 中設(shè)置正確斷點(diǎn)是較困難的。斷點(diǎn)設(shè)置好后,嘗試輸入序列號(hào),運(yùn)行后,應(yīng)返回 VBRUNxxx.DLL 里,現(xiàn)在查找寄存器 (EAX & EBX) 中的值,那里放有你輸入字符串長(zhǎng)度,如果沒(méi)發(fā)現(xiàn)什么,你應(yīng)按 ctrl+D 再次返回到 VB dll 中另一處 ,繼續(xù)查看,一直重復(fù)。

 一但當(dāng)你在寄存器中發(fā)現(xiàn)字符串長(zhǎng)度時(shí),你應(yīng)一步一步注意觀察,如果你幸運(yùn)的話,你會(huì)發(fā)現(xiàn)輸入字符串躺在寄存器或其顯示附近內(nèi)存里。這時(shí)你在 SOFTICE 里的數(shù)據(jù)窗口中用 ALT+ 光標(biāo)鍵滾動(dòng)查找,說(shuō)不定會(huì)發(fā)現(xiàn)正確序列號(hào)懶洋洋躺在那附近。

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

四、oleaut32.dll簡(jiǎn)介 (作者:dr0)

破解VB程序時(shí),對(duì)vbrun*.dll(VB4、VB3版本)和msvbvm*.dll(VB5、VB6)強(qiáng)調(diào)得比較多,實(shí)際上VB程序的很多運(yùn)算是在oleaut32.dll中完成的,這個(gè)dll提供了很多對(duì)VB中的Variant類型的變量進(jìn)行操作的函數(shù),主要是一系列VarXXX( ),其中有幾個(gè)是用來(lái)比較字符串和數(shù)值的,如下:

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

這里有個(gè)小程序RAMQuota(www.stepnet.com.au),是用VB6寫(xiě)的,它使用上述函數(shù)中的VarBstrCmp( )比較注冊(cè)碼。該函數(shù)的關(guān)鍵指令如下:

: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

看來(lái)有必要仔細(xì)看一下oleaut32.dll


五、Visual Basic 程序比較方法

在 Visual Basic 里有 8 種以上的方法檢測(cè)正確的序列號(hào) / 密碼。我這里將談?wù)勥@ 8 種方法,它們都是較容易并用得較多。首先是最普通的 3 種:

1) 串(string) 比較

在這比較方法里,正確密碼串如: "Correct Password" 和你輸入的密碼串如: "Entered Password" 比較。

串是由相鄰的字符按順序排列組成,一個(gè)串包括字母、數(shù)字、空格和標(biāo)點(diǎn)符號(hào)。一個(gè)固定長(zhǎng)度的串可儲(chǔ)存 0 到 63K 字符。如是動(dòng)態(tài)的串其儲(chǔ)存字符個(gè)數(shù)可達(dá) 20 億字符。

VB 串比較代碼一般格式:


If "Correct Password" = "Entered Password" then <-- 直接比較兩個(gè)串字符

GoTo Correct Message

Else

GoTo Wrong Message

End if


這是一種簡(jiǎn)單保護(hù)方案,如果程序者用這種函數(shù)保護(hù),用 SOFTICE 很容易攔截。


可用到的斷點(diǎn):

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


注意:如果你是 crack VB6 程序,你應(yīng)在兩斷點(diǎn)前增加 msvbvm60! 。

如: bpx msvbvm60!__vbastrcomp or bpx msvbvm60!__vbastrcmp


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

如: 56578b7c24108b74240c8b4c241433c0f366a7


2) 變量(Variant)比較

在這方法中,兩個(gè)變量(變量數(shù)據(jù)類型)互相比較。變量數(shù)據(jù)類型是一種特殊數(shù)據(jù)類型,包括數(shù)字、字符串或日期數(shù)據(jù)及一些用戶定義的類型。這種類型儲(chǔ)存數(shù)字長(zhǎng)度是 16 字節(jié)或字符 22 字節(jié)(加上串長(zhǎng)度)。


一個(gè)范例代碼


Dim correct As Variant entered As Variant <-- 定義 "correct" and "entered" 作為變量

correct = Correct Password <-- 設(shè)置 "correct" 放置 "Correct Password"

entered = Text1.Text <-- 設(shè)置 "entered" 作為你輸入密碼

If correct = entered Then <-- 用變量方法比較

GoTo Correct Message

Else

GoTo Wrong Message

End If


在這方法里, 1 中的兩個(gè)斷點(diǎn)將不起作用,因?yàn)槌绦虿辉儆?

__vbastrcomp 等 ...


有用斷點(diǎn) :

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


注意:如果你是 crack VB6 程序,你應(yīng)在兩斷點(diǎn)前增加 msvbvm60! 。

例: bpx msvbvm60!__vbavartsteq


3) 長(zhǎng)整型( long) 比較

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

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

一個(gè)此類型范例:


Dim correct As Long entered As Long <-- 定義 "correct" 和 "entered" 作為長(zhǎng)整型

correct = 12345 <-- 設(shè)置 "correct" 為正確密碼

entered = Text1.Text <-- 設(shè)置 "entered" 為輸入密碼

If entered = correct Then <-- 用長(zhǎng)整型方法比較

GoTo Correct Message

Else

GoTo Wrong Message

End If


對(duì)這種類型沒(méi)有專門的斷點(diǎn)函數(shù),因?yàn)槠鋽?shù)據(jù)比較是在主程序里而不是在 VB dll 中。


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

另外還有其它的 5 種方法,如果下面的方法你聽(tīng)起來(lái)有點(diǎn)怪或不太可能,你可忽略它們,但記得 VB 保護(hù)方式不限于上述三種。


4) 單精度實(shí)數(shù)(Single)比較


5) 雙精度(Double)比較


6) 整型(Integer)比較


7) 字節(jié)(Byte)比較


8) CURRENCY 型比較


上述8個(gè)比較方式是不是意味著我們每次能中斷在其單個(gè)某一類型的比較程序里?回答是否定的。這是因?yàn)槌绦蛴锌赡芡瑫r(shí)采用兩種方法來(lái)比較,如Currency和String Variant 和 Long 等...

一些可能用上的斷點(diǎn)


1) 數(shù)據(jù)類型轉(zhuǎn)換

i) 字符串( String )轉(zhuǎn)換字節(jié)( Byte )或整型( Integer ) : __vbai2str

ii) 字符串( String )轉(zhuǎn)長(zhǎng)型( Long ) : __vbai4str

iii) 字符串( String )轉(zhuǎn)換單精度型( Single ) : __vbar4str

iv) 字符串( String )轉(zhuǎn)換雙精度型( Double ) : __vbar8str

v) 字符串( String )轉(zhuǎn) Currency 型 : VarCyFromStr ( 適合 VB6. 你的 WINICE.DAT 必須有 OLEAUT32.DLL)

vi) 整型( Integer )轉(zhuǎn)字符串型( String ) : VarBstrFromI2 ( 適合 VB6. 你的 WINICE.DAT 必須 OLEAUT32.DLL)


2) 移動(dòng)數(shù)據(jù)

i) 字符串( String )到內(nèi)存 : __vbaStrCopy

ii) 變量( Variant )到內(nèi)存 : __vbaVarCopy or __vbaVarMove


3) 運(yùn)算符

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

 雖然大部分 VB 程序仍調(diào)用 Win32 API 函數(shù),但如想在 VB dll 運(yùn)行庫(kù)中設(shè)斷的話,你就必須把 VB dll 運(yùn)行庫(kù)加入 SOFTICE 配制里去。具體你可參考第五課中的《 SOFTICE 安裝及使用》。

下例是在 win95/98 下你把相關(guān)的 VB DLL 運(yùn)行庫(kù)加入 winice.dat 配制文件里。 ( 部分 )


; 注意分號(hào)后是描述語(yǔ)言,不被執(zhí)行。每次只裝載需要的一種 VB dll ,最好不要同時(shí)裝載兩個(gè)以上,把要裝載那種 VB dll 那一行的分號(hào)去掉,重新啟動(dòng)即可。另外,判斷軟件是何種 VB dll 有幾種方法,最直接一種用 WDasm89 查看,還有一種方法是用十六進(jìn)制工具打開(kāi)程序觀察?;蛴?SOFTICE 跟進(jìn)去(用 bpx hmemcpy) ,稍轉(zhuǎn)一圈,你觀察一下調(diào)試窗口領(lǐng)空處會(huì)出現(xiàn)何種 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) 較少見(jiàn)
; EXP=c:/windows/system/vbrun300.dll ; Visual Basic 3


這樣配制好后,重新啟動(dòng),就可設(shè) VB 運(yùn)行庫(kù)中各函數(shù)的斷點(diǎn)了。

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

二、VB dll 常用函數(shù)

1 、字符處理函數(shù)

MultiByteToWideChar rtcR8ValFromBstr WideCharToMultiByte __vbaStrCmp __vbaStrComp __vbaStrCopy __vbaStrMove __vbaVarTstNe .

注意:這些函數(shù)前的下劃線 __ 是由兩根短線 _ 組成的,不要弄錯(cuò)。 如果你是 crack VB6 程序,你應(yīng)在斷點(diǎn)前增加 msvbvm60! 。 如: bpx msvbvm60!__vbastrcomp


一些常用字符串函數(shù):

Val() 轉(zhuǎn)換字符串為數(shù)字 Rtrim$() 去除字符串左邊空格
Str$() 轉(zhuǎn)換數(shù)字為字符串 Trim$() 去除字符串兩邊空格
Left$() 按要求從左取字符。例如: Left$(Theodolite 4) = "Theo" Asc() 轉(zhuǎn)換字符為 ANSI 編碼 . 例如: Asc("A") = 65 注:65是ASCII碼的十進(jìn)制
Ltrim$() 去除字符串左邊空格例如: Ltrim$ (" Hello ") = "Hello " Chr$() 轉(zhuǎn)換 ANSI 編碼為字符 . 例如 Chr$(65) = "A"
Right$() 按要求從右取字符

幾個(gè)常用函數(shù)簡(jiǎn)介:

1、 __vbavartstne

如是在VB5中CALL MSVBVM50!___vbavartstne

進(jìn)去后在0F04E351你將看到:
push dword ptr [ebp+0c] ;Push address *真* serial 的地址
push dword ptr [ebp+10] ;Push address 你輸入的serial地址

下命令:d ebp+0c
你將在數(shù)據(jù)窗口看到 4字節(jié)地址倒序排列,你再次D 地址(己糾正順序的), 就可看到序列號(hào)了。


2、 __vbaR8Str

在 VB5中是如下情況:
Push ebp-20
Call MSVBUM50.__vbaR8Str ;轉(zhuǎn)換 string 到 Integer/Real
fcomp qword ptr [00401028] ;數(shù)據(jù)比較

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

DL 是顯示 Long/real 型,SOFTICE默認(rèn)時(shí)是DB狀態(tài)。


3、 __vbastrcmp

例:


:005BDC32 CALL [MSVBVM50!__VbaFreeVar]
:005BDC38 MOV ESI[EBP+08]
:005BDC3B PUSH ESI
:005BDC3E CALL [ECX+00000790] <-- 值返回到 EDX.
:005BDC44 MOV EDX[ESI+4C] <-- 輸入的號(hào)碼,但倒轉(zhuǎn)
:005BDC47 MOV EAX[005E0078] <-- 正確號(hào)碼
:005BDC4C PUSH EDX
:005BDC4D PUSH EAX <-- Push參數(shù)給 __vbaStrCmp.
:005BDC4E CALL [MSVBVM50!__vbaStrCmp] <-- Visual Basic 字符串比較
:005BDC54 TEST EAXEAX <-- 測(cè)試比較結(jié)果
:005BDC56 JNZ 005BDC64 <-- 不相等跳走


2 、警告窗口函數(shù)


rtcBeep rtcGetPresentDate (time API) rtcMsgBox

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


三、VB字串格式

 在大部分 VB 程序中,我們能用 bpx Hmemcpy 命令設(shè)斷,但是你將發(fā)現(xiàn)自己不久進(jìn)入 VBRUNxxx.DLL 運(yùn)行庫(kù),很快陷入 Vb dll 中,在大多數(shù)情況下,你很難到達(dá)其 EXE 文件中的真正比較核心。你通常是依靠字符串的線索來(lái)跟蹤程序,你們還應(yīng)記得 VB ( VB4 以上) 程序儲(chǔ)存和比較字符是用 wide character 格式(本質(zhì)是中在各字符間填 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
);

如:


原來(lái)字符串 : 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).


這時(shí)在 SOFTICE 下查看內(nèi)存中的字符串時(shí)看到情況有可能是: C R A C K Z

有些情況下應(yīng)該用 DL (長(zhǎng)實(shí)型)命令,才能看到正確數(shù)字序號(hào)。( SOFTICE 默認(rèn)時(shí)為 DB (字節(jié)型))

 在多數(shù)情況下,在 VB 中設(shè)置正確斷點(diǎn)是較困難的。斷點(diǎn)設(shè)置好后,嘗試輸入序列號(hào),運(yùn)行后,應(yīng)返回 VBRUNxxx.DLL 里,現(xiàn)在查找寄存器 (EAX & EBX) 中的值,那里放有你輸入字符串長(zhǎng)度,如果沒(méi)發(fā)現(xiàn)什么,你應(yīng)按 ctrl+D 再次返回到 VB dll 中另一處 ,繼續(xù)查看,一直重復(fù)。

 一但當(dāng)你在寄存器中發(fā)現(xiàn)字符串長(zhǎng)度時(shí),你應(yīng)一步一步注意觀察,如果你幸運(yùn)的話,你會(huì)發(fā)現(xiàn)輸入字符串躺在寄存器或其顯示附近內(nèi)存里。這時(shí)你在 SOFTICE 里的數(shù)據(jù)窗口中用 ALT+ 光標(biāo)鍵滾動(dòng)查找,說(shuō)不定會(huì)發(fā)現(xiàn)正確序列號(hào)懶洋洋躺在那附近。

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

四、oleaut32.dll簡(jiǎn)介 (作者:dr0)

破解VB程序時(shí),對(duì)vbrun*.dll(VB4、VB3版本)和msvbvm*.dll(VB5、VB6)強(qiáng)調(diào)得比較多,實(shí)際上VB程序的很多運(yùn)算是在oleaut32.dll中完成的,這個(gè)dll提供了很多對(duì)VB中的Variant類型的變量進(jìn)行操作的函數(shù),主要是一系列VarXXX( ),其中有幾個(gè)是用來(lái)比較字符串和數(shù)值的,如下:

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

這里有個(gè)小程序RAMQuota(www.stepnet.com.au),是用VB6寫(xiě)的,它使用上述函數(shù)中的VarBstrCmp( )比較注冊(cè)碼。該函數(shù)的關(guān)鍵指令如下:

: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

看來(lái)有必要仔細(xì)看一下oleaut32.dll


五、Visual Basic 程序比較方法

在 Visual Basic 里有 8 種以上的方法檢測(cè)正確的序列號(hào) / 密碼。我這里將談?wù)勥@ 8 種方法,它們都是較容易并用得較多。首先是最普通的 3 種:

1) 串(string) 比較

在這比較方法里,正確密碼串如: "Correct Password" 和你輸入的密碼串如: "Entered Password" 比較。

串是由相鄰的字符按順序排列組成,一個(gè)串包括字母、數(shù)字、空格和標(biāo)點(diǎn)符號(hào)。一個(gè)固定長(zhǎng)度的串可儲(chǔ)存 0 到 63K 字符。如是動(dòng)態(tài)的串其儲(chǔ)存字符個(gè)數(shù)可達(dá) 20 億字符。

VB 串比較代碼一般格式:


If "Correct Password" = "Entered Password" then <-- 直接比較兩個(gè)串字符

GoTo Correct Message

Else

GoTo Wrong Message

End if


這是一種簡(jiǎn)單保護(hù)方案,如果程序者用這種函數(shù)保護(hù),用 SOFTICE 很容易攔截。


可用到的斷點(diǎn):

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


注意:如果你是 crack VB6 程序,你應(yīng)在兩斷點(diǎn)前增加 msvbvm60! 。

如: bpx msvbvm60!__vbastrcomp or bpx msvbvm60!__vbastrcmp


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

如: 56578b7c24108b74240c8b4c241433c0f366a7


2) 變量(Variant)比較

在這方法中,兩個(gè)變量(變量數(shù)據(jù)類型)互相比較。變量數(shù)據(jù)類型是一種特殊數(shù)據(jù)類型,包括數(shù)字、字符串或日期數(shù)據(jù)及一些用戶定義的類型。這種類型儲(chǔ)存數(shù)字長(zhǎng)度是 16 字節(jié)或字符 22 字節(jié)(加上串長(zhǎng)度)。


一個(gè)范例代碼


Dim correct As Variant entered As Variant <-- 定義 "correct" and "entered" 作為變量

correct = Correct Password <-- 設(shè)置 "correct" 放置 "Correct Password"

entered = Text1.Text <-- 設(shè)置 "entered" 作為你輸入密碼

If correct = entered Then <-- 用變量方法比較

GoTo Correct Message

Else

GoTo Wrong Message

End If


在這方法里, 1 中的兩個(gè)斷點(diǎn)將不起作用,因?yàn)槌绦虿辉儆?

__vbastrcomp 等 ...


有用斷點(diǎn) :

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


注意:如果你是 crack VB6 程序,你應(yīng)在兩斷點(diǎn)前增加 msvbvm60! 。

例: bpx msvbvm60!__vbavartsteq


3) 長(zhǎng)整型( long) 比較

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

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

一個(gè)此類型范例:


Dim correct As Long entered As Long <-- 定義 "correct" 和 "entered" 作為長(zhǎng)整型

correct = 12345 <-- 設(shè)置 "correct" 為正確密碼

entered = Text1.Text <-- 設(shè)置 "entered" 為輸入密碼

If entered = correct Then <-- 用長(zhǎng)整型方法比較

GoTo Correct Message

Else

GoTo Wrong Message

End If


對(duì)這種類型沒(méi)有專門的斷點(diǎn)函數(shù),因?yàn)槠鋽?shù)據(jù)比較是在主程序里而不是在 VB dll 中。


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

另外還有其它的 5 種方法,如果下面的方法你聽(tīng)起來(lái)有點(diǎn)怪或不太可能,你可忽略它們,但記得 VB 保護(hù)方式不限于上述三種。


4) 單精度實(shí)數(shù)(Single)比較


5) 雙精度(Double)比較


6) 整型(Integer)比較


7) 字節(jié)(Byte)比較


8) CURRENCY 型比較


上述8個(gè)比較方式是不是意味著我們每次能中斷在其單個(gè)某一類型的比較程序里?回答是否定的。這是因?yàn)槌绦蛴锌赡芡瑫r(shí)采用兩種方法來(lái)比較,如Currency和String Variant 和 Long 等...

一些可能用上的斷點(diǎn)


1) 數(shù)據(jù)類型轉(zhuǎn)換

i) 字符串( String )轉(zhuǎn)換字節(jié)( Byte )或整型( Integer ) : __vbai2str

ii) 字符串( String )轉(zhuǎn)長(zhǎng)型( Long ) : __vbai4str

iii) 字符串( String )轉(zhuǎn)換單精度型( Single ) : __vbar4str

iv) 字符串( String )轉(zhuǎn)換雙精度型( Double ) : __vbar8str

v) 字符串( String )轉(zhuǎn) Currency 型 : VarCyFromStr ( 適合 VB6. 你的 WINICE.DAT 必須有 OLEAUT32.DLL)

vi) 整型( Integer )轉(zhuǎn)字符串型( String ) : VarBstrFromI2 ( 適合 VB6. 你的 WINICE.DAT 必須 OLEAUT32.DLL)


2) 移動(dòng)數(shù)據(jù)

i) 字符串( String )到內(nèi)存 : __vbaStrCopy

ii) 變量( Variant )到內(nèi)存 : __vbaVarCopy or __vbaVarMove


3) 運(yùn)算符

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


(編輯:天命孤獨(dú))

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

久久久www成人免费精品张筱雨| 国产99久久久国产精品| 吞精囗交69激情欧美| 国产精品久久精品视| 日本日本19xxxⅹhd乱影响| 水蜜桃一区二区| 国产精一品亚洲二区在线视频| 欧美美女直播网站| 国产性一级片| 亚洲精品国产精品粉嫩| 99er在线视频| 无码人妻精品一区二区三区温州| 无码国产伦一区二区三区视频| 爱福利在线视频| 性色av一区二区三区红粉影视| 24小时成人在线视频| 野外做受又硬又粗又大视频√| 男人操女人逼免费视频| 精品国产一区二区三区av性色| 亚洲永久精品国产| 极品美女销魂一区二区三区免费| 欧美成人免费观看| 国产自产精品| 福利电影一区二区| 最近看过的日韩成人| 亚洲黄色免费在线观看| 日韩欧美综合在线视频| 五码日韩精品一区二区三区视频| 韩国三级午夜理伦三级三| 国内精品久久久| 96视频在线观看欧美| 性做久久久久久免费观看| 色噜噜色狠狠狠狠狠综合色一| 最新日韩中文字幕| 一区二区三区在线观看视频| 极品美妇后花庭翘臀娇吟小说| 久久精品人人做人人综合| 曰皮视频在线播放免费的| 欧美日本韩国一区| 国产大陆精品国产| 精品久久久久久久无码| 最近中文字幕一区二区三区| 中文字幕免费在线看线人动作大片| 国产绿帽一区二区三区| 日本特黄a级高清免费大片| 中文字幕人妻熟女在线| 91沈先生作品| 久久久噜噜噜久噜久久| 欧美日韩国产一区二区三区地区| 色猫咪免费人成网站在线观看| 国产黄色免费看| fc2ppv素人在线| 精品一级视频| 成人av网在线| 欧美激情在线视频二区| 国产成人欧美日韩在线电影| 免费在线视频一级不卡| 成年人视频在线看| 四虎在线看片| av高清在线免费观看| 国产婷婷视频在线| 色呦呦一区二区三区| 都市激情在线视频| 日韩精品久久久久久久玫瑰园| 欧美乱人伦中文字幕在线| 开心激情五月网| 93久久精品日日躁夜夜躁欧美| 亚洲xxxx做受欧美| 国产91久久精品一区二区| 国产精品免费观看| 涩涩漫画在线观看| 久草视频在线看| 成人免费视频国产在线观看| 亚洲自啪免费| 久久久精品视频免费| 欧美一区二区高清在线观看| 欧美一区二区三区精品电影| 国产精品午夜一区二区欲梦| 日韩视频二区| 国产午夜福利片| 日本激情在线观看| 激情久久五月| 国产一区二区三区免费| 日韩女优人人人人射在线视频| 亚洲第一网中文字幕| a4yy在线播放免费观看视频| 日韩精品视频一区二区在线观看| 国自产拍偷拍精品啪啪一区二区| 国产精品久久成人免费观看| 欧美精品电影在线播放| 欧美激情一区二区三级高清视频| 日韩五码电影| 伊色综合久久之综合久久| 国产成人精品自线拍| 国产精品麻豆成人av电影艾秋| 亚洲国产精品第一区二区三区| 一区二区毛片| 中文字幕视频免费观看| 在线日韩国产精品| 精品淫伦v久久水蜜桃| 日韩精品1区2区| 亚洲国产免费av| 在线免费观看成人网| 在线亚洲不卡| 91精产国品一二三产区别沈先生| 在线免费观看麻豆| 日韩美一区二区三区| 欧美午夜精彩| 成人性教育视频在线观看| 91片黄在线观看喷潮| 国语自产精品视频在线看抢先版结局| 最新亚洲人成网站在线观看| 国产一级片免费| 99热这里是精品| 免费一级欧美片在线观看| 中文字幕精品—区二区四季| 91麻豆精品国产91久久久久久久久| 神马久久高清| 精品亚洲成人| 欧美高清一级片在线| 国产精品制服诱惑| 91久久久久久国产精品| gogogo影视剧免费观看在线观看| 69久久夜色精品国产69蝌蚪网| 91污在线观看| 欧美日韩一区二区在线观看视频| 亚洲欧洲日产国码无码久久99| 无码人妻丰满熟妇区五十路| av中文资源在线| 午夜久久久久久久久久影院| 日韩在线播放视频| 丝袜美腿诱惑一区二区三区| 国产在线电影| 欧美不卡视频一区发布| 国产男女爽爽爽| 国产亚洲激情视频在线| 国产精品久久综合青草亚洲AV| 亚洲精品666| 国产精品剧情一区二区在线观看| 黄网在线观看视频| 国产亚洲视频在线观看| а√资源新版在线天堂| 在线观看亚洲精品视频| 免费观看视频www| 色婷婷在线影院| 精品免费99久久| 欧美日韩在线不卡一区| 天堂av手机在线| 一级做a爱片性色毛片| 中文字幕 欧美激情| 91视频在线看| 亚洲熟女乱色一区二区三区| 成年人视频在线免费看| 国产日产精品久久久久久婷婷| 亚洲激情网址| 欧美三级网页| 春意影院普通入口| 日本伊人午夜精品| 黄色免费影视| 男人添女荫道口喷水视频| www99xav| 国产h在线观看| 久久久久亚洲av无码专区| 欧美日韩国产一中文字不卡| 国产毛片欧美毛片久久久| 亚洲AV午夜精品| 国产劲爆久久| 亚洲女人被黑人巨大进入| 精品久久一区二区三区| 国产在线黄色片| 自产国语精品视频| 日本道在线观看| 色偷偷成人一区二区三区91| 欧美精品一区二区成人| 中文字幕日韩在线播放| 国产一区二区免费在线观看| 久久久亚洲影院你懂的| 亚洲风情在线资源| 在线欧美日韩国产| 久久三级中文| 日韩免费精品| 亚洲美女性生活视频| 国产理论电影在线| 国产美女av一区二区三区| 国产亚洲高清在线观看| 国产精品yjizz视频网一二区| 日本精品在线免费观看| 日韩一级片中文字幕| 国产亚洲精品久久久久久豆腐| 亚洲天堂免费观看| 一炮成瘾1v1高h| 国产日本欧美一区二区三区| 四虎国产精品成人永久免费影视| 欧美交换国产一区内射| 久久99精品国产99久久6尤物| 日本在线精品| 中文字幕国产专区| 国产中文字幕亚洲| 欧美夫妻性视频| 99亚洲男女激情在线观看| www.看毛片| 国产主播福利| 欧美成人嫩草网站| 日本伊人精品一区二区三区介绍| 亚洲欧美激情网| 国产黄色免费看| 久久久国产精品人人片| 欧美精品中文字幕亚洲专区| 日本在线小视频| 国精一区二区| 欧美久久九九| 成人av电影免费在线播放| 国产日韩av网站| 在线成人www免费观看视频| 国产成人综合欧美精品久久| 老师我好爽再深一点的视频| 777电影在线观看| 久久久精品在线观看| 亚洲中文字幕在线一区| 99精品在线看| 亚洲欧洲一区二区天堂久久| 91av久久| 成人福利小视频| 日本在线一级片| 日韩专区av| 91美女视频网站| 99精品欧美一区二区三区综合在线| 欧美亚洲色图校园春色| 色免费在线观看| 一区二区三区**美女毛片| 欧美1—12sexvideos| 9999热视频| 欧美日韩视频免费| 91麻豆.com| 日本丰满大乳奶| 蜜臀av性久久久久av蜜臀妖精| 亚洲自拍偷拍二区| 在线看黄色av| 日韩一级视频在线观看| 成人性色生活片免费看爆迷你毛片| 久久久精品一区二区三区| 中国av免费看| 操碰免费视频| 国产精品久久久久久久久久久久久久久久| 天天爱天天做天天爽| 久久不卡日韩美女| 午夜精品久久久久久| 激情五月少妇a| 91精品国产99久久久久久红楼| 91po在线观看91精品国产性色| 日产精品高清视频免费| 免费看的av| 国产一级在线视频| gogo在线观看| 亚洲色图视频在线观看| 一区二区高清不卡| 色国产精品一区在线观看| 国模精品一区二区三区| 日批视频免费看| 中日韩黄色大片| 久久成人18免费观看| 成人国产精品久久久久久亚洲| 鲁鲁视频www一区二区| 欧美 日韩 国产 成人 在线| 亚洲精品一区在线| 亚洲无限乱码一二三四麻| 国产精品v一区二区三区| 亚洲欧美另类在线视频| av一本在线| 亚洲欧美日韩国产| 99在线精品免费| av黄色免费网站| 成人av在线资源| 免费观看一级特黄欧美大片| 亚洲欧美日韩精品永久在线| 大陆极品少妇内射aaaaa| 美女精品久久久| 精品少妇人妻一区二区黑料社区| 欧美a级黄色大片| 中文亚洲av片在线观看| 97福利电影| 99久久精品国产色欲| 97色在线观看| 视频在线你懂的| 欧美美乳视频网站在线观看| 免费极品av一视觉盛宴| 自拍视频在线观看一区二区| 国产在线一区视频| 91精品国产综合久久久久久豆腐| 无人视频在线观看免费| 久久av秘一区二区三区| 黄色av网站免费在线观看| 亚洲老司机av| 欧美激情综合在线| 一区二区三区国| 5566日本婷婷色中文字幕97| 亚洲激情六月丁香| 自拍偷拍亚洲视频| 国产成人短视频| 国产精品丝袜久久久久久高清| 91社区在线观看播放| 亚洲天堂中文网| 搡老熟女老女人一区二区| 久久精品亚洲精品国产欧美kt∨| 亚洲一区二区三区久久久| 缅甸午夜性猛交xxxx| eeuss鲁片一区| 久久久久se| 亚洲国产综合色| 欧美日韩精品一区二区三区四区| 黄页网站在线观看视频| 有码在线播放| 免费观看中文字幕| 97精品国产97久久久久久| 亚洲少妇自拍| 污污网站在线看| 麻豆视频成人| 亚洲国产精品麻豆| 亚洲视频一区在线播放| 天堂网在线中文| 中文字幕一区日韩电影| 亚洲精品日本| 亚洲视频一区二区免费在线观看| 天海翼在线观看视频| 国产成人aaa| 亚洲va码欧洲m码| 男人添女人下部高潮视频在线观看| 日本免费视频在线观看|