貼一個教程,Ace FTP 1.30 ,菜鳥請進! (13千字)

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

AceFTP 1.31軟體是一個巨好的FTP工具,很多地方都有下載這個軟體的註冊方式非常具有典型性,很容易就可
以跟出註冊。對於我machoman這樣的菜鳥水平的小混混也能用它來實踐寫寫序號產生器的感覺。
結果:
註冊名:CCG  (China Crack Group 中國人自己的破解組 ^_^)
註冊碼:6TYPY7-652A34-LMVJA7-YE4JYB

工具 :
      soft ice 4.05
      dasm32
步驟:
      我先在註冊名處輸入'CCG'
        然後輸入假註冊碼'31415926'  (SunBird老大說的好記^_^,)

再用ice 中的bpx hmemcpy下斷點。再用F12進入程式空間。然後用
            bd hmemcpy 遮蔽掉這個斷點       
  國外的軟體的註冊方式,溫柔的一般都是透過註冊名算出註冊碼的先看看我的註冊名在哪把
    在ice下用  S 30:0  L ffffffff 'CCG' 命令查詢我的註冊碼的位置.
  然後就可以看見在記憶體單元的一處找到你下的名字,在我的機器上是這樣的,不同機器上偏移位置可能不同
      30:80607612 43 43 47 00 00 00 00 00-00 00 00 00 00 00 00 00  CCG.................
      接下來要做的就是對這個記憶體位置下斷點
              bpm    30: 80607612   

在下面的位置可以看見以下程式碼。關於是如何
找到這個位置的,就需要有一點耐性,呵呵,我就是沒有,所以好多軟體都搞不定:_(,經常聽初學者說如何找
到關鍵的註冊碼比較的位置,我要說的就是要多在記憶體中下斷點,看看你的資訊在哪裡被讀取處理,這樣你就
會順藤摸瓜找對地方.註冊資訊一般都會在記憶體中搬動幾次的,我透過幾次的查詢在如下位置發現了關鍵的
地方,這裡就可以具體分析註冊碼了,看見4bd321處的 CCG了嗎?我就是根據它來找到註冊部分的^_^
****************************************************************************
第一段程式的功能是把使用者名稱形成密碼的一個輸入。
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004BD355(C)
|
:004BD31B 8D45E4                  lea eax, dword ptr [ebp-1C]
:004BD31E 8B55F4                  mov edx, dword ptr [ebp-0C]//大寫的 'CCG'
:004BD321 8A541AFF                mov dl, byte ptr [edx+ebx-01]//順序取其中的字元
:004BD325 E81E6CF4FF              call 00403F48
:004BD32A 8B45E4                  mov eax, dword ptr [ebp-1C]//分離的字元
:004BD32D 8B55EC                  mov edx, dword ptr [ebp-14]//串"FJ7ESTYULPVBNMCRY567AA8234452734",這就是註冊碼的樣本字元
:004BD330 E8D76FF4FF              call 0040430C//這個呼叫,求出根據使用者名稱選取的字元,這裡要跟進去看看分析
:004BD335 85C0                    test eax, eax//這裡該不為0的字元選取.
:004BD337 7E1A                    jle 004BD353//跳就是不需要的字元
:004BD339 8D45E0                  lea eax, dword ptr [ebp-20]
:004BD33C 8B55F4                  mov edx, dword ptr [ebp-0C]
:004BD33F 8A541AFF                mov dl, byte ptr [edx+ebx-01]
:004BD343 E8006CF4FF              call 00403F48
:004BD348 8B55E0                  mov edx, dword ptr [ebp-20]
:004BD34B 8D45F0                  lea eax, dword ptr [ebp-10]
:004BD34E E8D56CF4FF              call 00404028

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004BD337(C)
|
:004BD353 43                      inc ebx
:004BD354 4E                      dec esi//名字字元的長度減一
:004BD355 75C4                    jne 004BD31B//迴圈取數

****************************************************************************
;註冊碼演算法是把根據使用者名稱字元形成的字串的順序每個字元在樣本字符集合中查詢偏移
;位置,再把偏移位置求平方加上上次的結果,再減去本身,把結果除以0x20取餘,把餘
;數加1,的結果在樣本字元的結果偏移地址的字元作為真正註冊碼的一個字元。
;用數學公式表示為:
;offset_character[i]=mahine[(distance*distance-distance-last_distance)%0x20+1]
;這個公式不包刮每6個字元間隔的一個'-'字元。
|:004BD314(C)
|
:004BD357 8D45F4                  lea eax, dword ptr [ebp-0C]
:004BD35A 8B55F0                  mov edx, dword ptr [ebp-10]
:004BD35D E8D66AF4FF              call 00403E38
:004BD362 8B45F4                  mov eax, dword ptr [ebp-0C];字元'CC'
:004BD365 E8B66CF4FF              call 00404020  ;這個呼叫只是判斷字串的長度
:004BD36A 83F818                  cmp eax, 00000018;根據註冊名選取的小於24個字元嗎?
:004BD36D 7D2E                    jge 004BD39D
:004BD36F BE18000000              mov esi, 00000018
:004BD374 2BF0                    sub esi, eax//在ESI暫存器中是要新增的字元個數,湊足24個字元
:004BD376 85F6                    test esi, esi
:004BD378 7E23                    jle 004BD39D
:004BD37A BB01000000              mov ebx, 00000001

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004BD39B(C)
|
:004BD37F 8D45DC                  lea eax, dword ptr [ebp-24]
:004BD382 8B55EC                  mov edx, dword ptr [ebp-14]
:004BD385 8A541AFF                mov dl, byte ptr [edx+ebx-01]
:004BD389 E8BA6BF4FF              call 00403F48//序列新增字元的呼叫程式,把樣本字元中符合條件的新增到CC後面湊足24個字元
:004BD38E 8B55DC                  mov edx, dword ptr [ebp-24]
:004BD391 8D45F4                  lea eax, dword ptr [ebp-0C]
:004BD394 E88F6CF4FF              call 00404028
:004BD399 43                      inc ebx
:004BD39A 4E                      dec esi  //迴圈記數,直到湊足24個字元為止,這個新的字串就是用來生成註冊碼的輸入量
:004BD39B 75E2                    jne 004BD37F

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004BD36D(C), :004BD378(C)
|
:004BD39D 8B45F4                  mov eax, dword ptr [ebp-0C]
:004BD3A0 E87B6CF4FF              call 00404020
:004BD3A5 83F818                  cmp eax, 00000018
:004BD3A8 7E16                    jle 004BD3C0;把字符集的資料新增到使用者名稱選
                                                ;取字元後,加24個字元。
:004BD3AA 8D45F4                  lea eax, dword ptr [ebp-0C]
:004BD3AD 50                      push eax
:004BD3AE B918000000              mov ecx, 00000018
:004BD3B3 BA01000000              mov edx, 00000001
:004BD3B8 8B45F4                  mov eax, dword ptr [ebp-0C]
:004BD3BB E8686EF4FF              call 00404228

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004BD3A8(C)
|
:004BD3C0 8D45F0                  lea eax, dword ptr [ebp-10]
:004BD3C3 E8D869F4FF              call 00403DA0
:004BD3C8 BB01000000              mov ebx, 00000001

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004BD44F(C)
|
:004BD3CD 8B45F4                  mov eax, dword ptr [ebp-0C];生成的字串(使用者名稱+樣本字元選取)
:004BD3D0 8A4418FF                mov al, byte ptr [eax+ebx-01]
:004BD3D4 8845EB                  mov byte ptr [ebp-15], al
:004BD3D7 8D45D8                  lea eax, dword ptr [ebp-28]
:004BD3DA 8A55EB                  mov dl, byte ptr [ebp-15]
:004BD3DD E8666BF4FF              call 00403F48
:004BD3E2 8B45D8                  mov eax, dword ptr [ebp-28];順序取出其中的每個字元。
:004BD3E5 8B55EC                  mov edx, dword ptr [ebp-14];樣本字符集合地址
:004BD3E8 E81F6FF4FF              call 0040430C;在樣本字符集合中查詢,該字元的位置
:004BD3ED 8BF0                    mov esi, eax;ESI中為該字元在樣本字符集合中的偏移地址
:004BD3EF 8B45EC                  mov eax, dword ptr [ebp-14];樣本集合地址
:004BD3F2 E8296CF4FF              call 00404020;求樣本字符集合的長度
:004BD3F7 50                      push eax;長度為0x20,32個,它將作為取模的模數
:004BD3F8 8BC6                    mov eax, esi
:004BD3FA F7EE                    imul esi;偏移位置求平方
:004BD3FC 2BC6                    sub eax, esi;再把結果減去一個偏移地址
:004BD3FE 03C7                    add eax, edi;edi中為上次的偏移位置,跟EAX求和。
:004BD400 5A                      pop edx;樣本字符集合的長度,32個
:004BD401 8BCA                    mov ecx, edx
:004BD403 99                      cdq
:004BD404 F7F9                    idiv ecx;把上一步的結果除以32,0X20
:004BD406 8BF2                    mov esi, edx;把餘數放在esi中
:004BD408 46                      inc esi;餘數再加1
:004BD409 8BFE                    mov edi, esi
:004BD40B 8B45EC                  mov eax, dword ptr [ebp-14];樣本字符集合地址
:004BD40E 8A4430FF                mov al, byte ptr [eax+esi-01];把集合中的該位置的字
                                                    ;符取出,為註冊碼的一個字元。
:004BD412 8845EA                  mov byte ptr [ebp-16], al
:004BD415 8D45D4                  lea eax, dword ptr [ebp-2C]
:004BD418 8A55EA                  mov dl, byte ptr [ebp-16]
:004BD41B E8286BF4FF              call 00403F48
:004BD420 8B55D4                  mov edx, dword ptr [ebp-2C]
:004BD423 8D45F0                  lea eax, dword ptr [ebp-10]
:004BD426 E8FD6BF4FF              call 00404028
:004BD42B 8BC3                    mov eax, ebx
:004BD42D B906000000              mov ecx, 00000006;結果位置為6的倍數加'-'字元
:004BD432 99                      cdq
:004BD433 F7F9                    idiv ecx
:004BD435 85D2                    test edx, edx
:004BD437 7512                    jne 004BD44B
:004BD439 83FB18                  cmp ebx, 00000018;
:004BD43C 7D0D                    jge 004BD44B;
:004BD43E 8D45F0                  lea eax, dword ptr [ebp-10]
:004BD441 BAD4D44B00              mov edx, 004BD4D4
:004BD446 E8DD6BF4FF              call 00404028

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004BD437(C), :004BD43C(C)
|
:004BD44B 43                      inc ebx
:004BD44C 83FB19                  cmp ebx, 00000019;比較註冊碼轉換完了嗎?
:004BD44F 0F8578FFFFFF            jne 004BD3CD;沒完,跳到4BD3CD迴圈生成下一個註冊碼字元。
:004BD455 8B45F8                  mov eax, dword ptr [ebp-08]
:004BD458 8B55F0                  mov edx, dword ptr [ebp-10]
:004BD45B E89469F4FF              call 00403DF4
:004BD460 33C0                    xor eax, eax
:004BD462 5A                      pop edx
:004BD463 59                      pop ecx
:004BD464 59                      pop ecx
:004BD465 648910                  mov dword ptr fs:[eax], edx

* Possible StringData Ref from Code Obj ->"_^["
                                  |
:004BD468 6897D44B00              push 004BD497

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004BD495(U)
|
:004BD46D 8D45D4                  lea eax, dword ptr [ebp-2C]
:004BD470 BA05000000              mov edx, 00000005
:004BD475 E84A69F4FF              call 00403DC4
:004BD47A 8D45EC                  lea eax, dword ptr [ebp-14]
:004BD47D BA03000000              mov edx, 00000003
:004BD482 E83D69F4FF              call 00403DC4
:004BD487 8D45FC                  lea eax, dword ptr [ebp-04]
:004BD48A E81169F4FF              call 00403DA0
:004BD48F C3                      ret


* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004BD39B(C)
****************************************************************************
//以下的彙編程式段的作用是:把使用者輸入的使用者名稱序列化在樣本字符集合中進行查表,如
//使用者名稱字元在樣本字符集合中存在就把該字元記錄下來返回後儲存在陣列,若不在就返回
//EAX為零,不儲存。
:0040430C 85C0                    test eax, eax//字元為0嗎?
:0040430E 7440                    je 00404350
:00404310 85D2                    test edx, edx//串存在嗎?
:00404312 7431                    je 00404345
:00404314 53                      push ebx
:00404315 56                      push esi
:00404316 57                      push edi
:00404317 89C6                    mov esi, eax
:00404319 89D7                    mov edi, edx
:0040431B 8B4FFC                  mov ecx, dword ptr [edi-04]
:0040431E 57                      push edi
:0040431F 8B56FC                  mov edx, dword ptr [esi-04]
:00404322 4A                      dec edx
:00404323 781B                    js 00404340
:00404325 8A06                    mov al, byte ptr [esi]
:00404327 46                      inc esi
:00404328 29D1                    sub ecx, edx
:0040432A 7E14                    jle 00404340

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040433E(U)
|
:0040432C F2                      repnz
:0040432D AE                      scasb
:0040432E 7510                    jne 00404340
:00404330 89CB                    mov ebx, ecx
:00404332 56                      push esi
:00404333 57                      push edi
:00404334 89D1                    mov ecx, edx
:00404336 F3                      repz
:00404337 A6                      cmpsb
:00404338 5F                      pop edi
:00404339 5E                      pop esi
:0040433A 740C                    je 00404348//要記錄的字元。
:0040433C 89D9                    mov ecx, ebx
:0040433E EBEC                    jmp 0040432C

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00404323(C), :0040432A(C), :0040432E(C)
|
:00404340 5A                      pop edx
:00404341 31C0                    xor eax, eax
:00404343 EB08                    jmp 0040434D

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00404312(C)
|
:00404345 31C0                    xor eax, eax
:00404347 C3                      ret



* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040433A(C)
|
:00404348 5A                      pop edx
:00404349 89F8                    mov eax, edi
:0040434B 29D0                    sub eax, edx

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00404343(U)
|
:0040434D 5F                      pop edi
:0040434E 5E                      pop esi
:0040434F 5B                      pop ebx

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040430E(C)
|
:00404350 C3                      ret



後記:程式把使用者名稱和註冊號放在登錄檔中的
HKEY_CURRENT_USER\Software_Visicom Media\AceExpertFTP\Registration
序號產生器及原始碼附在後面

相關文章