破解心得之CDRWin 4.0A BETA篇 (18千字)

看雪資料發表於2001-04-24

破解心得之CDRWin 4.0A BETA篇

作者:時空幻影
時間:2001年4月20日
破解工具:W32DASM v8.93白金版漢化版、TRW2000 v1.23註冊版

軟體名稱:CDRWin
釋出公司:Golden Hawk Technology
最新版本:4.0A Beta
作業系統:Win9x/ME/NT4/2000
軟體簡介:CDRWin 是一套強力的特點極多的燒錄軟體,它可以:支援 AUDIO、CDROM (Mode1)、CDROM-XA (Mode2)、CD-I、混合型、多重扇區碟片;獨有的 CUE SHEET 語言可以 100% 定製碟片的佈局,避免其他燒錄軟體在不同 track 之間產生間隔的現象;強大的備份功能可以防止碟片上原有資料的損失;符合 ISO9660 磁碟控制標準;可以製作光碟啟動盤;支援 Karaoke CD G 碟片(需要Sony CDW-900E, Panasonic 或 Yamaha 燒錄機);僅有的支援 Philips/Kodak/HP 家族燒錄機 Disc-at-once 技術的軟體;支援碟片的 UPC 碼和 track 的 ISRC 碼;支援“Kodak Disc Transporter”高速碟片複製技術。

    由於該軟體沒有加殼,所以破解相對容易一些!!!呵呵,希望大家指出不足之處!!!
    1.執行CDRWin 4.0A BETA,點選unlock圖示,填入
      name:shikonghuanying
      company:Changsha
      Unlock Key:12345-67890-09876-54321
      Check Key:ABCDE-BCDEF-FEDCB-EDCBA(為什麼要這樣?待會兒再告知)
    2.執行TRW2000,按ctrl+N啟用它,用BPX HMEMCPY設定斷點,再按F5繼續.
    3.點選Unlock,會被TRW2000攔下,輸入BD *使斷點暫時失效,再輸入PMODULE跳入程式領空。
    4.再按幾下F10,會到以下所指的地方:

* Possible Reference to String Resource ID=00255: "Invalid disc count specified."
                                  |
:0041DF43 6AFF                    push FFFFFFFF
:0041DF45 68D0664700              push 004766D0
:0041DF4A 64A100000000            mov eax, dword ptr fs:[00000000]
:0041DF50 50                      push eax
:0041DF51 64892500000000          mov dword ptr fs:[00000000], esp
:0041DF58 83EC38                  sub esp, 00000038
:0041DF5B A1F0A04A00              mov eax, dword ptr [004AA0F0]
:0041DF60 53                      push ebx
:0041DF61 56                      push esi
:0041DF62 57                      push edi
:0041DF63 8965F0                  mov dword ptr [ebp-10], esp
:0041DF66 8BF1                    mov esi, ecx
:0041DF68 8945E0                  mov dword ptr [ebp-20], eax
:0041DF6B C745FC00000000          mov [ebp-04], 00000000
:0041DF72 8945E4                  mov dword ptr [ebp-1C], eax
:0041DF75 8945E8                  mov dword ptr [ebp-18], eax
:0041DF78 8945EC                  mov dword ptr [ebp-14], eax
:0041DF7B 8B4E68                  mov ecx, dword ptr [esi+68]
:0041DF7E 8D45E0                  lea eax, dword ptr [ebp-20]
:0041DF81 BB03000000              mov ebx, 00000003
:0041DF86 50                      push eax
:0041DF87 885DFC                  mov byte ptr [ebp-04], bl
:0041DF8A E81DC30400              call 0046A2AC
:0041DF8F 8D4DE4                  lea ecx, dword ptr [ebp-1C]
:0041DF92 51                      push ecx                    <--按F10會到這裡,然後繼續按F10
:0041DF93 8B4E6C                  mov ecx, dword ptr [esi+6C]
:0041DF96 E811C30400              call 0046A2AC
:0041DF9B 8B4E70                  mov ecx, dword ptr [esi+70]
:0041DF9E 8D55E8                  lea edx, dword ptr [ebp-18]
:0041DFA1 52                      push edx
:0041DFA2 E805C30400              call 0046A2AC
:0041DFA7 8B4E74                  mov ecx, dword ptr [esi+74]
:0041DFAA 8D45EC                  lea eax, dword ptr [ebp-14]
:0041DFAD 50                      push eax
:0041DFAE E8F9C20400              call 0046A2AC
:0041DFB3 8D4DBC                  lea ecx, dword ptr [ebp-44]
:0041DFB6 8D55C0                  lea edx, dword ptr [ebp-40]
:0041DFB9 51                      push ecx
:0041DFBA 8D45C4                  lea eax, dword ptr [ebp-3C]
:0041DFBD 52                      push edx
:0041DFBE 8B55E8                  mov edx, dword ptr [ebp-18]
:0041DFC1 8D4DC8                  lea ecx, dword ptr [ebp-38]
:0041DFC4 50                      push eax
:0041DFC5 51                      push ecx

* Possible StringData Ref from Data Obj ->"%lx-%lx-%lx-%lx"  <--指明瞭Unlock Key的格式
                                  |
:0041DFC6 68FC214A00              push 004A21FC
:0041DFCB 52                      push edx
:0041DFCC E82C860300              call 004565FD      <--檢查是不是符合上面的格式,並把字元轉為HEX
:0041DFD1 83C418                  add esp, 00000018
:0041DFD4 83F804                  cmp eax, 00000004
:0041DFD7 0F8597000000            jne 0041E074
:0041DFDD 8D45CC                  lea eax, dword ptr [ebp-34]
:0041DFE0 8D4DD0                  lea ecx, dword ptr [ebp-30]
:0041DFE3 50                      push eax
:0041DFE4 8D55D4                  lea edx, dword ptr [ebp-2C]
:0041DFE7 51                      push ecx
:0041DFE8 8B4DEC                  mov ecx, dword ptr [ebp-14]
:0041DFEB 8D45D8                  lea eax, dword ptr [ebp-28]
:0041DFEE 52                      push edx
:0041DFEF 50                      push eax

* Possible StringData Ref from Data Obj ->"%lx-%lx-%lx-%lx"  <--指明瞭Check Key的格式
                                  |
:0041DFF0 68FC214A00              push 004A21FC
:0041DFF5 51                      push ecx
:0041DFF6 E802860300              call 004565FD      <--檢查是不是符合上面的格式,並把字元轉為HEX
:0041DFFB 83C418                  add esp, 00000018
:0041DFFE 83F804                  cmp eax, 00000004
:0041E001 7571                    jne 0041E074
:0041E003 8B4DE4                  mov ecx, dword ptr [ebp-1C]
:0041E006 8845FC                  mov byte ptr [ebp-04], al
:0041E009 8D55CC                  lea edx, dword ptr [ebp-34]
:0041E00C 8D45BC                  lea eax, dword ptr [ebp-44]
:0041E00F 52                      push edx
:0041E010 8B55E0                  mov edx, dword ptr [ebp-20]
:0041E013 50                      push eax
:0041E014 51                      push ecx
:0041E015 52                      push edx
:0041E016 E845630000              call 00424360      <--按F8進入
:0041E01B 83C410                  add esp, 00000010
:0041E01E 895DFC                  mov dword ptr [ebp-04], ebx

    下面為Unlock Key和Check Key比較的部分,假設Key的各部分為:
Unlock Key:12345-67890-09876-54321
            ^^^^^ ^^^^^ ^^^^^ ^^^^^
              u1    u2    u3    u4

Check Key:ABCDE-BCDEF-FEDCB-EDCBA
          ^^^^^ ^^^^^ ^^^^^ ^^^^^
            c1    c2    c3    c4

* Referenced by a CALL at Address:
|:0041E016 
|
:00424360 8B4C2410                mov ecx, dword ptr [esp+10]
:00424364 53                      push ebx
:00424365 55                      push ebp
:00424366 56                      push esi
:00424367 8B742418                mov esi, dword ptr [esp+18]
:0042436B 8B19                    mov ebx, dword ptr [ecx]      <--ebx=c4
:0042436D 57                      push edi
:0042436E 8B3E                    mov edi, dword ptr [esi]      <--edi=u4
:00424370 8B4604                  mov eax, dword ptr [esi+04]    <--eax=u3
:00424373 8BD7                    mov edx, edi
:00424375 33D0                    xor edx, eax
:00424377 3BDA                    cmp ebx, edx
:00424379 7525                    jne 004243A0                  <--這個和下面兩個jne一定不能跳轉
:0042437B 8B5608                  mov edx, dword ptr [esi+08]    <--edx=u2
:0042437E 8BDA                    mov ebx, edx
:00424380 33D8                    xor ebx, eax
:00424382 8B4104                  mov eax, dword ptr [ecx+04]    <--eax=c3
:00424385 3BC3                    cmp eax, ebx
:00424387 7517                    jne 004243A0
:00424389 8B460C                  mov eax, dword ptr [esi+0C]    <--eax=u1
:0042438C 8BD8                    mov ebx, eax
:0042438E 33DA                    xor ebx, edx
:00424390 8B5108                  mov edx, dword ptr [ecx+08]    <--edx=c2
:00424393 3BD3                    cmp edx, ebx
:00424395 7509                    jne 004243A0
:00424397 8B510C                  mov edx, dword ptr [ecx+0C]    <--edx=c1
:0042439A 33C7                    xor eax, edi
:0042439C 3BD0                    cmp edx, eax
:0042439E 7413                    je 004243B3                    <--這個則一定要跳轉

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00424379(C), :00424387(C), :00424395(C)
|
:004243A0 6A00                    push 00000000
:004243A2 6A00                    push 00000000
:004243A4 6A00                    push 00000000
:004243A6 6838FFFFFF              push FFFFFF38
:004243AB E8F0360000              call 00427AA0                  <--彈出註冊失敗視窗
:004243B0 83C410                  add esp, 00000010

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0042439E(C)
|
:004243B3 8B6C2418                mov ebp, dword ptr [esp+18]
:004243B7 8B7C2414                mov edi, dword ptr [esp+14]
:004243BB 56                      push esi
:004243BC 55                      push ebp
:004243BD 57                      push edi
:004243BE E8ED040000              call 004248B0                  <--按F8進入
:004243C3 83C40C                  add esp, 0000000C
:004243C6 85C0                    test eax, eax
:004243C8 7510                    jne 004243DA
:004243CA 50                      push eax
:004243CB 50                      push eax
:004243CC 50                      push eax
:004243CD 6837FFFFFF              push FFFFFF37
:004243D2 E8C9360000              call 00427AA0                  <--彈出註冊失敗視窗
:004243D7 83C410                  add esp, 00000010

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004243C8(C)
|
:004243DA 8B1E                    mov ebx, dword ptr [esi]
:004243DC C1EB10                  shr ebx, 10
:004243DF 66335E04                xor bx, word ptr [esi+04]
:004243E3 81E3FFFF0000            and ebx, 0000FFFF
:004243E9 8D43F1                  lea eax, dword ptr [ebx-0F]
:004243EC 3DBC040000              cmp eax, 000004BC
:004243F1 7E13                    jle 00424406                  <--這個一定要跳轉
:004243F3 6A00                    push 00000000
:004243F5 6A00                    push 00000000
:004243F7 6A00                    push 00000000
:004243F9 6834FFFFFF              push FFFFFF34
:004243FE E89D360000              call 00427AA0                  <--彈出註冊失敗視窗
:00424403 83C410                  add esp, 00000010

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004243F1(C)
|
:00424406 83C30F                  add ebx, 0000000F
:00424409 81FBBC040000            cmp ebx, 000004BC
:0042440F 7D13                    jge 00424424                  <--這個也一定要跳轉
:00424411 6A00                    push 00000000
:00424413 6A00                    push 00000000
:00424415 6A00                    push 00000000
:00424417 6835FFFFFF              push FFFFFF35
:0042441C E87F360000              call 00427AA0                  <--彈出註冊失敗視窗
:00424421 83C410                  add esp, 00000010

    在那個call 00427AA0按F8進入後來到以下:

* Referenced by a CALL at Addresses:
|:004242D8  , :004243BE 
|
:004248B0 8B44240C                mov eax, dword ptr [esp+0C]
:004248B4 8B542404                mov edx, dword ptr [esp+04]
:004248B8 53                      push ebx
:004248B9 55                      push ebp
:004248BA 8B18                    mov ebx, dword ptr [eax]      <--ebx=54321
:004248BC 57                      push edi
:004248BD 8BFA                    mov edi, edx
:004248BF 83C9FF                  or ecx, FFFFFFFF
:004248C2 33C0                    xor eax, eax
:004248C4 F2                      repnz
:004248C5 AE                      scasb
:004248C6 F7D1                    not ecx
:004248C8 49                      dec ecx
:004248C9 83F906                  cmp ecx, 00000006              <--檢查name的長度是否大於等於6,
:004248CC 726B                    jb 00424939                      name的長度應該>=6
:004248CE 8B6C2414                mov ebp, dword ptr [esp+14]
:004248D2 83C9FF                  or ecx, FFFFFFFF
:004248D5 8BFD                    mov edi, ebp
:004248D7 F2                      repnz
:004248D8 AE                      scasb
:004248D9 F7D1                    not ecx
:004248DB 49                      dec ecx
:004248DC 83F906                  cmp ecx, 00000006            <--檢查company的長度是否大於等於6,
:004248DF 7258                    jb 00424939                    company的長度應該>=6
:004248E1 F7C3FFFF0000            test ebx, 0000FFFF
:004248E7 7450                    je 00424939
:004248E9 F7C30000FFFF            test ebx, FFFF0000
:004248EF 7448                    je 00424939
:004248F1 56                      push esi
:004248F2 6A02                    push 00000002
:004248F4 52                      push edx
:004248F5 E846000000              call 00424940                <--按F8進入
:004248FA 6A02                    push 00000002
:004248FC 55                      push ebp
:004248FD 8BF0                    mov esi, eax
:004248FF E83C000000              call 00424940                <--按F8進入
:00424904 8BC8                    mov ecx, eax
:00424906 8BD0                    mov edx, eax
:00424908 81E10000FF00            and ecx, 00FF0000
:0042490E 83C410                  add esp, 00000010
:00424911 C1EA10                  shr edx, 10
:00424914 0BCA                    or ecx, edx
:00424916 8BD0                    mov edx, eax
:00424918 81E200FF0000            and edx, 0000FF00
:0042491E C1E010                  shl eax, 10
:00424921 0BD0                    or edx, eax
:00424923 33C0                    xor eax, eax
:00424925 C1E908                  shr ecx, 08
:00424928 C1E208                  shl edx, 08
:0042492B 0BCA                    or ecx, edx
:0042492D 33CE                    xor ecx, esi
:0042492F 5E                      pop esi
:00424930 3BCB                    cmp ecx, ebx
:00424932 5F                      pop edi
:00424933 5D                      pop ebp
:00424934 5B                      pop ebx
:00424935 0F94C0                  sete al
:00424938 C3                      ret

    第一個call 00424940是把name進行計算,第二個call 00424940是把company進行計算。

* Referenced by a CALL at Addresses:
|:004248F5  , :004248FF 
|
:00424940 8B442408                mov eax, dword ptr [esp+08]
:00424944 56                      push esi
:00424945 48                      dec eax
:00424946 740E                    je 00424956
:00424948 48                      dec eax
:00424949 7404                    je 0042494F              <--在這裡一般都會跳轉,而且應該要跳轉
:0042494B 33C0                    xor eax, eax
:0042494D 5E                      pop esi
:0042494E C3                      ret



* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00424949(C)
|
:0042494F BEA0804A00              mov esi, 004A80A0
:00424954 EB05                    jmp 0042495B

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00424946(C)
|
:00424956 BE60804A00              mov esi, 004A8060

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00424954(U)
|
:0042495B 8B542408                mov edx, dword ptr [esp+08]
:0042495F 57                      push edi
:00424960 8BFA                    mov edi, edx
:00424962 83C9FF                  or ecx, FFFFFFFF
:00424965 33C0                    xor eax, eax
:00424967 6A00                    push 00000000
:00424969 F2                      repnz
:0042496A AE                      scasb
:0042496B F7D1                    not ecx
:0042496D 49                      dec ecx
:0042496E 51                      push ecx
:0042496F 52                      push edx
:00424970 56                      push esi
:00424971 E8DA2E0200              call 00447850                <--按F8進入
:00424976 83C410                  add esp, 00000010
:00424979 5F                      pop edi
:0042497A 5E                      pop esi
:0042497B C3                      ret

    進入後的這一段程式碼比較重要,對求出註冊碼的u4部分起關鍵作用。

<tr> tr>
   進入後的這一段程式碼比較重要,對求出註冊碼的u4部分起關鍵作用。

* Referenced by a CALL at Addresses:
|:0042463C   , :004247FE   , :00424971   , :0042508B   , :00447F8D   
|
:00447850 8B442410                mov eax, dword ptr [esp+10]
:00447854 8B542408                mov edx, dword ptr [esp+08]
:00447858 57                      push edi
:00447859 8B7C2410                mov edi, dword ptr [esp+10]
:0044785D 6685FF                  test di, di
:00447860 743E                    je 004478A0
:00447862 53                      push ebx
:00447863 55                      push ebp
:00447864 56                      push esi
:00447865 8B742414                mov esi, dword ptr [esp+14]
:00447869 81E7FFFF0000            and edi, 0000FFFF

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0044789B(C)
|
:0044786F 33C9                    xor ecx, ecx
:00447871 8BE8                    mov ebp, eax
:00447873 8A0A                    mov cl, byte ptr [edx]      <--edx為存放name或company的記憶體地址
:00447875 42                      inc edx
:00447876 8BD9                    mov ebx, ecx
:00447878 33D8                    xor ebx, eax
:0044787A 83E30F                  and ebx, 0000000F
:0044787D C1ED04                  shr ebp, 04
:00447880 8B049E                  mov eax, dword ptr [esi+4*ebx]     <--esi為存放密碼錶的記憶體地址
:00447883 33C5                    xor eax, ebp
:00447885 C1E904                  shr ecx, 04
:00447888 8BD8                    mov ebx, eax
:0044788A 83E10F                  and ecx, 0000000F
:0044788D 83E30F                  and ebx, 0000000F
:00447890 33CB                    xor ecx, ebx
:00447892 C1E804                  shr eax, 04
:00447895 8B0C8E                  mov ecx, dword ptr [esi+4*ecx]
:00447898 33C1                    xor eax, ecx
:0044789A 4F                      dec edi
:0044789B 75D2                    jne 0044786F
:0044789D 5E                      pop esi
:0044789E 5D                      pop ebp
:0044789F 5B                      pop ebx

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00447860(C)
|
:004478A0 5F                      pop edi
:004478A1 C3                      ret

密碼錶:
     0x00000000     0x1C3E887E     0x387D10FC     0x24439882
     0x70FA21F8     0x6CC4A986     0x48873104     0x54B9B97A
     0xE1F443F0     0xFDCACB8E     0xD989530C     0xC5B7DB72
     0x910E6208     0x8D30EA76     0xA97372F4     0xB54DFA8A

    到這裡,相信大家應該對其註冊演算法比較清楚了,自己寫一下注冊機,提高一下自己的程式設計能力。

我的註冊碼為:
          name:時空幻影
       company:湖南長沙
    Unlock Key:3520A324-303B8C46-1810AD6E-A9D27FF5
     Check Key:9CF2DCD1-051B2F62-282B2128-B1C2D29B

相關文章