如何破解VB5程式的密码保护
整理编译:我要[dfcg] woyao[dfcg](这个可是外国佬的东西啊!)
呵呵,这是一个破解VB5程式密码保护的快捷方法(甚至包括一些DLL动态链接库)
我现在假设你已有了SoftIce
首先让我们讨论一下VB5程式的结构
从机器的可执行代码开始吧,当你在一个系统上写你自己的代码时,叫源代码(你不可能直接用16进制编吧?尤其在WinXX的系统上),因为用编程语言来测试和调试要容易的多,在该阶段你的源代码要在机器上执行,有两种方式,第一种方式(慢)是取一行翻译一行执行,叫解释执行因为此时有一种可以将你的源代码翻译为机器能识别的形式的程式在运行,当然在程序执行最后也是可以完成一些任务的;第二种方式(快)是将整个源代码直接翻译为机器能识别的形式(机器不需再将程式取一行翻译一行再执行),这种方式叫编译执行,在运行时不需要任何别的程式做翻译工作!
微软又一次模糊了这个概念,或者说又在尽力欺骗!正象他们经常做的(总在隐藏真相!)
好了!让我们回到原话题—破解VB5的东西!(EXE或DLL)
VB5 程式是不会单独运行的!它总是需要MSVBm50.DLL来解释执行,即使微软说“现在VB的代码可以完全编译!” (BULL S.ITT!)
这意味着 EXE 或别的由VB5编译的东西将不得不调用MSVBm50.DLL来了解下一步该干什么!甚至在字串比较上!它调用一个函数或一段程序叫__VbaStrComp来进行比较 (你能相信吗?!!?)
可能你以前曾破解过Win9x下的东东,对如何设断也有了一定的思路,但自从VB5调用MSVBm50.DLL来解释执行程式后便行不通了(代码将不会按它自己写的方式进行处理,而是按MSVBm50.DLL解释的方式进行), 也使系统变得很慢!不过也使我们知道了函数 (GetDlgItemText),不管是16位或32位的都不会被使用了!或即使被使用了,也不会被连接到源程序中去!要记住,如果你想当程序员千万不要写VB程式!
这个也告诉我们,必须在softice目录下的softice.dat或winice.dat的exp部分加上MSVBm50.DLL, 你将不得不在该文件中加入下面一行:
EXP=C:\***你安装windows的目录***\System\MSVBm50.DLL
当你加完这一行后,你要重启机器
重启后...
运行要破解的程式,直到出现让你输入密码的对话框,按 CTRL+D 进入SoftIce
键入
bpx __vbaStrComp
该断点将拦住发生在VB5程式内的字串比较动作
好,现在按CTRL+X,你将回到VB程式中,键入一些字符并按回车,发生了什么!?!程式将被断住并回到 SoftIce中
清除所有断点,向下翻屏(用 CTRL+DownArrow) ,直到看到如下代码:
F003585: MOV ECX, [EBP+0C] F003588: MOV EDI, [ECX-04] F00358B: CMP EDI, ESI
在 F00358B处设一个断点(便是 CMP EDI, ESI 的位置),只需在该位置双击即可。 按 F5 返回程式,将在该位置拦住,在该点呼叫该函数的程式段将要比较的数据压入到内存中,结果是第一个位置存放源数据,其指针存在 EAX 中,第二个位置是目标数据,其指针在ECX中,要看这两处的数据,只需键入
D EAX
这个是查看EAX指向的数据,
D ECX
这个是查看ECX指向的数据...
如果你找到了你要找的,呵呵!清除断点,回到原程式,并填上找到的数据( Piece of cake!)如果没找到,不要灰心,再按一下 F5 ,因为你可能处在另一个字串比较处或在系统里(比如象变量存贮什么的!按了 F5 后你将拦在同一位置,此时键入
D EAX D ECX
查看内存数据,你将发现寻找其密码是如此的容易!(如果没有再按F5)
这种方法可100% 的用于 Visual Basic5编译的程序(EXE, DLL, 我认为也可以用于OCX文件,但我从没试过!)
如果你不能发现你要找的,也可以在MSVBm50.DLL中别的地方下断
你可以停在该链接库中有比较操作的任何地方, 你也可以在拦住后看该链接库中所有的函数, 你只需键入:
(由于我也是刚接触SoftIce, 我只知道这样做是一种很快的方法)
EXP
这样将看到所有在系统链接库中的所有函数,当然也包含MSVBm50.DLL了,不过是列在最后了,因为我把MSVBm50.DLL给包含在 WinIce.Dat的最后了:
好了,下面是用来比较的几个主要的函数:
针对字串: __vbaStrComp __vbaStrCmp __vbaStrCompVar __vbaStrLike __vbaStrTextComp __vbaStrTextLike
针对变量: __vbaVarCompEq __vbaVarCompLe __vbaVarCompLt __vbaVarCompGe __vbaVarCompGt __vbaVarCompNe . . 我相信你会发现的更多,但在VB中比较的主要对象是字串!因为任何文本框返回的都是字串!(除非他们以值的方式取,不过不太可能的!),因为他们经常自以为是的把字母、数字、特殊符号都作为密码!这就导致结果便是字!
|
查看所有0条评论>>