DB Commander 2000 PRO(簡稱DBC_2000)筆記

看雪資料發表於2003-06-18

【前    言】:這是我用ME以外的作業系統破的第一個軟體!這個軟體對於架設<傳奇>私服的朋友是再熟悉不過了!以前這個軟體下載的地方都有破解補丁放在一起的,可是我找了好久都沒有找到,看來還是自己動手的好!

【軟體名稱】:DB Commander 2000 PRO(簡稱DBC_2000)

【下載頁面】:不記得了!

【軟體大小】:6812K

【應用平臺】:WIN9X/WINNT/WIN2K/WINXP

【軟體簡介】:全是鳥文.不知道有什麼用,就是知道架設<傳奇>私服一定要有的東西!

【軟體限制】:全是鳥文,看不懂!就知道沒有註冊的話,在啟動軟體的時候會有一個提醒註冊的視窗!

【文章作者】:輝仔Yock[DFCG][YCG]

【作者宣告】:本人發表這篇文章只是為了學習!!!請不用於商業用途或是將本文方法制作的序號產生器任意傳播,讀者看了文章後所做的事情與我無關,我也不會負責,請讀者看了文章後三思而後行!最後希望大家在經濟基礎好的時候,支援共享軟體!

【破解工具】: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                ;  ASCII "\Software\T&T Solutions\DB Commander 2000 PRO"
005413A3   . B8 1C145400    MOV EAX,TKDB_Com.0054141C                ;  ASCII "Tsapanidis"
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                                   ; /Arg1 = 00000000
005413C4   . 66:8B0D 281454>MOV CX,WORD PTR DS:[541428]              ; |
005413CB   . 33D2           XOR EDX,EDX                              ; |
005413CD   . B8 34145400    MOV EAX,TKDB_Com.00541434                ; |ASCII "Invalid registration number entered !"
            //這裡就是出錯的地方了!
005413D2   . E8 3569F0FF    CALL TKDB_Com.00447D0C                   ; \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
0054109A  |. B9 34125400    MOV ECX,TKDB_Com.00541234                ;  ASCII "\Software\T&T Solutions\DB Commander 2000 PRO"
0054109F  |. B2 01          MOV DL,1
005410A1  |. A1 C8BC4900    MOV EAX,DWORD PTR DS:[49BCC8]
005410A6  |. E8 6DB6F5FF    CALL TKDB_Com.0049C718
005410AB  |. 8BD8           MOV EBX,EAX
005410AD  |. BA 02000080    MOV EDX,80000002
005410B2  |. 8BC3           MOV EAX,EBX
005410B4  |. E8 A3ADF5FF    CALL TKDB_Com.0049BE5C
005410B9  |. BA 34125400    MOV EDX,TKDB_Com.00541234                ;  ASCII "\Software\T&T Solutions\DB Commander 2000 PRO"
005410BE  |. B1 01          MOV CL,1
005410C0  |. 8BC3           MOV EAX,EBX
005410C2  |. E8 F1AEF5FF    CALL TKDB_Com.0049BFB8
005410C7  |. 84C0           TEST AL,AL
005410C9  |. 74 5B          JE SHORT TKDB_Com.00541126
005410CB  |. 8D55 F8        LEA EDX,DWORD PTR SS:[EBP-8]
005410CE  |. A1 383B5700    MOV EAX,DWORD PTR DS:[573B38]
005410D3  |. 8B80 E0010000  MOV EAX,DWORD PTR DS:[EAX+1E0]
005410D9  |. E8 263DEEFF    CALL TKDB_Com.00424E04
005410DE  |. 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]
005410E1  |. 50             PUSH EAX
005410E2  |. B9 6C125400    MOV ECX,TKDB_Com.0054126C                ;  ASCII "Name"
005410E7  |. BA 7C125400    MOV EDX,TKDB_Com.0054127C                ;  ASCII "5.0.0.0"
005410EC  |. 8BC3           MOV EAX,EBX
005410EE  |. E8 39B7F5FF    CALL TKDB_Com.0049C82C
005410F3  |. 8D55 F4        LEA EDX,DWORD PTR SS:[EBP-C]
005410F6  |. A1 383B5700    MOV EAX,DWORD PTR DS:[573B38]
005410FB  |. 8B80 EC010000  MOV EAX,DWORD PTR DS:[EAX+1EC]
00541101  |. E8 468CF0FF    CALL TKDB_Com.00449D4C
00541106  |. 8B45 F4        MOV EAX,DWORD PTR SS:[EBP-C]
00541109  |. 8D55 FC        LEA EDX,DWORD PTR SS:[EBP-4]
0054110C  |. E8 53F8FFFF    CALL TKDB_Com.00540964
00541111  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
00541114  |. 50             PUSH EAX
00541115  |. BA 7C125400    MOV EDX,TKDB_Com.0054127C                ;  ASCII "5.0.0.0"
0054111A  |. B9 8C125400    MOV ECX,TKDB_Com.0054128C                ;  ASCII "RegNumber"
0054111F  |. 8BC3           MOV EAX,EBX
00541121  |. E8 06B7F5FF    CALL TKDB_Com.0049C82C
00541126  |> 8BC3           MOV EAX,EBX
00541128  |. E8 C320ECFF    CALL TKDB_Com.004031F0
0054112D  |. 6A 00          PUSH 0                                   ; /BeepType = MB_OK
0054112F  |. E8 4C64ECFF    CALL <JMP.&user32.MessageBeep>           ; \MessageBeep
00541134  |. 6A 00          PUSH 0                                   ; /Arg1 = 00000000
00541136  |. 66:8B0D 981254>MOV CX,WORD PTR DS:[541298]              ; |
0054113D  |. B2 02          MOV DL,2                                 ; |
0054113F  |. B8 A4125400    MOV EAX,TKDB_Com.005412A4                ; |ASCII "Congratulations, upgrade was succesful.
You now have the registered version of DB Commander 2000 PRO !"
00541144  |. E8 C36BF0FF    CALL TKDB_Com.00447D0C                   ; \TKDB_Com.00447D0C
00541149  |. EB 49          JMP SHORT TKDB_Com.00541194
0054114B  |> 6A 40          PUSH 40                                  ; /BeepType = MB_ICONASTERISK
0054114D  |. E8 2E64ECFF    CALL <JMP.&user32.MessageBeep>           ; \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                                   ; /Arg1 = 00000000
0054115E  |. 66:8B0D 981254>MOV CX,WORD PTR DS:[541298]              ; |
00541165  |. 33D2           XOR EDX,EDX                              ; |
00541167  |. B8 14135400    MOV EAX,TKDB_Com.00541314                ; |ASCII "Invalid registration number entered !
Goodbye..."
            //這裡是註冊成功的地方!

0054116C  |. E8 9B6BF0FF    CALL TKDB_Com.00447D0C                   ; \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                                   ; /Arg1 = 00000000
00541181  |. 66:8B0D 981254>MOV CX,WORD PTR DS:[541298]              ; |
00541188  |. 33D2           XOR EDX,EDX                              ; |
0054118A  |. B8 50135400    MOV EAX,TKDB_Com.00541350                ; |ASCII "Invalid registration number entered !"
            //這裡是另外一個出錯的地方了!

0054118F  |. E8 786BF0FF    CALL TKDB_Com.00447D0C                   ; \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
00540836  |. 64:8910        MOV DWORD PTR FS:[EAX],EDX
00540839  |. 68 53085400    PUSH TKDB_Com.00540853
0054083E  |> 8D45 F0        LEA EAX,DWORD PTR SS:[EBP-10]
00540841  |. BA 04000000    MOV EDX,4
00540846  |. E8 8135ECFF    CALL TKDB_Com.00403DCC
0054084B  \. C3             RETN
0054084C   .^E9 6B2FECFF    JMP TKDB_Com.004037BC
00540851   .^EB EB          JMP SHORT TKDB_Com.0054083E
00540853   . 8BC3           MOV EAX,EBX
00540855   . 5F             POP EDI
00540856   . 5E             POP ESI
00540857   . 5B             POP EBX
00540858   . 8BE5           MOV ESP,EBP
0054085A   . 5D             POP EBP
0054085B   . C3             RETN


------------------------------------------------------------------
【總    結】:

又來到我最怕的地方了---總結!

說起來,這個軟體又一個地方我搞不懂的就是為什麼要檢查登錄檔的
[\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

--------------------------------------------------------------------
最後在這裡真心感謝你花了那麼多時間看這篇文章!謝謝了...
                                         2003.6.18於清遠


相關文章