如何計算 批量檔案設定器 2.05 的註冊碼 (6千字)

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

如何計算 批量檔案設定器 2.05 的註冊碼

作者主頁 http://glowing.yeah.net/

    上次得冰毒大俠幫助,破了那個renameman,但有時那個軟體會拒絕工作。忍無可忍情況下,我delete it,近日用上了國人的產品 批量檔案設定器 2.05。
    這個軟體是用aspack 1.083壓縮的,這次不高興去用解壓加暴力破解的方法,我來試試找出註冊碼的計算方法。
    隨便填入使用者名稱:sunwk
            公司名:sunwk
            註冊碼:213546

trw中下命令:
bpx:hmemcpy
g

    回到目標程式中,按下“現在註冊”按鈕,見trw跳出。
bd,中斷斷點。F12按14下(按15下,註冊失敗的窗戶就跳出來了),改按F10一直走。
    以下為了解說的方便,定義一些縮略語,並都是16進製表示。u1:使用者名稱第一個字母。u2:使用者名稱第二個字母。c1:公司名第一個字母。c2:公司名第二個字母。s指註冊碼,3位數字為一組,共8組,依次為s1、s2、s3、s4、s5、s6、s7、s8。

:004AA386 8B45C0              mov eax, dword ptr [ebp-40]
:004AA389 0FB64001            movzx eax, byte ptr [eax+01] <--eax=c2,ebx=u2.
:004AA38D 03D8                add ebx, eax                <--ebx=c2+u2
:004AA38F 0FB707              movzx eax, word ptr [edi]    <--eax=s1
:004AA392 3BD8                cmp ebx, eax                <--s1=c2+u2 ?
:004AA394 0F8502010000        jne 004AA49C                <--no,then end.
:004AA39A 8D55BC              lea edx, dword ptr [ebp-44]
:004AA39D 8B45FC              mov eax, dword ptr [ebp-04]
:004AA3A0 8B80DC020000        mov eax, dword ptr [eax+000002DC]
:004AA3A6 E86188F8FF          call 00432C0C
:004AA3AB 8B45BC              mov eax, dword ptr [ebp-44]
:004AA3AE 33DB                xor ebx, ebx
:004AA3B0 8A18                mov bl, byte ptr [eax]
:004AA3B2 8D55B8              lea edx, dword ptr [ebp-48]
:004AA3B5 8B45FC              mov eax, dword ptr [ebp-04]
:004AA3B8 8B80E0020000        mov eax, dword ptr [eax+000002E0]
:004AA3BE E84988F8FF          call 00432C0C
:004AA3C3 8B45B8              mov eax, dword ptr [ebp-48]
:004AA3C6 0FB600              movzx eax, byte ptr [eax]    <--eax=c1,ebx=u1
:004AA3C9 03D8                add ebx, eax                <--ebx=c1+u1
:004AA3CB 0FB74702            movzx eax, word ptr [edi+02] <--ebx=s2
:004AA3CF 3BD8                cmp ebx, eax                <--s2=c1+u1 ?
:004AA3D1 0F85C5000000        jne 004AA49C               
:004AA3D7 8D55B4              lea edx, dword ptr [ebp-4C]
:004AA3DA 8B45FC              mov eax, dword ptr [ebp-04]
:004AA3DD 8B80DC020000        mov eax, dword ptr [eax+000002DC]
:004AA3E3 E82488F8FF          call 00432C0C
:004AA3E8 8B45B4              mov eax, dword ptr [ebp-4C]
:004AA3EB 33DB                xor ebx, ebx
:004AA3ED 8A18                mov bl, byte ptr [eax]
:004AA3EF 8D55B0              lea edx, dword ptr [ebp-50]
:004AA3F2 8B45FC              mov eax, dword ptr [ebp-04]
:004AA3F5 8B80DC020000        mov eax, dword ptr [eax+000002DC]
:004AA3FB E80C88F8FF          call 00432C0C
:004AA400 8B45B0              mov eax, dword ptr [ebp-50]
:004AA403 0FB64001            movzx eax, byte ptr [eax+01]
:004AA407 03D8                add ebx, eax
:004AA409 0FB74704            movzx eax, word ptr [edi+04]
:004AA40D 3BD8                cmp ebx, eax                <--s3=u1+u2 ?
:004AA40F 0F8587000000        jne 004AA49C
:004AA415 8D55AC              lea edx, dword ptr [ebp-54]
:004AA418 8B45FC              mov eax, dword ptr [ebp-04]
:004AA41B 8B80E0020000        mov eax, dword ptr [eax+000002E0]
:004AA421 E8E687F8FF          call 00432C0C
:004AA426 8B45AC              mov eax, dword ptr [ebp-54]
:004AA429 33DB                xor ebx, ebx
:004AA42B 8A18                mov bl, byte ptr [eax]
:004AA42D 8D55A8              lea edx, dword ptr [ebp-58]
:004AA430 8B45FC              mov eax, dword ptr [ebp-04]
:004AA433 8B80E0020000        mov eax, dword ptr [eax+000002E0]
:004AA439 E8CE87F8FF          call 00432C0C
:004AA43E 8B45A8              mov eax, dword ptr [ebp-58]
:004AA441 0FB64001            movzx eax, byte ptr [eax+01]
:004AA445 03D8                add ebx, eax
:004AA447 0FB74706            movzx eax, word ptr [edi+06]
:004AA44B 3BD8                cmp ebx, eax                  <--s4=c1+c2 ?
:004AA44D 754D                jne 004AA49C
:004AA44F 0FB707              movzx eax, word ptr [edi]
:004AA452 0FB75702            movzx edx, word ptr [edi+02]
:004AA456 03C2                add eax, edx
:004AA458 0FB75704            movzx edx, word ptr [edi+04]
:004AA45C 03C2                add eax, edx
:004AA45E 0FB75706            movzx edx, word ptr [edi+06]
:004AA462 03C2                add eax, edx
:004AA464 0FB75708            movzx edx, word ptr [edi+08]
:004AA468 0FB74F0A            movzx ecx, word ptr [edi+0A]
:004AA46C 03D1                add edx, ecx
:004AA46E 0FB74F0C            movzx ecx, word ptr [edi+0C]
:004AA472 03D1                add edx, ecx
:004AA474 0FB74F0E            movzx ecx, word ptr [edi+0E]
:004AA478 03D1                add edx, ecx
:004AA47A 3BC2                cmp eax, edx  <-- s1+s2+s3+s4 == s5+s6+s7+s8 ?
:004AA47C 751E                jne 004AA49C
:004AA47E 663B7708            cmp si, word ptr [edi+08]
:004AA482 7518                jne 004AA49C <-- 這裡好像是比較所有輸入的字母或
                                              數字的個數是否等於s5(中文算2個
                                              。我此處的si=2f)
:004AA484 0FB74708            movzx eax, word ptr [edi+08]
:004AA488 0FB717              movzx edx, word ptr [edi]
:004AA48B 03C2                add eax, edx
:004AA48D 0FB7570A            movzx edx, word ptr [edi+0A]
:004AA491 3BC2                cmp eax, edx                <--s1+s5 =s6 ?
:004AA493 7507                jne 004AA49C
:004AA495 66837F0C64          cmp word ptr [edi+0C], 0064  <--s7=64h ?
:004AA49A 743B                je 004AA4D7                  <--jump,成功!

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004AA394(C), :004AA3D1(C), :004AA40F(C), :004AA44D(C), :004AA47C(C)
|:004AA482(C), :004AA493(C)
|
:004AA49C 6A10                    push 00000010
:004AA49E 684CA64A00              push 004AA64C
:004AA4A3 6888A64A00              push 004AA688
:004AA4A8 8B45FC                  mov eax, dword ptr [ebp-04]
:004AA4AB E870E9F8FF              call 00438E20
:004AA4B0 50                      push eax
:004AA4B1 E826CFF5FF              call 004073DC

這樣我們就可以推算出註冊碼的條件了。

  u1=73h  u2=75h
  c1=73h  c2=75h
  s1  s2  s3  s4  s5  s6  s7  s8

  u2 + c2 = s1  234
  u1 + c1 = s2  230
  u1 + u2 = s3  232
  c1 + c2 = s4  232
  s1 + s2 + s3 + s4 = s5 + s6 + s7 + s8
  s1 + s5 = s6
  s6 = 100
  sum = s5 (當使用者名稱只為一中文字時,sum=1Ah)47

s1.  234
s2.  230
s3.  232
s4.  232
s5.  047
s6.  281
s7.  100
s8.  500


這樣,我的
          使用者名稱:sunwk
          公司名:sunwk
          註冊碼:234230232232047281100500
end.

相關文章