破解MyMahj (5千字)

看雪資料發表於2001-06-20

軟體名稱:mymahj 3。2
保護方式:註冊碼
破解人:  TAE![BCG]  TAE![FCG]
破解方式:找出註冊碼
軟體簡介:一個找對子的麻將遊戲。最近本人對麻將感興趣,呵呵!
下載地址:http://home.nordnet.fr/~oplayez/

首先執行程式,出現要求註冊的對話方塊。
輸入Email地址,和註冊碼(當然是假的咯,呵呵)
Ctrl+N,設定斷點hmemcpy.回到程式點註冊.ok!又到了TRW

下命令pmodule,立刻回到了程式領空.就是這裡:

* Reference To: USER32.GetDlgItemTextA, Ord:00EFh
                                  |
:00405E91 E8CEDF0000              Call 00413E64
:00405E96 6A34                    push 00000034  <======= 到了這裡
:00405E98 68B8ED4500              push 0045EDB8

* Possible Reference to Dialog: DialogID_0393, CONTROL_ID:29D0, ""
                                  |
:00405E9D 68D0290000              push 000029D0
:00405EA2 FF7508                  push [ebp+08]

* Reference To: USER32.GetDlgItemTextA, Ord:00EFh
                                  |
:00405EA5 E8BADF0000              Call 00413E64             
:00405EAA E85A140000              call 00407309              ----     
:00405EAF 803DBD2C470001          cmp byte ptr [00472CBD], 01    |很經典吧!
:00405EB6 7516                    jne 00405ECE              ----

進入00407309,在這裡:

* Referenced by a CALL at Addresses:
|:00405EAA  , :00413959 《===這個是啟動時判斷註冊碼   
|
:00407309 55                      push ebp
:0040730A 89E5                    mov ebp, esp
:0040730C 51                      push ecx
:0040730D 53                      push ebx
:0040730E 56                      push esi
:0040730F 57                      push edi
:00407310 31DB                    xor ebx, ebx
:00407312 C745FC01000000          mov [ebp-04], 00000001
:00407319 68B8ED4500              push 0045EDB8

* Reference To: CRTDLL.atol, Ord:01DEh
                                  |
:0040731E E8D1CE0000              Call 004141F4      <==== 經過這個以後你的註冊碼就變成數值了   
:00407323 59                      pop ecx            <==== 假註冊碼地址在ecx
:00407324 8945FC                  mov dword ptr [ebp-04], eax
:00407327 31F6                    xor esi, esi
:00407329 46                      inc esi
:0040732A 0FBE1D84ED4500          movsx ebx, byte ptr [0045ED84]
:00407331 EB34                    jmp 00407367     

下面就是運算核心的第一段!

:00407333 89F0                    mov eax, esi 
:00407335 B904000000              mov ecx, 00000004
:0040733A 99                      cdq           
:0040733B F7F9                    idiv ecx       
:0040733D 09D2                    or edx, edx
:0040733F 7415                    je 00407356
:00407341 0FBE3C3584ED4500        movsx edi, byte ptr [esi+0045ED84]  \\EDI依次指向email的每個字元ascii碼值
:00407349 C1E703                  shl edi, 03                          \\ascii碼值乘3給edi
:0040734C 81EFA8000000            sub edi, 000000A8                    \\再減A8給edi
:00407352 01FB                    add ebx, edi                        \\再加上edi,存入ebx
:00407354 EB10                    jmp 00407366

:00407356 0FBE3C3584ED4500        movsx edi, byte ptr [esi+0045ED84]
:0040735E C1E702                  shl edi, 02
:00407361 83EF54                  sub edi, 00000054
:00407364 29FB                    sub ebx, edi

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00407354(U)
|
:00407366 46                      inc esi            <===== 計數器             
:00407367 BF84ED4500              mov edi, 0045ED84  <===== 這是你輸入的Email,地址放入edi
:0040736C 31C0                    xor eax, eax      <===== eax暫存器清空
:0040736E F9                      stc                \
:0040736F 19C9                    sbb ecx, ecx        \這裡不太明白作用,請各位幫助
:00407371 F2                      repnz              /
:00407372 AE                      scasb              /
:00407373 F7D9                    neg ecx          /
:00407375 8D41FE                  lea eax, dword ptr [ecx-02]
:00407378 39C6                    cmp esi, eax      <===== eax是你輸入的email的字元個數,就是迴圈幾次的關鍵
:0040737A 7CB7                    jl 00407333        <===== 沒有完就繼續

下面是運算核心的第二段:

:0040737C 0FBE0589ED4500          movsx eax, byte ptr [0045ED89]  \\取email的第5位ascii碼參加運算!
:00407383 83E812                  sub eax, 00000012              \\減12
:00407386 0FBE158AED4500          movsx edx, byte ptr [0045ED8A]  \\取email的第7位ascii碼參加運算
:0040738D 83EA12                  sub edx, 00000012              \\減12
:00407390 01D0                    add eax, edx                    \\eax+edx
:00407392 0FAFD8                  imul ebx, eax                  \\ebx*eax(eax就是第一段運算核心得出的數值)
:00407395 3B5DFC                  cmp ebx, dword ptr [ebp-04]    \\比較! 這裡? ebx即可得到真正的註冊碼!
:00407398 750E                    jne 004073A8                    \\如果不相等就完了!哈哈
:0040739A E80AFFFFFF              call 004072A9
:0040739F C605BD2C470001          mov byte ptr [00472CBD], 01    \\看到這個01就是舒服!哈哈哈
:004073A6 EB07                    jmp 004073AF
:004073A8 C605BD2C470000          mov byte ptr [00472CBD], 00    \\到了這裡就。。。

誰來寫個序號產生器?
這是我的註冊碼:Email:TAESUE@163.com
                Sn:  318936
軟體註冊成功後會在目錄下生成一個隱含檔案Mymahj.key!


寫個教程真的很麻煩!花了一個多小時,呼呼!
但是今天很高興,因為我已經加入了BCG,FCG
非常感謝bnbnf(我兄弟^_^)、copyyour、xy2000[BCG]、小球[CCG]、幻影2001、魚兒、娃娃等人的支援!(排名不分先後,哈哈哈)
文中有疏漏的地方還請各位指出。謝謝!!

相關文章