破mirc v5.9心得,請各位大俠指點,誰能用C++builder做個序號產生器最好! (9千字)

看雪資料發表於2001-07-03

前言:經常在論壇上游蕩,不知不覺也學到了一點東西。現在放假了,也就有時間親自動手破解。現貼上一個請各位大俠指點指點。

作者:nanmu

軟體名稱: mirc v5.9

軟體功能:

IRC是英文“Internet Relay Chat”的縮寫,它是一種即時交談工具,是目前全球最流行的聊天方式。它的特點是速度快,方便的自建和使用個人聊天室,同時開20多個小窗與人聊天不影響速度,強大的聊天室管理功能,是全球網友的網上聊天聚會的最佳選擇。

軟體限制:30 day trial period

下載地址:http://202.102.245.82/soft/soft1/mirc59t.exe

使用工具:W32DASM,trw2000

mirc v5.9的破解過程:

1、啟動軟體,點選“幫助”選單中“註冊”,任意輸入註冊名,註冊碼:彈出視窗:"The registration name and number you have entered do not match"

2、反彙編軟體,查詢該字串,來到:
...
:004AD06B E817EAF6FF              call 0041BA87
:004AD070 50                      push eax
:004AD071 6A00                    push 00000000

* Possible Reference to String Resource ID=01913: "The registration name and number you have entered do not mat"
                                  |
:004AD073 6879070000              push 00000779  <------停在這裡.


3、向上查詢,經過分析,來到
.....
* Referenced by a CALL at Addresses:
|:004ACBAB  , :004ACC1D 
|
:004ACA56 55                      push ebp
:004ACA57 8BEC                    mov ebp, esp
:004ACA59 83C4F4                  add esp, FFFFFFF4
:004ACA5C 53                      push ebx          <------輸入的註冊名 
:004ACA5D 56                      push esi          <------輸入的註冊碼 
:004ACA5E 57                      push edi
:004ACA5F 8B750C                  mov esi, dword ptr [ebp+0C]
:004ACA62 FF7508                  push [ebp+08]
:004ACA65 E8CE750800              call 00534038      <------計算註冊名長度 
:004ACA6A 59                      pop ecx
:004ACA6B 83F805                  cmp eax, 00000005  <------註冊名長度是否大於5 
:004ACA6E 7307                    jnb 004ACA77      <------大於5就跳,不跳死! 
:004ACA70 33C0                    xor eax, eax
:004ACA72 E9C9000000              jmp 004ACB40

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004ACA6E(C)
|
:004ACA77 6A2D                    push 0000002D      <------壓入"-"(連線符)
:004ACA79 56                      push esi          <------壓入輸入的註冊碼 
:004ACA7A E819750800              call 00533F98      <------判斷輸入的註冊碼中"-"的位置,賦給eax 
:004ACA7F 83C408                  add esp, 00000008
:004ACA82 8BD8                    mov ebx, eax
:004ACA84 85DB                    test ebx, ebx      <------輸入的註冊碼中是否有"-",沒有ebx=0 
:004ACA86 7507                    jne 004ACA8F      <------不跳就死! 
:004ACA88 33C0                    xor eax, eax
:004ACA8A E9B1000000              jmp 004ACB40

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004ACA86(C)
|
:004ACA8F C60300                  mov byte ptr [ebx], 00
:004ACA92 56                      push esi
:004ACA93 E8A40D0900              call 0053D83C      <------計算輸入註冊碼的前半部分,將其十六進位制值
                                                            賦給eax
:004ACA98 59                      pop ecx
:004ACA99 8945FC                  mov dword ptr [ebp-04], eax  <------將輸入註冊碼的前半部分賦給[ebp-04]
:004ACA9C C6032D                  mov byte ptr [ebx], 2D
:004ACA9F 43                      inc ebx
:004ACAA0 803B00                  cmp byte ptr [ebx], 00
:004ACAA3 7507                    jne 004ACAAC
:004ACAA5 33C0                    xor eax, eax
:004ACAA7 E994000000              jmp 004ACB40

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004ACAA3(C)
|
:004ACAAC 53                      push ebx
:004ACAAD E88A0D0900              call 0053D83C        <------計算輸入註冊碼的後半部分,將其十六進位制值
                                                              賦給eax
:004ACAB2 59                      pop ecx
:004ACAB3 8945F8                  mov dword ptr [ebp-08], eax
:004ACAB6 FF7508                  push [ebp+08]
:004ACAB9 E87A750800              call 00534038
:004ACABE 59                      pop ecx
:004ACABF 8945F4                  mov dword ptr [ebp-0C], eax
:004ACAC2 33C0                    xor eax, eax
:004ACAC4 33DB                    xor ebx, ebx
:004ACAC6 BA03000000              mov edx, 00000003
:004ACACB 8B4D08                  mov ecx, dword ptr [ebp+08]
:004ACACE 83C103                  add ecx, 00000003          <---定位於輸入註冊名的第3個字元
:004ACAD1 3B55F4                  cmp edx, dword ptr [ebp-0C]
:004ACAD4 7D1C                    jge 004ACAF2

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004ACAF0(C)
|
:004ACAD6 0FB631                  movzx esi, byte ptr [ecx]  <---[ecx] 中的第一個字元的十六進位制值
                                                              賦給esi
:004ACAD9 0FAF3485B8035500        imul esi, dword ptr [4*eax+005503B8]<---將相乘結果賦給esi
                                        005503B8中的值見最後.
:004ACAE1 03DE                    add ebx, esi                  <---將相加結果賦給ebx
:004ACAE3 40                      inc eax                      <---將eax加1
:004ACAE4 83F826                  cmp eax, 00000026
:004ACAE7 7E02                    jle 004ACAEB              <---你的註冊名不會大於29位吧!!!
:004ACAE9 33C0                    xor eax, eax

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004ACAE7(C)
|
:004ACAEB 42                      inc edx
:004ACAEC 41                      inc ecx
:004ACAED 3B55F4                  cmp edx, dword ptr [ebp-0C]  <---和註冊名長度比較
:004ACAF0 7CE4                    jl 004ACAD6                  <---小於,繼續計算

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004ACAD4(C)
|
:004ACAF2 3B5DFC                  cmp ebx, dword ptr [ebp-04]  <--關鍵!!比較前半部分註冊碼
                                      ? ebx 得正確的前半部分註冊碼
:004ACAF5 7404                    je 004ACAFB                  <---不等就死!
:004ACAF7 33C0                    xor eax, eax
:004ACAF9 EB45                    jmp 004ACB40

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004ACAF5(C)
|
:004ACAFB 33C0                    xor eax, eax
:004ACAFD 33DB                    xor ebx, ebx
:004ACAFF BA03000000              mov edx, 00000003
:004ACB04 8B4D08                  mov ecx, dword ptr [ebp+08]
:004ACB07 83C103                  add ecx, 00000003         <---定位於輸入註冊名的第3個字元
:004ACB0A 3B55F4                  cmp edx, dword ptr [ebp-0C]
:004ACB0D 7D23                    jge 004ACB32

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004ACB30(C)
|
:004ACB0F 0FB631                  movzx esi, byte ptr [ecx]  <---[ecx] 中的第一個字元的十六進位制值
                                                              賦給esi
:004ACB12 0FB679FF                movzx edi, byte ptr [ecx-01] <---[ecx] 中的前一個字元(即第2個)的十六進位制值
                                                              賦給edi
:004ACB16 0FAFF7                  imul esi, edi          <---將相乘結果賦給esi
:004ACB19 0FAF3485B8035500        imul esi, dword ptr [4*eax+005503B8] <---將相乘結果賦給esi
                                        005503B8中的值見最後.
:004ACB21 03DE                    add ebx, esi                <---將相加結果賦給ebx
:004ACB23 40                      inc eax
:004ACB24 83F826                  cmp eax, 00000026
:004ACB27 7E02                    jle 004ACB2B                <---你的註冊名不會大於29位吧!!!
:004ACB29 33C0                    xor eax, eax                

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004ACB27(C)
|
:004ACB2B 42                      inc edx
:004ACB2C 41                      inc ecx
:004ACB2D 3B55F4                  cmp edx, dword ptr [ebp-0C]      <---和註冊名長度比較
:004ACB30 7CDD                    jl 004ACB0F                <---小於,繼續計算
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004ACB0D(C)
|
:004ACB32 3B5DF8                  cmp ebx, dword ptr [ebp-08]      <--關鍵!!比較後半部分註冊碼
                                         ? ebx 得正確的後半部分註冊碼
:004ACB35 7404                    je 004ACB3B                <---不等就死!
:004ACB37 33C0                    xor eax, eax
:004ACB39 EB05                    jmp 004ACB40

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004ACB35(C)
|
:004ACB3B B801000000              mov eax, 00000001

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004ACA72(U), :004ACA8A(U), :004ACAA7(U), :004ACAF9(U), :004ACB39(U)
|
:004ACB40 5F                      pop edi
:004ACB41 5E                      pop esi
:004ACB42 5B                      pop ebx
:004ACB43 8BE5                    mov esp, ebp
:004ACB45 5D                      pop ebp
:004ACB46 C20800                  ret 0008

.....
*******************************************************************************
4、005503B8中的值好象是一個事先列好的表,其值依次取
0B    06    11    0C
0C    0E    05    0C
10    0A    0B    06
0E    0E    04    0B
06    0E    0E    04
0B    09    0C    0B
0A    08    0A    0A
10    08    04    06
0A    0C    10    08
0A    04    10
  不知道我的理解對不對,還請各位大俠指點!

5、我的註冊資訊:
  Name:nanmu@263.net
    code:9277-812430

6、資訊存放於:

HKEY_CURRENT_USER\Software\mIRC\License 9277-812430
HKEY_CURRENT_USER\Software\mIRC\UserName nanmu@263.net

HKEY_USERS\.DEFAULT\Software\mIRC\License  9277-812430
HKEY_USERS\.DEFAULT\Software\mIRC\UserName nanmu@263.net

相關文章