軟件破解之“動態(tài)跟蹤分析”
一、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]
:005BDC44 MOV EDX,[ESI 4C]
:005BDC47 MOV EAX,[005E0078]
:005BDC4C PUSH EDX
:005BDC4D PUSH EAX
:005BDC4E CALL [MSVBVM50!__vbaStrCmp]
: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 程序比较方法
在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) 搜索特殊比较代码(具体参考下一节)
如: 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 = Correct Password
entered = Text1.Text
If correct = entered Then
GoTo Correct Message
Else
GoTo Wrong Message
End If
在这方法里, 1 中的两个断点将不起作用,因为程序不再用
__vbastrcomp等 ...
有用断点:
i) __vbavartsteq
注意:如果你是 crack VB6 程序,你应在两断点前增加。
例:bpx msvbvm60!__vbavartsteq
3) 长整型( long) 比较 ;
这也是一个普通的方法。两个变量(长整型)互相比较。
long 型数据类型是 4 字节( 32 位)整数,其范围 -2,147,483,648到2,147,483,647 。因此该种方法存在只能比较数字的局限性。
一个此类型范例:
Dim correct As Long, entered As Long
correct = 12345
entered = Text1.Text
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
v) XOR: __vbavarxor
4)其它类
i) __vbavarfornext
ii) __vbafreestr
iii) __vbafreeobj
iv) __vbastrvarval
v) multibytetowidechar
vi) rtcMsgBox
vii) __vbavarcat
viii) __vbafreevar
ix) __vbaobjset
推薦系統(tǒng)
雨林木風(fēng) winxp下載 純凈版 永久激活 winxp ghost系統(tǒng) sp3 系統(tǒng)下載
系統(tǒng)大?。?/em>0MB系統(tǒng)類型:WinXP雨林木風(fēng)在系統(tǒng)方面技術(shù)積累雄厚深耕多年,打造了國內(nèi)重裝系統(tǒng)行業(yè)知名品牌,雨林木風(fēng)WindowsXP其系統(tǒng)口碑得到許多人認(rèn)可,積累了廣大的用戶群體,是一款穩(wěn)定流暢的系統(tǒng),雨林木風(fēng) winxp下載 純凈版 永久激活 winxp ghost系統(tǒng) sp3 系統(tǒng)下載,有需要的朋友速度下載吧。
系統(tǒng)等級:進(jìn)入下載 >蘿卜家園win7純凈版 ghost系統(tǒng)下載 x64 聯(lián)想電腦專用
系統(tǒng)大?。?/em>0MB系統(tǒng)類型:Win7蘿卜家園win7純凈版是款非常純凈的win7系統(tǒng),此版本優(yōu)化更新了大量的驅(qū)動,幫助用戶們進(jìn)行舒適的使用,更加的適合家庭辦公的使用,方便用戶,有需要的用戶們快來下載安裝吧。
系統(tǒng)等級:進(jìn)入下載 >雨林木風(fēng)xp系統(tǒng) xp系統(tǒng)純凈版 winXP ghost xp sp3 純凈版系統(tǒng)下載
系統(tǒng)大?。?/em>1.01GB系統(tǒng)類型:WinXP雨林木風(fēng)xp系統(tǒng) xp系統(tǒng)純凈版 winXP ghost xp sp3 純凈版系統(tǒng)下載,雨林木風(fēng)WinXP系統(tǒng)技術(shù)積累雄厚深耕多年,采用了新的系統(tǒng)功能和硬件驅(qū)動,可以更好的發(fā)揮系統(tǒng)的性能,優(yōu)化了系統(tǒng)、驅(qū)動對硬件的加速,加固了系統(tǒng)安全策略,運(yùn)行環(huán)境安全可靠穩(wěn)定。
系統(tǒng)等級:進(jìn)入下載 >蘿卜家園win10企業(yè)版 免激活密鑰 激活工具 V2023 X64位系統(tǒng)下載
系統(tǒng)大?。?/em>0MB系統(tǒng)類型:Win10蘿卜家園在系統(tǒng)方面技術(shù)積累雄厚深耕多年,打造了國內(nèi)重裝系統(tǒng)行業(yè)的蘿卜家園品牌,(win10企業(yè)版,win10 ghost,win10鏡像),蘿卜家園win10企業(yè)版 免激活密鑰 激活工具 ghost鏡像 X64位系統(tǒng)下載,其系統(tǒng)口碑得到許多人認(rèn)可,積累了廣大的用戶群體,蘿卜家園win10純凈版是一款穩(wěn)定流暢的系統(tǒng),一直以來都以用戶為中心,是由蘿卜家園win10團(tuán)隊(duì)推出的蘿卜家園
系統(tǒng)等級:進(jìn)入下載 >蘿卜家園windows10游戲版 win10游戲?qū)I(yè)版 V2023 X64位系統(tǒng)下載
系統(tǒng)大?。?/em>0MB系統(tǒng)類型:Win10蘿卜家園windows10游戲版 win10游戲?qū)I(yè)版 ghost X64位 系統(tǒng)下載,蘿卜家園在系統(tǒng)方面技術(shù)積累雄厚深耕多年,打造了國內(nèi)重裝系統(tǒng)行業(yè)的蘿卜家園品牌,其系統(tǒng)口碑得到許多人認(rèn)可,積累了廣大的用戶群體,蘿卜家園win10純凈版是一款穩(wěn)定流暢的系統(tǒng),一直以來都以用戶為中心,是由蘿卜家園win10團(tuán)隊(duì)推出的蘿卜家園win10國內(nèi)鏡像版,基于國內(nèi)用戶的習(xí)慣,做
系統(tǒng)等級:進(jìn)入下載 >windows11下載 蘿卜家園win11專業(yè)版 X64位 V2023官網(wǎng)下載
系統(tǒng)大小:0MB系統(tǒng)類型:Win11蘿卜家園在系統(tǒng)方面技術(shù)積累雄厚深耕多年,windows11下載 蘿卜家園win11專業(yè)版 X64位 官網(wǎng)正式版可以更好的發(fā)揮系統(tǒng)的性能,優(yōu)化了系統(tǒng)、驅(qū)動對硬件的加速,使得軟件在WINDOWS11系統(tǒng)中運(yùn)行得更加流暢,加固了系統(tǒng)安全策略,WINDOWS11系統(tǒng)在家用辦公上跑分表現(xiàn)都是非常優(yōu)秀,完美的兼容各種硬件和軟件,運(yùn)行環(huán)境安全可靠穩(wěn)定。
系統(tǒng)等級:進(jìn)入下載 >
相關(guān)文章
- 安卓手機(jī)QQ 4.7.2正式發(fā)布 顯示在線好友的網(wǎng)絡(luò)狀態(tài)
- 瑞星安全隨身WiFi怎么用 瑞星隨身WiFi有何亮點(diǎn)以及使用方法
- 您的WiFi安全嗎?讓路由衛(wèi)士來為您把關(guān)讓它變得更快,更安全
- 大勢至局域網(wǎng)共享文件管理軟件詳細(xì)記錄服務(wù)器共享文件訪問日志、保護(hù)共享文件安全
- 金山毒霸發(fā)布全新的V11新春版:殺毒速度更快/軟件凈化
- WinXP如何進(jìn)入安全模式?WinXP進(jìn)入安全模式設(shè)置
- 怎樣消除免費(fèi)WIFI的安全隱患?一張圖看懂免費(fèi)WIFI的安全隱患
- 毒app優(yōu)惠券怎么獲得 毒app無門檻優(yōu)惠券攻略
- 京東通信卡流量超標(biāo)怎樣關(guān)閉移動網(wǎng)絡(luò)?
- 詳解火絨安全軟件怎么樣
- Win10系統(tǒng)下安全登錄失敗初始化失敗怎么辦?
- 360安全衛(wèi)士怎么更改默認(rèn)軟件?
- 360稱特斯拉應(yīng)用存漏洞 特斯拉不安全?
- win10安全模式跳過開機(jī)密碼可行嗎
熱門系統(tǒng)
推薦軟件
推薦應(yīng)用
推薦游戲
熱門文章
常用系統(tǒng)
- 1雨林木風(fēng)win10游戲?qū)S冒?x64位永久激活 ghost鏡像 筆記本專用下載
- 2蘿卜家園WIN11純凈版免激活 中文系統(tǒng) X64位 V2022.07下載
- 3win10專業(yè)版(深度技術(shù))GHost鏡像系統(tǒng) 21H2 X64位 V2022.04下載
- 4Windows11家庭版下載 雨林木風(fēng) X64位高性能版本下載 筆記本專用
- 5Win11專業(yè)版下載 深度技術(shù)系統(tǒng)特別奉獻(xiàn) 最新免激活ghost系統(tǒng) ISO鏡像 X64位
- 6windows7穩(wěn)定版下載 深度技術(shù)x64萬能版 ghost系統(tǒng)下載 自動激活
- 7技術(shù)員聯(lián)盟win10穩(wěn)定版 ghost系統(tǒng)下載 x64位 筆記本專用下載
- 8系統(tǒng)之家winXP純凈版 ghost iso V2022.05 XP ghost鏡像最新版下載
- 9雨林木風(fēng)Win10 企業(yè)版系統(tǒng)下載 Ghost Windows10 32位系統(tǒng) V2021.11