破解vb软件
再谈vb软件的破解
也许大家以前破解软件的时候,或多或少接触过解释执行的软件,如VB、VF、Java等。的确,这很另人头痛。因为这些程序都带着一个很大的DLL文件,当程序运行时,由一个解释器动态解释被存放在“数据段”中的伪代码,而不是像编译执行软件让计算机直接去执行。这样的好处就是实现起来比较简单,而且便于在不同平台上面移植。但这也给我们带来了很多不便,尤其是像我们这样的Cracker,在破解这类软件的时候,常常在不同的动态联接库打转转(如msvbvm60.dll),找不到软件的关键代码。下面我就用另类的破解方法进行破解。
破解准备:
这次我破解的软件是ASP Express,它是由Wind Software出品的一款专门编写ASP的程序(不是我为他们做广告,确实不错噢!)。在没有注册的时候只有45天的使用时间。不过该软件没有输入注册码的地方,我猜测应该是Key File的注册方式。但是又很难猜出Key File 的格式,所以我准备破解软件的时间限制。
安装完软件后运行它(如图1)可以看到还有45天的限制。通常软件的时间限制是通过GetLocalTime、GetSystemTime等函数取得本地时间,并与之比较判断是否过期!不过这种判断方式已经是“几十年前的事了”!现在的程序员都聪明了,把时间保存在文件里并放在一个隐秘的地方,如“c:\windows\”或“C:\windows\system32\”里等等。不过这也就是换汤不换药!我们可以用RegSnap等监视软件对其监视,看看它都搞了些什么鬼!打开RegSnap进行第一次扫描,扫描完毕后我们将时间改后一天并运行软件,这样可以判断出该软件对哪个文件进行更新,现在我们可以关闭软件进行第二次扫描。(如图2)是两次扫描后比较的结果。我们可以发现其中有几个关键的地方:
在注册表的
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Soft-Guard1.10\7N2&BxW HKEY_LOCAL_MACHINE\SOFTWARE\https://www.360docs.net/doc/7713621585.html,\Soft-Guard1.10\7N2&BxW 和C:\windows\Regbak.dat 、C:\windows\system32\SftGrd.cfg处存放着软件的注册信息。下面我们就来破解分析。 破解分析: 通过检测我们得知ASP Express是由VB编写的软件。通常破解的过程是先用W32Dasm、IDA 等软件进行静态分析,然后进行动态跟踪。不过针对不同的软件有不同的破解方法。尤其是像VB这样的解释执行软件,如果我们采用通常的方法会很费力的在msvbvm60.dll、user.dll、kernel32.dll等几个动态联接库中打转转。弄得我们头晕眼花也没找到关键的代码处。而网上也有很多关于破解这类软件专门的反编译器。下面我们就使用由NuMega公司开发的SmartCheck进行破解。 首先我来介绍以下SmartCheck软件,它是由NuMega(开发SoftICE的公司)开发,针对VB的错误检测和调试工具。它能够自动检测和诊断VB运行时的错误,并将一些表达不清楚的错误信息转化为确切的错误信息描述。不过在进行调试前我们必须对其进行一些配置,只有正确的配置才能够在调试的过程中反馈到大量有用的信息。运行SmartCheck并加载ASP Express程序,单击菜单“Program/Settings”打开配置对话框。选除“Report errors immediately”外的所有选项(如图3)。点击“Advanced”按钮进行高级配置,在“Advanced Settings”对话框上选种前面几项,并确保“Suppress system API and OLE calls”未被选上(如图4)。回到主配置对话框,在“Reporting”选项卡上,选种除了“Report MouseMove events from OCX controls”外的所有选项(如图5)。 现在我们配置完成,可以进行破解了。单击菜单“Program/Start”,SmartCheck会运行ASP Express并自动记录其运行的相关细节(如图6)。这时我们可以在主窗口可以看到一些加载事件如:“_ReadProperties”、“_Load”、“_Timer”。很明显根据词语的意思我们大体能判断其中的意思。“_ReadProperties”是读去保护的意思,“_Load”是窗体加载的意思。根据判断我们知道ASP Express在加载窗体时判断时间是否过期,所以我们点击“_Load”前面的加号以展开所有过程。哇……!我们会看到好多诸如 “Len(String:"306Final...") returns LONG:30” “Mid$(String:"306Final...", long:1, V ARIANT:Integer:1)” “Asc(String:"^") returns Integer:94” 之类的语句,如果接触过VB的人一看就会明白,的确这就是软件判断是否过期的代码。现在我们就可以根据以下代码来判断软件对时间的检测。(如图7)在这里我用SmartCheck对软件反编译出的顺序号来表示软件的代码行数(你可以单击菜单“View/Sequence Numbers”来使SmartCheck显示顺序号)。 我们点击“_Load”前面的加号展开所有选项,通过分析我们可以看出从: 第4762行到第6165行是软件注册的初始化; 第6397行到第6579行是ASP Express从注册表中读取Windows的注册码,并取其的后3位倒置过来做为用户ID的一部分; 第6603行到第7928行是组合用户的ID,“352” - “727” - “121” - “2502” 第7930行到第8753行是将用户ID进行变换,用“9999999999999 - 3527271212502 = 6472728787497” 第8874行到第9719行将注册的初始字符串进行替换变形(好古老的算法噢!),部分替换表如下: "0" = "7" "1" = "{" "2" = "," "3" = "N" "4" = "i" "5" = "m" "6" = "&" "7" = "X" "8" = "w" "9" = "$" "-" = "I" "|" = "|" "F" = "2" "i" = "x" "n" = "B" "a" = "<" "l" = "W" "I" = "j" "W" = "c" "e" = "v" "T" = "z" "o" = "#" "k" = "D" "A" = "s" "L" = "/" "t" = "8" "r" = "J" "p" = "L" 根据上面的替换表得出替换结果为“306FinalIn814WeTookALittleTrip” -> “N7&2xB 第10337行到第10434行软件将组合出来的用户ID存入注册表 HKEY_LOCAL_MACHINE\SOFTWARE\https://www.360docs.net/doc/7713621585.html,\Soft-Guard1.10\7N2&BxW 看明白了吧?“7N2&BxW 第15959行到第17598行是软件对使用时间的检测与替换变形,替换表跟上面的一样。替换的结果如下 “,77iIwI{&|&|ii|,77iIwI{X” -> “2004-8-16|6|44|2004-8-17” 看到了吧第一个时间是软件的安装时间,“|”作为分割符,其次的数字分别是使用次数和剩余时间,最后是现在的时间。假如我们把中间的剩余时间改一下就可以改变软件的使用期了!经过分析并根据上面对软件的监视我们知道软件分别把注册信息存放在在注册表的 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Soft-Guard1.10\7N2&BxW HKEY_LOCAL_MACHINE\SOFTWARE\https://www.360docs.net/doc/7713621585.html,\Soft-Guard1.10\7N2&BxW 和C:\windows\Regbak.dat 、C:\windows\system32\SftGrd.cfg处 其内容分别是 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Soft-Guard1.10\7N2&BxW {XwIiI77|,ii$|&|I{Iw7i,7 HKEY_LOCAL_MACHINE\SOFTWARE\https://www.360docs.net/doc/7713621585.html,\Soft-Guard1.10\7N2&BxW 7,i7wI{I|&|$ii,|77IiIwX{ C:\windows\Regbak.dat 7N2&BxW C:\windows\system32\SftGrd.cfg }Sx#4c&*-ct! 根据上面的对照表翻译过来,我们就很容易看明白!(不过注意有的地方必须翻转过来)“{XwIiI77|,ii$|&|I{Iw7i,7” -> “71-8-4002|44|6|61-8-4002” “7,i7wI{I|&|$ii,|77IiIwX{” -> “2004-8-16|6|44|2004-8-17” “7N2&BxW “}Sx#4c&*-ct! 不过注意文件SftGrd.cfg的替换表与他们不一样,下面就是SftGrd.cfg的替换表(在SmartCheck的第24471行到第25996行): "0" = "S" "1" = "!" "2" = "F" "3" = "}" "4" = "<" "6" = "x" "7" = "0" "8" = "t" "|" = "|" "-" = "u" "F" = "#" "i" = "4" "n" = "c" "a" = "&" "l" = "*" "I" = "-" "W" = "l" "e" = "Z" "T" = "s" "o" = "^" "k" = "h" "A" = "[" "L" = "p" "t" = "N" "r" = "X" "p" = "+" 根据这些替换表我们可以使着改变一下,将剩余时间加长!我在这里将剩余时间改成8888 天,改后的代码如下: HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Soft-Guard1.10\7N2&BxW 字串: "{XwIiI77|,wwww$|&|I{Iw7i,7" HKEY_LOCAL_MACHINE\SOFTWARE\https://www.360docs.net/doc/7713621585.html,\Soft-Guard1.10\7N2&BxW 字串: "7,i7wI{I|&|$wwww,|77IiIwX{" C:\windows\Regbak.dat 7N2&BxW C:\windows\system32\SftGrd.cfg }Sx#4c&*-ct! 把它们分别保存,再运行ASP Express看看!yeah……成功了!剩余时间改成了8888天(如图8)。 好了,现在就算破解完成!不过大家要完全破解软件的时间限制就必须借助OllyDbg等可以进行动态跟踪的软件,我们先用SmartCheck来确定软件判断注册的关键位置(我不用讲为什么用SmartCheck找软件注册位置了吧!),然后借助OllyDbg对软件进行彻底破解!然而我们怎么确定关键位置呢?我们在用SmartCheck的时候,在SmartCheck的右边有一个显示相关错误事件的详细内容的窗体(如图9),在这里我们可以找到软件代码的偏移位置,点击“_ReadProperties”我们可以看到他的位置是SoftGuard6.ocx的0000EAC0处(软件作者把ASP Express的注册算法保存为一个控件),“_Load”在ASP Express的00288F60处,“_Timer”在ASP Express的00289AA0处,通过分析得知软件判断是否过期是在“_Timer”里,我们根据偏移地址:00289AA0,可以找到真实地址:00400000 + 00289AA0 = 00689AA0。打开OllyDbg加载分析ASP Express,单击鼠标右键“前往/表达式”,输入00689AA0然后“确定”,我们将会来到软件执行Time控件的“_Timer”事件处(如图10)。按F9运行软件OllyDbg会中断在这里,按F8单步跟踪进行分析,我们找到00689B3F处为关键跳转,如果跳转就成功否则失败,我们将00689B3F处的JE SHORT ASPExpre.00689BBD改为JMP 00689BBD,进行无条件跳转这样就不会出现时间到期的情况了! ………………………… 00689B33 . 8D4D D8 LEA ECX,DWORD PTR SS:[EBP-28] 00689B36 . FF15 30104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeV>; MSVBVM60.__vbaFreeVar 00689B3C . 66:85FF TEST DI,DI 00689B3F . 74 7C JE SHORT ASPExpre.00689BBD 00689B41 . 8B16 MOV EDX,DWORD PTR DS:[ESI] 00689B43 . 56 PUSH ESI 00689B44 . FF92 14030000 CALL DWORD PTR DS:[EDX+314] 00689B4A . 50 PUSH EAX 00689B4B . 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18] 00689B4E . 50 PUSH EAX 00689B4F . FFD3 CALL EBX 00689B51 . 8BF8 MOV EDI,EAX 00689B53 . 68 FCC34700 PUSH ASPExpre.0047C3FC ; UNICODE "Sorry - Evaluation Time has expired" 00689B58 . 57 PUSH EDI