| 软件破解之“动态跟踪分析” |
| 软件破解之“动态跟踪分析” | ||
| 作者:佚名 文章来源:不详 更新时间:2007-11-20 7:32:44 【字体:小 大】 | ||
一、SOFTICE 配制 虽然大部分 VB 程序仍调用 Win32 API 函数,但如想在 VB dll 运行库中设断的话,你就必须把 VB dll 运行库加入 SOFTICE 配制里去。具体你可参考第五课中的《 SOFTICE 安装及使用》。 下例是在 win95/98 下你把相关的 VB DLL 运行库加入 winice.dat 配制文件里。 ( 部分 )
; EXP=c:\windows\system\msvbvm60.dll ; Visual Basic 6
这样配制好后,重新启动,就可设 VB 运行库中各函数的断点了。 -------------------------------------------------------------------------------- 二、VB dll 常用函数 1 、字符处理函数 MultiByteToWideChar, rtcR8ValFromBstr, WideCharToMultiByte, __vbaStrCmp, __vbaStrComp, __vbaStrCopy, __vbaStrMove, __vbaVarTstNe . 注意:这些函数前的下划线 __ 是由两根短线 _ 组成的,不要弄错。 如果你是 crack VB6 程序,你应在断点前增加 msvbvm60! 。 如: bpx msvbvm60!__vbastrcomp
Val() 转换字符串为数字 Rtrim$() 去除字符串左边空格 几个常用函数简介: 1、 __vbavartstne 如是在VB5中CALL MSVBVM50!___vbavartstne 进去后在0F04E351你将看到: 下命令:d ebp+0c 2、 __vbaR8Str 在 VB5中是如下情况: 在这行fcomp qword ptr [00401028] Type: DL 00401028 将看到*real* serial #. DL 是显示 Long/real 型,SOFTICE默认时是DB状态。 3、 __vbastrcmp 例:
2 、警告窗口函数
-------------------------------------------------------------------------------- 三、VB字串格式 在大部分 VB 程序中,我们能用 bpx Hmemcpy 命令设断,但是你将发现自己不久进入 VBRUNxxx.DLL 运行库,很快陷入 Vb dll 中,在大多数情况下,你很难到达其 EXE 文件中的真正比较核心。你通常是依靠字符串的线索来跟踪程序,你们还应记得 VB ( VB4 以上) 程序储存和比较字符是用 wide character 格式(本质是中在各字符间填 0x00)。 int MultiByteToWideChar( 如:
Wide 字符串格式 : C R A C K Z (43h 00h 52h 00h 41h 00h 43h 00h 4Bh 00h 5Ah).
有些情况下应该用 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 这里有个小程序RAMQuota(www.stepnet.com.au),是用VB6写的,它使用上述函数中的VarBstrCmp( )比较注册码。该函数的关键指令如下: :77A12A03 8B7D0C mov edi, dword ptr [ebp+0C] 看来有必要仔细看一下oleaut32.dll
五、Visual Basic 程序比较方法 在 Visual Basic 里有 8 种以上的方法检测正确的序列号 / 密码。我这里将谈谈这 8 种方法,它们都是较容易并用得较多。首先是最普通的 3 种: 1) 串(string) 比较 在这比较方法里,正确密码串如: "Correct Password" 和你输入的密码串如: "Entered Password" 比较。 串是由相邻的字符按顺序排列组成,一个串包括字母、数字、空格和标点符号。一个固定长度的串可储存 0 到 63K 字符。如是动态的串其储存字符个数可达 20 亿字符。 VB 串比较代码一般格式:
GoTo Correct Message Else GoTo Wrong Message End if
i) __vbastrcomp or __vbastrcmp (下划线是两短线 _ 组成) <-- 串比较函数
如: bpx msvbvm60!__vbastrcomp or bpx msvbvm60!__vbastrcmp
如: 56,57,8b,7c,24,10,8b,74,24,0c,8b,4c,24,14,33,c0,f3,66,a7
在这方法中,两个变量(变量数据类型)互相比较。变量数据类型是一种特殊数据类型,包括数字、字符串或日期数据及一些用户定义的类型。这种类型储存数字长度是 16 字节或字符 22 字节(加上串长度)。
correct = Correct Password <-- 设置 "correct" 放置 "Correct Password" entered = Text1.Text <-- 设置 "entered" 作为你输入密码 If correct = entered Then <-- 用变量方法比较 GoTo Correct Message Else GoTo Wrong Message End If
__vbastrcomp 等 ...
i) __vbavartsteq <-- 测试变量是否相等
例: bpx msvbvm60!__vbavartsteq 3) 长整型( long) 比较 这也是一个普通的方法。两个变量(长整型)互相比较。 long 型数据类型是 4 字节( 32 位)整数,其范围 -2,147,483,648 到 2,147,483,647 。因此该种方法存在只能比较数字的局限性。 一个此类型范例:
correct = 12345 <-- 设置 "correct" 为正确密码 entered = Text1.Text <-- 设置 "entered" 为输入密码 If entered = correct Then <-- 用长整型方法比较 GoTo Correct Message Else GoTo Wrong Message End If
-------------------------------------------------------------------------------- 另外还有其它的 5 种方法,如果下面的方法你听起来有点怪或不太可能,你可忽略它们,但记得 VB 保护方式不限于上述三种。
5) 双精度(Double)比较
一些可能用上的断点
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)
i) 字符串( String )到内存 : __vbaStrCopy ii) 变量( Variant )到内存 : __vbaVarCopy or __vbaVarMove
i) 加法 : __vbavaradd <-- 增加变量 ii) 减法 : __vbavarsub <-- 减去变量 iii) 乘法 : __vbavarmul <-- 乘以变量 iv) 除法 : __vbavaridiv <--Dividing Variant to get answer in Integer v) XOR: __vbavarxor <--XOR
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
============================= |
||
|
||
| 文章录入:YesHack 责任编辑:YesHack | ||
您现在的位置: