• 标 题:破解MyMahj (5千字)
  • 作 者:TAE!
  • 时 间:2001-6-20 18:41:06
  • 链 接:http://bbs.pediy.com

软件名称: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、鱼儿、娃娃等人的支持!(排名不分先后,哈哈哈)
文中有疏漏的地方还请各位指出。谢谢!!