• 标 题:象棋大战1.05版(6千字)
  • 作 者:nzinzi
  • 时 间:2002-11-2 20:46:01
  • 链 接:http://bbs.pediy.com

从未在看雪上发过帖子,都不好意思了~
所以今天写上一个初级文章给菜鸟看~对了我自己也是很菜~
随便到中国共享软件注册中心拉了一个软件叫象棋大战1.05版,写了一篇。
对不起作者了,我也不是故意的,谁叫游戏类软件第一个就是你的软了件;
第一次写知道有非常多不足~
破解 象棋大战1.05版
作  者:nzinzi
破解时间:2002-11-2
软件简介:作者的美工非常不错~
限  制:试玩10天,
注册费用:$10
破解工具:TRW 1.22  w32Dasm
难  度:易
我习惯性先用W32DASM反汇编,然后用串式参考找到了“你输入的注册码不正确”,来到了“004073F6”,然后我用查找“004073F4”(高手不要笑啊,小弟就这个水平),查找到“00407245”这里,用TRW 下一个断点BPX 00407242,哈哈然后跟着下面一步一步很快就能得出
注册码了。瞒简单的~

:00407242 83F909                  cmp ecx, 00000009      比较注册码是否有9位~
:00407245 0F85A9010000            jne 004073F4          失败跳转到出错的消息框
:0040724B 8A442420                mov al, byte ptr [esp+20] 把第一位注册码移入AL
:0040724F 3C4D                    cmp al, 4D               
:00407251 740C                    je 0040725F             
:00407253 3C41                    cmp al, 41               
:00407255 7408                    je 0040725F
:00407257 3C4F                    cmp al, 4F              比较第一位注册码是否等于M,A,O 其中一个ASCII
:00407259 0F8595010000            jne 004073F4

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00407251(C), :00407255(C)
|
:0040725F 8A442421                mov al, byte ptr [esp+21] 第二位的比较
:00407263 3C57                    cmp al, 57
:00407265 7410                    je 00407277
:00407267 3C45                    cmp al, 45
:00407269 740C                    je 00407277
:0040726B 3C4E                    cmp al, 4E
:0040726D 7408                    je 00407277
:0040726F 3C47                    cmp al, 47              比较第二位注册码是否等于W,E,N ,G其中一个ASCII
:00407271 0F857D010000            jne 004073F4

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00407265(C), :00407269(C), :0040726D(C)
|
:00407277 0FBE442422              movsx eax, byte ptr [esp+22] 第三位的比较
:0040727C 99                      cdq
:0040727D B911000000              mov ecx, 00000011
:00407282 F7F9                    idiv ecx
:00407284 85D2                    test edx, edx     
:00407286 0F8568010000            jne 004073F4                比较第三位ASCII是否是11的倍数比如:33,44。
:0040728C 8A442423                mov al, byte ptr [esp+23]  第四位的比较
:00407290 3C4A                    cmp al, 4A
:00407292 7410                    je 004072A4
:00407294 3C49                    cmp al, 49
:00407296 740C                    je 004072A4
:00407298 3C41                    cmp al, 41
:0040729A 7408                    je 004072A4
:0040729C 3C4E                    cmp al, 4E                  比较第四位注册码是否等于J,I,A ,N其中一个ASCII
:0040729E 0F8550010000            jne 004073F4

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00407292(C), :00407296(C), :0040729A(C)
|
:004072A4 8A442424                mov al, byte ptr [esp+24] 第五位的比较
:004072A8 3C58                    cmp al, 58
:004072AA 740C                    je 004072B8
:004072AC 3C49                    cmp al, 49
:004072AE 7408                    je 004072B8
:004072B0 3C55                    cmp al, 55
:004072B2 0F853C010000            jne 004073F4            比较第五位注册码是否等于X,I,U其中一个ASCII

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004072AA(C), :004072AE(C)
|
:004072B8 0FBE442425              movsx eax, byte ptr [esp+25] 第六位的比较
:004072BD 99                      cdq
:004072BE B903000000              mov ecx, 00000003
:004072C3 F7F9                    idiv ecx 
:004072C5 85D2                    test edx, edx
:004072C7 0F8527010000            jne 004073F4            比较第六位ASCII是否是03的倍数比如:33,36。
:004072CD 8A442426                mov al, byte ptr [esp+26] 第七位的比较
:004072D1 3C51                    cmp al, 51
:004072D3 7408                    je 004072DD
:004072D5 3C49                    cmp al, 49
:004072D7 0F8517010000            jne 004073F4        比较第七位注册码是否等于Q,I其中一个ASCII

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004072D3(C)
|
:004072DD 8A442427                mov al, byte ptr [esp+27]  第八位的比较
:004072E1 3C59                    cmp al, 59
:004072E3 740C                    je 004072F1
:004072E5 3C55                    cmp al, 55
:004072E7 7408                    je 004072F1
:004072E9 3C4E                    cmp al, 4E
:004072EB 0F8503010000            jne 004073F4      比较第八位注册码是否等于Y,U,N其中一个ASCII

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004072E3(C), :004072E7(C)
|
:004072F1 0FBE442428              movsx eax, byte ptr [esp+28]  第九位的比较
:004072F6 99                      cdq
:004072F7 B90D000000              mov ecx, 0000000D
:004072FC F7F9                    idiv ecx
:004072FE 85D2                    test edx, edx
:00407300 0F85EE000000            jne 004073F4            比较第九位ASCII是否是0D的倍数
:00407306 8D4C2410                lea ecx, dword ptr [esp+10]
:0040730A E8F6960000              call 00410A05

。。。。。。

* Reference To: USER32.ShowWindow, Ord:026Ah
                                  |
:0040739F FF15AC734100            Call dword ptr [004173AC]
:004073A5 6A00                    push 00000000

* Possible StringData Ref from Data Obj ->"谢谢"
                                  |
:004073A7 68CCB14100              push 0041B1CC        注册成功的对话框

* Possible StringData Ref from Data Obj ->"非常感谢您的注册!"
                                  |
:004073AC 68B8B14100              push 0041B1B8
:004073B1 53                      push ebx

。。。。。。
|
:004073F4 6A00                    push 00000000

* Possible StringData Ref from Data Obj ->"错误"
                                  |
:004073F6 68B0B14100              push 0041B1B0      失败的对话框

* Possible StringData Ref from Data Obj ->"您输入的注册码不正确!"
                                  |
:004073FB 6898B14100              push 0041B198
:00407400 53                      push ebx

我自己用的注册码是MW3JX3QY4,注册名随便~~