• 标 题:翻译“如何破解VB5程式的密码保护... ( By DMA-48!!! )”,希望不会翻重 (4千字)
  • 作 者:KanKer
  • 时 间:2001-6-30 0:11:3
  • 链 接:http://bbs.pediy.com

如何破解VB5程式的密码保护... ( By DMA-48!!! )
文章翻译:KanKer

呵呵,这是一个破解VB5程式密码保护的快捷方法(甚至包括一些DLL动态链接库)...

我现在假设你已有了SoftIce... (或从 CrackStore.com 下载)

...

首先... 让我们讨论一下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中... 要看这两处的数据,只需键入...

DEAX

这个是查看EAX指向的数据, 

DECX

这个是查看ECX指向的数据...

如果你找到了你要找的,呵呵!... 清除断点,回到原程式,并填上找到的数据... ( Piece of cake! )... 如果没找到... 不要灰心... 再按一下 F5 ,因为你可能处在另一个字串比较处或在系统里(比如象变量存贮什么的!)... 按了 F5 后你将拦在同一位置,此时键入

DEAX
DECX

查看内存数据,你将发现寻找其密码是如此的容易!... ( 如果没有再按 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中比较的主要对象是字串 !.. 因为任何文本框返回的都是字串! (除非他们以值的方式取,不过不太可能的!). 因为他们经常自以为是的把字母、数字、特殊符号都作为密码!.... 这就导致结果便是字串!...




好... 祝贺一下...

Thunder23: (我真的很感激你给我的这个东东... 没有你的帮助我真的没法下手,真的很感谢你,千万次的感谢,我的朋友!..., 你希望你改日能再写一篇!!! 哈哈哈!...
SnakeHead: (我希望你能走出那个血腥的领域并认真的开始!)...
+ORC ... (兄弟, 当我读到你这篇文章时我是如此的感动,我想哭... 我记得熬过的这些日子!... 我要回去睡个大觉!)... 上帝保佑你!, 你已经说过了!
ED!SON: 这是我陷入windows迷雾后读到的第一篇文章... 因为你,我现在喜欢 SoftIce 了!... 我在用Turbo Debugger前先用它 ... 我希望还有类似的关于win95下破解的文章出现!...
非常非常的感谢 CrackStore.Com 救了我们这些蠢人!... I Owe it 2 U Budy!.
祝全世界的黑客好运 !...
使我重新破解的原因是因我要用VB5来设计一个预订系统,此系统需要跟电话系统联合,一些程序员出售该程式要?000! 没门!... 他所做的便是在其VB DLL文件中输入一个密码并把文件寄给我们,他只寄他的密码!...我花了4天的时候来研究windows,然后又花了10分钟破解了该程式,并得到了密码!...我想我既然又来这里了... 索性便花点时间把水平赶上去...

再次感谢世上所有的黑客...

DMA-48!!!