【破文标题】驱动精灵2005 简体中文专业版破解过程
【破文作者】4nil
【作者邮箱】4nil@163.com
【作者主页】ak4nil.iblog.cn
【破解工具】PEID,OD,W32Dasm
【破解平台】WIN XP
【软件名称】驱动精灵2005 简体中文专业版
【软件大小】720 KB
【原版下载】http://www.onlinedown.net/soft/3450.htm
【保护方式】UPX 0.89.6 - 1.02 / 1.05 - 1.24 (Delphi) stub -> Markus & Laszlo
【破解过程】

PART 1:伪注册

Peid 查出来是UPX 0.89.6 - 1.02 / 1.05 - 1.24 (Delphi) stub -> Markus & Laszlo
用UPX通用脱壳脱之。
可以成功运行。又查了下是Borland Delphi 6.0 - 7.0的。
尝试注册,提示错误。
不管直接用OD载入
下bp MessageBoxA.
F9,运行。
用户名:4nil
注册码:12345678
确认后断了。
F8走,直到弹出消息,点个确定又回来。
继续F8,几下后就来到主程序领空了。
往上看,
0049DE62     BA 14E34900   mov edx,MyDriver.0049E314            ; ASCII "\System32

\spool\drivers\w32x86\2\riched20.dll SetActiveEditControlFont, Arial, 30"
0049DE67     E8 EC6DF6FF   call MyDriver.00404C58
0049DE6C     8D95 70FFFFFF lea edx,dword ptr ss:[ebp-90]
0049DE72     8B45 FC       mov eax,dword ptr ss:[ebp-4]
0049DE75     8B80 04030000 mov eax,dword ptr ds:[eax+304]
0049DE7B     E8 1C57FAFF   call MyDriver.0044359C
0049DE80     8B95 70FFFFFF mov edx,dword ptr ss:[ebp-90]  //假码
0049DE86     8B45 EC       mov eax,dword ptr ss:[ebp-14]  //真码
0049DE89     E8 2673F6FF   call MyDriver.004051B4
0049DE8E     85C0          test eax,eax
0049DE90     0F84 B2010000 je MyDriver.0049E048
0049DE96     8B45 FC       mov eax,dword ptr ss:[ebp-4]
0049DE99     8B80 04030000 mov eax,dword ptr ds:[eax+304]
0049DE9F     33D2          xor edx,edx
0049DEA1     E8 2657FAFF   call MyDriver.004435CC
0049DEA6     8D45 EC       lea eax,dword ptr ss:[ebp-14]
0049DEA9     E8 126DF6FF   call MyDriver.00404BC0
0049DEAE     6A 00         push 0
0049DEB0     68 68E34900   push MyDriver.0049E368               ; ASCII "Registration Success!"
0049DEB5     68 80E34900   push MyDriver.0049E380               ; ASCII " Thank you for your 

support.
We will work even harder and
notify you future releases."
0049DEBA     8B45 FC       mov eax,dword ptr ss:[ebp-4]
0049DEBD     E8 7EBEFAFF   call MyDriver.00449D40
0049DEC2     50            push eax
0049DEC3     E8 849CF6FF   call <jmp.&user32.MessageBoxA>

看到了吗?这里有成功的提示,那我们看看
0049DE90     0F84 B2010000 je MyDriver.0049E048
这行判断,错误的注册码就会跳到我们刚才那里。
所以我们在0049DE80下个F2
F9运行出来再试一次,OK断下。
走到0049DE89就可以把EAX的东西复制出来了,那个就是真的注册码。
好了,第一部分搞定,为什么叫第一部分呢。。。。



PART 2:文件注册

重新启动程序,是否发现过了5秒钟又是那个注册的网址打开的,呵呵
接着程序关闭,重新开启又提示注册,说明我们的破解不完美。
它还有其他验证。

我们继续在成功的地方往下看。
0049DEC8     8B45 FC       mov eax,dword ptr ss:[ebp-4]
0049DECB     C680 45030000>mov byte ptr ds:[eax+345],0
0049DED2     B2 01         mov dl,1
0049DED4     A1 485B4600   mov eax,dword ptr ds:[465B48]
0049DED9     E8 6A7DFCFF   call MyDriver.00465C48
0049DEDE     8945 F8       mov dword ptr ss:[ebp-8],eax
0049DEE1     33C0          xor eax,eax
0049DEE3     55            push ebp
0049DEE4     68 FDDF4900   push MyDriver.0049DFFD
0049DEE9     64:FF30       push dword ptr fs:[eax]
0049DEEC     64:8920       mov dword ptr fs:[eax],esp
0049DEEF     BA 01000080   mov edx,80000001
0049DEF4     8B45 F8       mov eax,dword ptr ss:[ebp-8]
0049DEF7     E8 EC7DFCFF   call MyDriver.00465CE8
0049DEFC     B1 01         mov cl,1
0049DEFE     BA E0E34900   mov edx,MyDriver.0049E3E0            ; ASCII 

"\Software\Microsoft\Windows\CurrentVersion\IPSec"
0049DF03     8B45 F8       mov eax,dword ptr ss:[ebp-8]
0049DF06     E8 457EFCFF   call MyDriver.00465D50
0049DF0B     84C0          test al,al
0049DF0D     74 0C         je short MyDriver.0049DF1B
0049DF0F     33C0          xor eax,eax
0049DF11     8945 F0       mov dword ptr ss:[ebp-10],eax
0049DF14     C745 F4 00000>mov dword ptr ss:[ebp-C],400E0000
0049DF1B     33C0          xor eax,eax
0049DF1D     55            push ebp
0049DF1E     68 7EDF4900   push MyDriver.0049DF7E
0049DF23     64:FF30       push dword ptr fs:[eax]
0049DF26     64:8920       mov dword ptr fs:[eax],esp
0049DF29     FF75 F4       push dword ptr ss:[ebp-C]
0049DF2C     FF75 F0       push dword ptr ss:[ebp-10]
0049DF2F     8D85 6CFFFFFF lea eax,dword ptr ss:[ebp-94]
0049DF35     E8 26DEF6FF   call MyDriver.0040BD60
0049DF3A     8B8D 6CFFFFFF mov ecx,dword ptr ss:[ebp-94]
0049DF40     BA 1CE44900   mov edx,MyDriver.0049E41C            ; ASCII "RISCx86"
0049DF45     8B45 F8       mov eax,dword ptr ss:[ebp-8]
0049DF48     E8 4782FCFF   call MyDriver.00466194
0049DF4D     8D95 68FFFFFF lea edx,dword ptr ss:[ebp-98]
0049DF53     8B45 FC       mov eax,dword ptr ss:[ebp-4]
0049DF56     8B80 00030000 mov eax,dword ptr ds:[eax+300]
0049DF5C     E8 3B56FAFF   call MyDriver.0044359C
0049DF61     8B8D 68FFFFFF mov ecx,dword ptr ss:[ebp-98]
0049DF67     BA 2CE44900   mov edx,MyDriver.0049E42C            ; ASCII "UserName"
0049DF6C     8B45 F8       mov eax,dword ptr ss:[ebp-8]
0049DF6F     E8 2082FCFF   call MyDriver.00466194

好像他把注册后的名字存放这里了前面的键存放的是系统的时间和软件安装的时间,
那我想肯定其他地方也有这个时间的验证把。我们就用OD查看字符串

搜索"RISCx86"果然还有,而且有很多,不过有一个地方比较特别,因为他后面也跟
了个"UserName"。直觉告诉我这里是重点,呵呵,因为一般的肯定是比较下时间什么
的。
那我们就进代码看看。

004C7F4F    .  B8 04814C00 mov eax,MyDriver.004C8104            ;  ASCII "windir"//这里下断

004C7F5C    .  BA 14814C00 mov edx,MyDriver.004C8114            ;  ASCII "\system.sys"

004C7FA8    .  BA 28814C00 mov edx,MyDriver.004C8128            ;  ASCII 

"\Software\Microsoft\Windows\CurrentVersion\IPSec"

004C7FE8    .  BA 68814C00 mov edx,MyDriver.004C8168            ;  ASCII "RISCx86"

004C7FF7    .  BA 78814C00 mov edx,MyDriver.004C8178            ;  ASCII "UserName"

004C803C    .  BA 68814C00 mov edx,MyDriver.004C8168            ;  ASCII "RISCx86"

004C804B    .  BA 78814C00 mov edx,MyDriver.004C8178            ;  ASCII "UserName"

关于ASCII的几句代码。那就在最前面的地方下个断点。
这次要重新启动程序过了,我们刚才不是发现过了5秒左右系统出来注册的网站的码?
那我们就先给他注册下,然后CTRL+F2重新开始调试,F9运行,等了一会断下。

004C7F4F    .  B8 04814C00 mov eax,MyDriver.004C8104            ;  ASCII "windir" //这里断下
004C7F54    .  E8 076DF4FF call MyDriver.0040EC60
004C7F59    .  8D45 F0     lea eax,dword ptr ss:[ebp-10]
004C7F5C    .  BA 14814C00 mov edx,MyDriver.004C8114            ;  ASCII "\system.sys"
004C7F61    .  E8 1ACFF3FF call MyDriver.00404E80
004C7F66    .  8B45 F0     mov eax,dword ptr ss:[ebp-10]
004C7F69    .  E8 8217F4FF call MyDriver.004096F0
004C7F6E    .  84C0        test al,al
004C7F70    .  75 02       jnz short MyDriver.004C7F74

F8走,到004C7F70挑走就失败了。这说明什么呢,呵呵,看前面几个字符串应该知道些眉目了。
BINGO。"windir"不是系统目录吗?"\system.sys"应该就是他验证的文件把。
这个简单我们用ULTRA editor在系统目录创建一个文件叫system.sys,内容先随便写,我写了
"Crack by 4nil"。
(后面会发现其实程序没有检测其内容,所以可以新建一个记事本文件,然后改名即可)
CTRL+F2重新开始调试。
输入注册名:4nil
注册码:WDW222226-346E696C
再注册一次。
然后重新运行程序,又在刚才的地方断了,呵呵,F8走,果然不跳了,说明他没验证我们写了
什么就监测了下是否有这个文件存在。
好了这样第二部分完成了。。。。。
哈哈,还没完呢


PART 3:功能完善

的确,现在软件不会再提示你注册了,但是当你使用里面的一个功能叫“将驱动制作成EXE安
装程序”的时候,制作出来的文件在安装的时候提示要注册,
当我们输入“WDW222226-346E696C”提示不正确。呵呵,那就继续破解。

我生成一个安装程序。
查出来是UPX 0.89.6 - 1.02 / 1.05 - 1.24 (Delphi) stub -> Markus & Laszlo,
照样这样脱掉,OD载入,
运行后它的错误提示是中文的,我发现代码里面没中文,那我看看有没有英文,呵呵,发现如下
"Incorrect registration code, please verify.
Please Register, and then you may restore your 

drivers"
肯定的错误提示拉,所以下个断,问我怎么找到的,呵呵,还是OD的字符串查看拉。

重新输入注册码,断了。
那我们看看上面点,有个字符串"WDW",这个不是我们那个的开头几位吗?下个断,重新输入注册码
断下

代码如下:
004635E0    .  B8 5C3D4600 mov eax,NVIDIA_G.00463D5C            ;  ASCII "WDW"
004635E5    .  E8 DE16FAFF call NVIDIA_G.00404CC8  //验证我们的注册码是否含"WDW"
004635EA    .  85C0        test eax,eax
004635EC    .  7E 3F       jle short NVIDIA_G.0046362D
004635EE    .  8D95 48FDFE>lea edx,dword ptr ss:[ebp+FFFEFD48]
004635F4    .  8B45 FC     mov eax,dword ptr ss:[ebp-4]
004635F7    .  8B80 000300>mov eax,dword ptr ds:[eax+300]
004635FD    .  E8 AA66FDFF call NVIDIA_G.00439CAC  //得到我们的假注册码
00463602    .  8B85 48FDFE>mov eax,dword ptr ss:[ebp+FFFEFD48]
00463608    .  50          push eax
00463609    .  8D95 44FDFE>lea edx,dword ptr ss:[ebp+FFFEFD44]
0046360F    .  B8 86170000 mov eax,1786  //这个是一个常数
00463614    .  E8 CB55FAFF call NVIDIA_G.00408BE4 //转换成字符串“6022”
00463619    .  8B85 44FDFE>mov eax,dword ptr ss:[ebp+FFFEFD44]
0046361F    .  5A          pop edx
00463620    .  E8 A316FAFF call NVIDIA_G.00404CC8 //验证我们的注册码是否含“6022”
00463625    .  85C0        test eax,eax

OK,这下知道了吧,你输入WDW6022就可以安装了,不过为了和我们刚才的注册码结合起来,我们
可以用这个WDW222226-346E696C6022。


总结一下:
用户名:4nil
注册码:WDW222226-346E696C6022

另外在注册前要在WINDOWS目录下新建一个文件叫“system.sys”.
完美破解,谢谢观赏。

------------------------------------------------------------------------
【破解总结】

注册码是通用的,所以注册机也不写,不过算法很简单的。可以自己看看。

------------------------------------------------------------------------
【版权声明】本文纯属技术交流, 转载请注明作者信息并保持文章的完整, 谢谢!

  • 标 题: 答复
  • 作 者:4nil
  • 时 间:2005-12-22 09:56

注册机的过程是这样的,

len=strlen(name);
printf("S/N:WDW2222%d-",26+len);
for(int i=0;i<len;i++)
        printf("%X",name[i]);
printf("6022\n");