[摘要]【前    言】:这是我用ME以外的操作系统破的第一个软件!这个软件对于架设<传奇>私服的朋友是再熟悉不过了!以前这个软件下载的地方都有破解补丁放在一起的,可是我找了好久都没有找到,看来...
 【前    言】:这是我用ME以外的操作系统破的第一个软件!这个软件对于架设<传奇>私服的朋友是再熟悉不过了!以前这个软件下载的地方都有破解补丁放在一起的,可是我找了好久都没有找到,看来还是自己动手的好! 
【软件名称】:DB Commander 2000 PRO(简称DBC_2000) 
【作者声明】:本人发表这篇文章只是为了学习!!!请不用于商业用途或是将本文方法制作的注册机任意传播,读者看了文章后所做的事情与我无关,我也不会负责,请读者看了文章后三思而后行!最后希望大家在经济基础好的时候,支持共享软件! 
【破解工具】:Ollydbg 
—————————————————————————————————  
【过    程】: 
用Ollydbg加载主程序DB_Commander.exe 
根据字符参考知道出错的地方一共有三处,分别对这三个地方下断! 
输入用户名Yock和注册码987-654-321后,按注册,拦下: 
00541398   . 53             PUSH EBX 
00541399   . 56             PUSH ESI 
0054139A   . 8BF2           MOV ESI,EDX 
0054139C   . 8BD8           MOV EBX,EAX 
0054139E   . BA E4135400    MOV EDX,TKDB_Com.005413E4 
005413A3   . B8 1C145400    MOV EAX,TKDB_Com.0054141C 
005413A8   . E8 5F2FECFF    CALL TKDB_Com.0040430C 
            //这里好像是验证注册表是否有"Tsapanidis"这个值! 
            //但是我注册表里面没有这个值! 
            //这里可能是一个暗桩吧! 
005413AD   . 85C0           TEST EAX,EAX 
005413AF   . 7E 0C          JLE SHORT TKDB_Com.005413BD 
            //这里不能跳,以跳下去就挂了! 
            //我这里是跳的,所以我把这里NOP掉了! 
005413B1   . 8BD6           MOV EDX,ESI 
005413B3   . 8BC3           MOV EAX,EBX 
005413B5   . E8 76FCFFFF    CALL TKDB_Com.00541030 
            //这里是关键,根进去! 
005413BA   . 5E             POP ESI 
005413BB   . 5B             POP EBX 
005413BC   . C3             RETN 
005413BD   > E8 5AB4ECFF    CALL TKDB_Com.0040C81C 
005413C2   . 6A 00          PUSH 0 
005413C4   . 66:8B0D 281454>MOV CX,WORD PTR DS:[541428] 
005413CB   . 33D2           XOR EDX,EDX 
005413CD   . B8 34145400    MOV EAX,TKDB_Com.00541434 
            //这里就是出错的地方了! 
005413D2   . E8 3569F0FF    CALL TKDB_Com.00447D0C 
005413D7   . 5E             POP ESI 
005413D8   . 5B             POP EBX 
005413D9   . C3             RETN 
----------------------------------------------------------------- 
上面5413b5的CALL来到这里! 
00541030  /$ 55             PUSH EBP 
00541031   . 8BEC           MOV EBP,ESP 
00541033   . 6A 00          PUSH 0 
00541035   . 6A 00          PUSH 0 
00541037   . 6A 00          PUSH 0 
00541039   . 53             PUSH EBX 
0054103A   . 33C0           XOR EAX,EAX 
0054103C   . 55             PUSH EBP 
0054103D   . 68 20125400    PUSH TKDB_Com.00541220 
00541042   . 64:FF30        PUSH DWORD PTR FS:[EAX] 
00541045   . 64:8920        MOV DWORD PTR FS:[EAX],ESP 
00541048   . A1 AC215700    MOV EAX,DWORD PTR DS:[5721AC] 
0054104D   . FF00           INC DWORD PTR DS:[EAX] 
0054104F   . 8D55 FC        LEA EDX,DWORD PTR SS:[EBP-4] 
00541052   . A1 383B5700    MOV EAX,DWORD PTR DS:[573B38] 
00541057   . 8B80 EC010000  MOV EAX,DWORD PTR DS:[EAX+1EC] 
0054105D   . E8 EA8CF0FF    CALL TKDB_Com.00449D4C 
00541062   . 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4] 
00541065   . 50             PUSH EAX 
00541066   . 8D55 F8        LEA EDX,DWORD PTR SS:[EBP-8] 
00541069   . A1 383B5700    MOV EAX,DWORD PTR DS:[573B38] 
0054106E   . 8B80 E0010000  MOV EAX,DWORD PTR DS:[EAX+1E0] 
00541074   . E8 8B3DEEFF    CALL TKDB_Com.00424E04 
00541079   . 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8] 
            //这里是用户名! 
0054107C   . 5A             POP EDX 
            //这里是输入的假注册码! 
0054107D   . E8 8EF6FFFF    CALL TKDB_Com.00540710 
            //关键跟进去! 
00541082   . 84C0           TEST AL,AL 
00541084   . 0F84 C1000000  JE TKDB_Com.0054114B 
            //这里不跳的话,就把正确的注册信息保存起来! 
            //跳走的话就出错咯! 
0054108A   . A1 C81C5700    MOV EAX,DWORD PTR DS:[571CC8] 
0054108F   . C600 01        MOV BYTE PTR DS:[EAX],1 
00541092   . A1 B0215700    MOV EAX,DWORD PTR DS:[5721B0] 
00541097   . C600 00        MOV BYTE PTR DS:[EAX],0 
............................ 
............. 
00541144   . E8 C36BF0FF    CALL TKDB_Com.00447D0C 
00541149   . EB 49          JMP SHORT TKDB_Com.00541194 
0054114B   > 6A 40          PUSH 40 
0054114D   . E8 2E64ECFF    CALL <JMP.&user32.MessageBeep> 
00541152   . A1 AC215700    MOV EAX,DWORD PTR DS:[5721AC] 
00541157   . 8338 03        CMP DWORD PTR DS:[EAX],3 
0054115A   . 7C 23          JL SHORT TKDB_Com.0054117F 
0054115C   . 6A 00          PUSH 0 
0054115E   . 66:8B0D 981254>MOV CX,WORD PTR DS:[541298] 
00541165   . 33D2           XOR EDX,EDX 
00541167   . B8 14135400    MOV EAX,TKDB_Com.00541314 
Goodbye..." 
            //这里是注册成功的地方! 
0054116C   . E8 9B6BF0FF    CALL TKDB_Com.00447D0C 
00541171   . A1 D41F5700    MOV EAX,DWORD PTR DS:[571FD4] 
00541176   . 8B00           MOV EAX,DWORD PTR DS:[EAX] 
00541178   . E8 634FEFFF    CALL TKDB_Com.004360E0 
0054117D   . EB 15          JMP SHORT TKDB_Com.00541194 
0054117F   > 6A 00          PUSH 0 
00541181   . 66:8B0D 981254>MOV CX,WORD PTR DS:[541298] 
00541188   . 33D2           XOR EDX,EDX 
0054118A   . B8 50135400    MOV EAX,TKDB_Com.00541350 
            //这里是另外一个出错的地方了! 
0054118F   . E8 786BF0FF    CALL TKDB_Com.00447D0C 
00541194   > A1 C81C5700    MOV EAX,DWORD PTR DS:[571CC8] 
00541199   . 8038 00        CMP BYTE PTR DS:[EAX],0 
0054119C   . 74 52          JE SHORT TKDB_Com.005411F0 
----------------------------------------------------------------- 
上面54107d的CALL来到这里! 
00540710  /$ 55             PUSH EBP 
00540711   . 8BEC           MOV EBP,ESP 
00540713   . 83C4 F0        ADD ESP,-10 
00540716   . 53             PUSH EBX 
00540717   . 56             PUSH ESI 
00540718   . 57             PUSH EDI 
00540719   . 33C9           XOR ECX,ECX 
0054071B   . 894D F0        MOV DWORD PTR SS:[EBP-10],ECX 
0054071E   . 894D F4        MOV DWORD PTR SS:[EBP-C],ECX 
00540721   . 8955 F8        MOV DWORD PTR SS:[EBP-8],EDX 
00540724   . 8945 FC        MOV DWORD PTR SS:[EBP-4],EAX 
00540727   . 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4] 
0054072A   . E8 A93AECFF    CALL TKDB_Com.004041D8 
0054072F   . 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8] 
00540732   . E8 A13AECFF    CALL TKDB_Com.004041D8 
00540737   . 33C0           XOR EAX,EAX 
00540739   . 55             PUSH EBP 
0054073A   . 68 4C085400    PUSH TKDB_Com.0054084C 
0054073F   . 64:FF30        PUSH DWORD PTR FS:[EAX] 
00540742   . 64:8920        MOV DWORD PTR FS:[EAX],ESP 
00540745   . 33FF           XOR EDI,EDI 
00540747   . 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4] 
            //输入的用户名! 
0054074A   . E8 D538ECFF    CALL TKDB_Com.00404024 
            //取用户名的位数! 
0054074F   . 8BF0           MOV ESI,EAX 
00540751   . 85F6           TEST ESI,ESI 
            //是否有用户名! 
00540753   . 7E 34          JLE SHORT TKDB_Com.00540789 
            //没有就跳走咯! 
00540755   . BB 01000000    MOV EBX,1 
            //赋值1,EBX作为计数器! 
0054075A   > 8B45 FC        /MOV EAX,DWORD PTR SS:[EBP-4] 
0054075D   . 8A4418 FF       MOV AL,BYTE PTR DS:[EAX+EBX-1] 
00540761   . 8BD0            MOV EDX,EAX 
00540763   . 80C2 D0         ADD DL,0D0 
00540766   . 80EA 0A         SUB DL,0A 
00540769   . 72 10           JB SHORT TKDB_Com.0054077B 
            //比较当前用户名是否是数字,是的话就跳下去直接累加! 
0054076B   . 80C2 F9         ADD DL,0F9 
0054076E   . 80EA 1A         SUB DL,1A 
00540771   . 72 08           JB SHORT TKDB_Com.0054077B 
            //比较当前用户名是否是大写字母,是的话就跳下取直接累加! 
00540773   . 80C2 FA         ADD DL,0FA 
00540776   . 80EA 1A         SUB DL,1A 
00540779   . 73 0A           JNB SHORT TKDB_Com.00540785 
            //比较当前用户名是否是小写字母,是的话就不跳! 
            //如果不是小写字母的话跳走不累加了! 
0054077B   > 8B55 FC         MOV EDX,DWORD PTR SS:[EBP-4] 
0054077E   . 25 FF000000     AND EAX,0FF 
00540783   . 03F8            ADD EDI,EAX 
00540785   > 43              INC EBX 
00540786   . 4E              DEC ESI 
00540787   .^75 D1          \JNZ SHORT TKDB_Com.0054075A 
            //从0054075A到这里的循环是把用户名的值累加起来 
            //累加的结果保存再EDI里面! 
            //注意:要是用户名有非法字符和空格的话,就不作计算! 
            //也就是说,只计算用户名的"A-Z"和"a-z"和"0-9"之间的数! 
00540789   > 8BC7           MOV EAX,EDI 
            //累加值=EDI=EAX 
0054078B   . C1E0 02        SHL EAX,2 
            //逻辑左移 
0054078E   . 8BD7           MOV EDX,EDI 
            //EDI=EDX=累加值 
00540790   . 4A             DEC EDX 
            //减一 
00540791   . 8BCA           MOV ECX,EDX 
            //EDX=ECX=累加值减一 
00540793   . 99             CDQ 
00540794   . F7F9           IDIV ECX 
            //整数除法 
00540796   . 8BD7           MOV EDX,EDI 
            //累加值=EDI=EDX 
00540798   . 85D2           TEST EDX,EDX 
            //这里我理解是--是否有累加值,有的话就跳! 
0054079A   . 79 03          JNS SHORT TKDB_Com.0054079F 
            //我这里是跳下去的! 
0054079C   . 83C2 03        ADD EDX,3 
0054079F   > C1FA 02        SAR EDX,2 
            //算术右移 
005407A2   . 0FAFD7         IMUL EDX,EDI 
            //EDX=EDX*EDI 
005407A5   . 03C2           ADD EAX,EDX 
            //EAX=EAX+EDX 
005407A7   . 05 391B0000    ADD EAX,1B39 
            //累加1B39 
005407AC   . 8BF8           MOV EDI,EAX 
            //EAX=EDI 
005407AE   . 81C7 00E1F505  ADD EDI,5F5E100 
            //累加5F5E100 
            //这里的EDI的十进制就十真的注册码了! 
            //注册码就是怎么练成的! 
            //对于我来说,我有学到了一些宝贵的东西了,你呢??? 
005407B4   . 8D45 F4        LEA EAX,DWORD PTR SS:[EBP-C] 
005407B7   . E8 EC35ECFF    CALL TKDB_Com.00403DA8 
005407BC   . 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8] 
            //这里是输入的假注册码! 
005407BF   . E8 6038ECFF    CALL TKDB_Com.00404024 
            //取假注册码的位数! 
005407C4   . 8BF0           MOV ESI,EAX 
005407C6   . 85F6           TEST ESI,ESI 
            //有没有输入? 
005407C8   . 7E 3C          JLE SHORT TKDB_Com.00540806 
            //没有输入注册码就跳走咯! 
005407CA   . BB 01000000    MOV EBX,1 
            //赋值1,EBX作为计数器! 
005407CF   > 8B45 F8        /MOV EAX,DWORD PTR SS:[EBP-8] 
005407D2   . 8A4418 FF       MOV AL,BYTE PTR DS:[EAX+EBX-1] 
005407D6   . 04 D0           ADD AL,0D0 
005407D8   . 2C 0A           SUB AL,0A 
005407DA   . 72 0C           JB SHORT TKDB_Com.005407E8 
005407DC   . 04 F9           ADD AL,0F9 
005407DE   . 2C 1A           SUB AL,1A 
005407E0   . 72 06           JB SHORT TKDB_Com.005407E8 
005407E2   . 04 FA           ADD AL,0FA 
005407E4   . 2C 1A           SUB AL,1A 
005407E6   . 73 1A           JNB SHORT TKDB_Com.00540802 
005407E8   > 8D45 F0         LEA EAX,DWORD PTR SS:[EBP-10] 
005407EB   . 8B55 F8         MOV EDX,DWORD PTR SS:[EBP-8] 
005407EE   . 8A541A FF       MOV DL,BYTE PTR DS:[EDX+EBX-1] 
005407F2   . E8 5537ECFF     CALL TKDB_Com.00403F4C 
005407F7   . 8B55 F0         MOV EDX,DWORD PTR SS:[EBP-10] 
005407FA   . 8D45 F4         LEA EAX,DWORD PTR SS:[EBP-C] 
005407FD   . E8 2A38ECFF     CALL TKDB_Com.0040402C 
00540802   > 43              INC EBX 
00540803   . 4E              DEC ESI 
00540804   .^75 C9          \JNZ SHORT TKDB_Com.005407CF 
            //从005407CF到这里的循环是把注册码的"-"去掉的! 
            //举个例子,我输入的注册码是"987-654-321" 
            //经过这里有就变成"987654321"了! 
00540806   > 8D55 F0        LEA EDX,DWORD PTR SS:[EBP-10] 
00540809   . 8BC7           MOV EAX,EDI 
0054080B   . E8 F47FECFF    CALL TKDB_Com.00408804 
00540810   . 8B45 F0        MOV EAX,DWORD PTR SS:[EBP-10] 
            //这里就是真的注册码了! 
00540813   . 8B55 F4        MOV EDX,DWORD PTR SS:[EBP-C] 
            //这里是我输入的假注册码! 
00540816   . E8 1939ECFF    CALL TKDB_Com.00404134 
0054081B   . 0F94C3         SETE BL 
0054081E   . BA 64085400    MOV EDX,TKDB_Com.00540864                ;  ASCII "Beverly Saunders Site" 
            //这个就是万能注册名了! 
00540823   . 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4] 
            //这里是输入的用户名! 
            //可见这个软件有一个万能注册名的! 
00540826   . E8 E13AECFF    CALL TKDB_Com.0040430C 
0054082B   . 85C0           TEST EAX,EAX 
0054082D   . 7E 02          JLE SHORT TKDB_Com.00540831 
0054082F   . 33DB           XOR EBX,EBX 
00540831   > 33C0           XOR EAX,EAX 
00540833   . 5A             POP EDX 
00540834   . 59             POP ECX 
00540835   . 59             POP ECX 
------------------------------------------------------------------ 
【总    结】: 
又来到我最怕的地方了---总结! 
说起来,这个软件又一个地方我搞不懂的就是为什么要检查注册表的 
[\Software\T&T Solutions\DB Commander 2000 PRO] 
Tsapanidis 
我的机子里面没有这个项目,所以要把 
005413AF   . 7E 0C          JLE SHORT TKDB_Com.005413BD 
NOP掉才可以注册成功!如果大虾们愿意研究的话,可以告诉我一个究竟吗? 
把用户名的字符的ASCII码累加以来!(非法字符和空格除外,只累加这些值.包括"A-Z"/"a-z"/"0-9") 
最后把累加值经过下面的运算得出得结果的十进制就是真的注册码了! 
累加值=EAX=EDI 
MOV EAX,EDI 
SHL EAX,2 
MOV EDX,EDI 
DEC EDX 
MOV ECX,EDX 
CDQ 
IDIV ECX 
SAR EDX,2 
IMUL EDX,EDI 
ADD EAX,EDX 
ADD EAX,1B39 
MOV EDI,EAX 
ADD EDI,5F5E100 
最后注册码的结果=EDI的十进制值! 
注册信息保存在: 
[HKEY_LOCAL_MACHINE\SOFTWARE\T&T Solutions\DB Commander 2000 PRO\5.0.0.0] 
"RegNumber"="005F69C6B" 
//保存方式是注册码的十六进制! 
一组可用的注册码: 
Yock 
100-047-979 
-------------------------------------------------------------------- 
最后在这里真心感谢你花了那么多时间看这篇文章!谢谢了... 
网络的神奇作用吸引着越来越多的用户加入其中,正因如此,网络的承受能力也面临着越来越严峻的考验―从硬件上、软件上、所用标准上......,各项技术都需要适时应势,对应发展,这正是网络迅速走向进步的催化剂。
  关键词:DB Commander 2000 PRO(简称DBC_2000)笔记