深入了解VB程序注册破解机制(一)来来来 送分了!来者有分

一笑拔剑 2009-06-03 02:49:01
加精
深入了解VB程序注册破解机制(一)
说句实在话,我在给文章起上这个名字的时候心里颤颤巍巍的,既怕被人用砖头活活拍死,又怕起了个牛x的名字最后没有给大家介绍什么真正牛x的东西。不过,我为人脸皮极厚,所以就硬着头皮拉起了大旗。如果文章拙劣,还请众位看官多多包涵。如果实在忍受不了要拍砖,请千万不要砸脸。
前段时间在csdn论坛上的vb区看见了一篇有关反破解的文章,文章介绍了一些代码。这些代码是通过一些api的调用比如isdebuggerpresent,获取父进程等手段,来防止程序被调试器调试和破解的。如果是在几年前,我说不定会惊为天人,然后赶紧把代码copy到vb里试验一下。但是,由于本人对反汇编和程序破解在这几年间有了一定的认识和了解,所以我清楚的知道这些反调试手段对于真正的cracker来说,实在是不值得一提。简单的来说,如果vb是通过调用api来完成反调试的话,那么只要hook住那个api,然后修改这个api的返回值就可以轻易的使得vb上当受骗。而目前常用的这些调试工具都有这样的功能,如olldbg工具有一个hideod的工具就可以hook住isdebuggerpresent,ntgloblflags,hepflags,process32next,……等等十数个api。而对于获得父进程,更加简单了,因为检测父进程是不是explorer的话,只要把调试器或者装载器的文件名改成explorer.exe就可以了。
其实在早期的软件破解过程中,很多人都害怕调试vb的程序。因为vb的机制和vc或者dehpi不同,他的功能都是在msvbvm60.dll里完成的,通常的软件跟踪办法很容易会在msvbvm60.dll里面打转,而找不出关键点,更不要说人人都害怕的p-code了。虽然如此,但本人在实际的软件跟踪破解过程中,并没有vb比其他语言的程序更难破解的感觉,也许是由于原先一直用vb所以对vb了解更多一点的原因吧。而在另一方面,也说明了现在的vb软件自身防护意识的淡薄和手段的匮乏。
有看官说了,你别光说不练啊,你不会是在吹牛吧!
别急,咱这就动手,我就实际剖析两个vb编写的软件,让大家了解一些有关vb注册验证和破解的知识。
【目标软件】: QQ聊天记录器(qq-msg)V3.0 2009升级版
【作者】: aspower
【作者邮箱】: 不能给,怕垃圾邮件啊!
【编写语言】: VB5.0-6.0
【软件介绍】: QQ聊天记录器能完整的记录下你电脑上的所有的QQ聊天信息,不用密码,不用登录QQ窗口,你即能看到本机上所有QQ号的聊天记录(包括聊后立即删除的记录)。本软件主要功能是提供保存自已的聊天记录,或及时了解你孩子、家人的聊天内容,防止孩子交上不良网友。本软件几乎支持目前所有的QQ版本。特别忠告:本软件不得用于监视别人的计算机,请合法应用本软件。
【使用工具】:peid,regmon,olldbg ,smartcheck
【作者声明】: 只是出于研究,没有其他目的。失误之处敬请大家见谅。
用peid查看软件,是aspack2.1的壳,普通的压缩壳,直接使用脱壳工具脱掉壳,再查看软件,得知软件是Microsoft Visual Basic 5.0 / 6.0,vb写的。
打开软件,标题栏显示qqmsg未注册字样,未注册版本有时间限制,而无法查看qq记录。打开注册窗口,输入注册名aspower,随便假注册码9876543210按下现在注册。当的一声,弹出个窗口,说是需要重新启动。很正常的过程,重启验证。
了解注册机制的人就会知道,大部分重启验证一般是通过检测注册表,或者检测某个key文件来判断注册码的。相信这个也不例外,好,让我们祭起regmon的大旗监视注册表。因为regmon默认的设置会把所有系统的注册表格信息都显示出来,那样的话很小一会就会出现大量的注册表信息。所以我们打开regmon后,先设置过滤条件为qq-msg.exe。这样的话就光显示这个软件对注册表的读写了。现在打开软件,我们就发现regmon里出现了以下键值HKEY_CURRENT_USER\Software\VB and VBA Program Settings\clongxue\clongxue,打开注册表定位到该键值,我们就会发现下面有zcm和zcmm两个dword值,一个是注册名,一个是注册码。
好现在用olldbg加载软件,如何下断点就成了关键。我们知道,通常在vb下下api断点是无法断下api的调用的,因为vb的api调用是通过msvbvm60.dll里DllFunctionCall函数来完成的,直接在vb程序里下断是无效的。同样,等窗体启动以后再下断也是没有效果的,因为这个时候验证过程已经过去。
很多人说vb下断点难,就是因为不了解vb。当碰见这个情况的时候,很多人就不知道如何着手了。再有的人就开始一步一步跟,事实上,vb的断点有vb的规律,我们可以自己考虑下,如果自己来些个注册程序,我们会怎么样呢?最可能是就是这样了,先算出一个注册码,然后跟用户输入的注册码比较。vb很可能是这样写的,
if (string1=string2) then
注册成功
else
注册失败
end if
那么string1=string2在汇编环境下是怎么样的呢?
可能是这样的,
0041BA42 . 50 push eax 压入第一个字符串
0041BA43 . 68 20804000 push 00408020 压入第二个字符串
0041BA48 . FF15 C4104000 call dword ptr [<&MSVBVM60.__vbaStrCm>; MSVBVM60.__vbaStrCmp 比较函数
MOV EDi,EAX ;结果同时在eax中返回
那么我们就可以在od里用MSVBVM60.__vbaStrCmp下断,这样的话,我们就可以在所有的字符串比较函数位置使程序停下来了。我们命令行里输入bpx MSVBVM60.__vbaStrCmp,然后按下f9让程序继续运行。再断下n次以后,发现已经进入程序,依然显示未注册,而根本没有看见注册字符入栈,就是说vbaStrCmp前的push eax 和 push 00408020都没有出现注册码的身影。那么这个程序是怎么进行注册验证的呢?
没关系,调试vb软件还有很多强大的软件,现在让我们启动令vb程序心惊胆颤的smartcheck来看下这个vb程序究竟在哪里搞了鬼.smartcheck
是一个非常强大的vb调试工具,在smartcheck下,你会看到非常详细的vb程序信息,甚至会被反汇编到可读的代码级别.
用smartcheck启动这个软件,你会看见软件启动的整个过程,你会看见,一开始软件启动了一个form1,就是输入密码的窗口,然后开始接受keypress,之后form2.load,form2.load后面有一个加号,那么让我们来看看form2.load里有什么猫腻.果然在form2.caption显示未注册的标题前面有两个可疑的InStr过程,instr大家都知道,在一个字符串里查找另一个字符串的函数,难道这个软件是用instr来从注册码里找字符串的?我们把里面的内容复制出来到文本里详细看看.

InStr(long:1, String:"98765432...", String:"leiw3-mb...", Integer:0) returns LONG:0

Arguments
--------------------
Long start = 1 0x00000001
String string1 = 00150ED4
= "987654321"
String string2 = 00408088
= "leiw3-mbodr-9ewto-nmbio"
Integer compare = 0 0x0000

Instr(long:1, VARIANT:String:"aspower", VARIANT:String:"xue", Integer:0)

Arguments
--------------------
Long start = 1 0x00000001
string1 (variant)
String .bstrVal = 001638B4
= "aspower"
string2 (variant)
String .bstrVal = 0040807C
= "xue"
Integer compare = 0 0x0000

Form2.Caption <-- "qq-msg 3.0 2009(未注册)" (String)
String "qq-msg 3.0 2009(未注册)"
...全文
4051 91 打赏 收藏 转发到动态 举报
写回复
用AI写文章
91 条回复
切换为时间正序
请发表友善的回复…
发表回复
hxwllj 2012-10-04
  • 打赏
  • 举报
回复
我的vb程序谁也破解不了
TroubleShotting 2011-11-27
  • 打赏
  • 举报
回复
好东西!
shihanwen11 2011-11-27
  • 打赏
  • 举报
回复
支持一下
wenfj 2011-10-07
  • 打赏
  • 举报
回复
好东西自然要顶!
78 2010-09-08
  • 打赏
  • 举报
回复
QQ-msg这样是破不了的。

最多只是标题被写成了已注册。
但实际上功能还是被限制了。

直接到跳转语句去想办法,让他就算显示不注册也能使用正版功能。
wuyun22 2010-07-27
  • 打赏
  • 举报
回复
好帖,再顶
liguicd 2010-05-22
  • 打赏
  • 举报
回复
好帖,再顶
tm1994331 2010-03-27
  • 打赏
  • 举报
回复
VB软件,直接816C24找到按钮事件,慢慢跟!
rgbjjj265 2010-02-09
  • 打赏
  • 举报
回复
顶,实在是学习了很多,收藏了先
suyx861 2009-12-10
  • 打赏
  • 举报
回复
我来帮顶
xn1980216 2009-12-10
  • 打赏
  • 举报
回复
我来帮顶
CommanderBug 2009-09-03
  • 打赏
  • 举报
回复
楼主,留个联系方式呗。
孤独的月 2009-07-21
  • 打赏
  • 举报
回复
真是 相见恨晚 呀
mingtian666999 2009-07-17
  • 打赏
  • 举报
回复
请问楼主,能不能帮我破解一下呀,我想要它的注册码,我试了,不过笨,你说的那些全弄不懂,不会破解,能不能帮我破解出来它的用户名和密码呀?我邮箱ruxue666999@163.com
如能帮忙,十二万分感谢!!!谢谢谢谢谢谢!!!!
我是一道光_ 2009-06-29
  • 打赏
  • 举报
回复
接分啦~~

明天考英语哈~~ 好好休息。
sssvip123 2009-06-29
  • 打赏
  • 举报
回复
使用注册码作为程序中的关键运算,可避免暴力破解
coolzzs1 2009-06-28
  • 打赏
  • 举报
回复
不错,学习了。。。
无·法 2009-06-28
  • 打赏
  • 举报
回复
楼主,原来我的软件就是你破解的啊,我做鬼也不放过你~~~~










开个玩笑,哈哈,要是那几个软件的作者也逛这个坛子才好玩呢
zz005 2009-06-28
  • 打赏
  • 举报
回复
学习
CDSNL 2009-06-27
  • 打赏
  • 举报
回复
顶起...
加载更多回复(71)

742

社区成员

发帖
与我相关
我的任务
社区描述
VB 版八卦、闲侃,联络感情地盘,禁广告帖、作业帖
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧