超级拖拉机
超级拖拉机是一个四副牌的拖拉机游戏,在全国范围都有广泛使用。 游戏有多种设定以适应不同地方的规则。游戏支持单人玩,也支网络 多人一起玩。最新版4.02
下
载地址: http://yywk.nease.net/
软件限制:在单人游戏中,未注册版本的悔牌次数受限制。在多人游戏中, 未注册版本只能玩一段时间。
【破解工具】:Ollydbg1.09 中文版 【过 程】:
呵呵,我们开工吧!唉!^-^^-^ 我的水平很低,许多地方表达的有问题,烦请各位指教! 用ollydbg加载运行 ,发现是个重起效验型的软件.输入注册码后,软件用用户名和试验码 计算(加密注册信息)得到新的字符串后放到注册表: [HKEY_LOCAL_MACHINE/SOFTWARE/yywk/超级拖拉机]-reg下
输入试验码:123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJK (一共要46位) 说明:试验码没有46位,程序在用用户名计算的值移动试验码时,就会计算出一些别的字符在 比较的字符串中,引起无法正确跟踪.
开始:
第一部分---注册表中注册信息的处理过程 用0llydbg加载后下 RegQueryvalueExA中断: |
00423A4E PUSH 超级拖拉.0046D470 ; ASCII reg 00423A53 PUSH EAX 00423A54 MOV BYTE PTR SS:[EBP+2E8], 0 00423A5B MOV DWORD PTR SS:[ESP+28], ESI 00423A5F CALL EBX ; //读注册信息 00423A61 MOV EAX, DWORD PTR SS:[ESP+10] 00423A65 CMP EAX, ESI 00423A67 JNB SHORT 超级拖拉.00423A75 00423A69 MOV ECX, DWORD PTR SS:[EBP+530]
; ECX<==SS:[470D98]=01260490. ASCII q02 $%7'yck $%&'jhz{m}N/r1z3456uyij@RcGO
00423A6F MOV BYTE PTR DS:[EAX+ECX], 0 00423A73 JMP SHORT 超级拖拉.00423A7F | 00423ADD MOV EAX, DWORD PTR SS:[EBP+530] ; EAX<==01260490. 00423AE3 PUSH EAX 00423AE4 CALL 超级拖拉.004051B0 00423AE9 MOV EDI, EAX ; EDI=EAX (长度) 00423AEB XOR ECX, ECX 00423AED ADD ESP, 4 00423AF0 CMP EDI, ECX 00423AF2 MOV DWORD PTR SS:[ESP+1C], ECX 00423AF6 MOV BYTE PTR SS:[ESP+20], 1 00423AFB MOV BYTE PTR SS:[ESP+21], 2 00423B00 MOV BYTE PTR SS:[ESP+22], 40 00423B05 MOV BYTE PTR SS:[ESP+23], 20 00423B0A MOV BYTE PTR SS:[ESP+24], 8 00423B0F MOV BYTE PTR SS:[ESP+25], 10 ; //计算开始 00423B14 JLE SHORT 超级拖拉.00423B55
; SS:[12F498]<== 01 02 40 20 08 10 1A 02 赋值
00423B16 /MOV EAX, ECX 00423B18 |XOR EDX, EDX 00423B1A |DIV DWORD PTR SS:[ESP+18] 00423B1E |MOV ESI, 6 ; ESI=6 00423B23 |MOV DL, BYTE PTR SS:[ESP+EDX+28] ; DL<==4A ('J') 00423B27 |MOV BYTE PTR SS:[ESP+1C], DL 00423B2B |MOV EAX, DWORD PTR SS:[ESP+1C] ; EAX<==4A ('J') 00423B2F |CDQ 00423B30 |IDIV ESI ; EAX= 4A IDIV ESI=6 ==>EAX= 0C EDX=2 00423B32 |MOV EAX, DWORD PTR SS:[EBP+530] ; EAX<==01260490. 00423B38 |LEA ESI, DWORD PTR DS:[ECX+EAX] ; EAX<==01260490. ECX=0 00423B3B |MOV AL, BYTE PTR DS:[ECX+EAX] ; AL<== 77 ('w') 00423B3E |MOV DL, BYTE PTR SS:[ESP+EDX+20] ; DL<==40 ('@') 00423B42 |TEST AL, DL 00423B44 |JNZ SHORT 超级拖拉.00423B4A 00423B46 |OR AL, DL 00423B48 |JMP SHORT 超级拖拉.00423B4E 00423B4A |NOT DL 00423B4C |AND AL, DL 00423B4E |INC ECX 00423B4F |MOV BYTE PTR DS:[ESI], AL 00423B51 |CMP ECX, EDI 00423B53 /JL SHORT 超级拖拉.00423B16
; //这里把注册表中加密的注册信息还原成原来的试验码
; DS:[ESI]=01260490,(ASCII123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJK)
00423B74 MOV EAX, DWORD PTR SS:[EBP+530]
; EAX<==01260490,(ASCII123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJK)
00423B7A POP EDI 00423B7B POP ESI 00423B7C MOV DL, BYTE PTR DS:[EAX+20] ; DL=0 00423B7F MOV CL, BYTE PTR DS:[EAX+2] ; CL=DS:[1260492] 00423B82 MOV BYTE PTR DS:[EAX+2], DL 00423B85 MOV EAX, DWORD PTR SS:[EBP+530] ; EAX<==01260490, 00423B8B MOV BYTE PTR DS:[EAX+20], CL ; DS:[EAX+20]=CL 00423B8E MOV EAX, DWORD PTR SS:[EBP+530] ; EAX<==01260490, 00423B94 MOV DL, BYTE PTR DS:[EAX+17] ; DL=DS:[EAX+17] 00423B97 MOV CL, BYTE PTR DS:[EAX+7] ; CL=DS:[EAX+7] 00423B9A MOV BYTE PTR DS:[EAX+7], DL ; DL= 00423B9D MOV EAX, DWORD PTR SS:[EBP+530] ; EAX<==01260490 00423BA3 MOV BYTE PTR DS:[EAX+17], CL 00423BA6 MOV EAX, DWORD PTR SS:[EBP+530] ; EAX<==01260490 00423BAC MOV DL, BYTE PTR DS:[EAX+12] 00423BAF MOV CL, BYTE PTR DS:[EAX+1D] 00423BB2 MOV BYTE PTR DS:[EAX+1D], DL 00423BB5 MOV EAX, DWORD PTR SS:[EBP+530] 00423BBB MOV BYTE PTR DS:[EAX+12], CL 00423BBE MOV EAX, DWORD PTR SS:[EBP+530] 00423BC4 MOV DL, BYTE PTR DS:[EAX+2A] 00423BC7 MOV CL, BYTE PTR DS:[EAX+1F] 00423BCA MOV BYTE PTR DS:[EAX+1F], DL 00423BCD MOV EAX, DWORD PTR SS:[EBP+530] 00423BD3 MOV BYTE PTR DS:[EAX+2A], CL 00423BD6 MOV EAX, DWORD PTR SS:[EBP+530] 00423BDC MOV DL, BYTE PTR DS:[EAX+C] 00423BDF MOV CL, BYTE PTR DS:[EAX+24] 00423BE2 MOV BYTE PTR DS:[EAX+24], DL 00423BE5 MOV EAX, DWORD PTR SS:[EBP+530] 00423BEB MOV BYTE PTR DS:[EAX+C], CL 00423BEE MOV EAX, DWORD PTR SS:[EBP+530] 00423BF4 MOV DL, BYTE PTR DS:[EAX+21] 00423BF7 MOV CL, BYTE PTR DS:[EAX+28] 00423BFA MOV BYTE PTR DS:[EAX+28], DL 00423BFD MOV EAX, DWORD PTR SS:[EBP+530] 00423C03 MOV BYTE PTR DS:[EAX+21], CL 00423C06 MOV EAX, DWORD PTR SS:[EBP+530] 00423C0C MOV DL, BYTE PTR DS:[EAX+F] 00423C0F MOV CL, BYTE PTR DS:[EAX+19] 00423C12 MOV BYTE PTR DS:[EAX+19], DL 00423C15 MOV EAX, DWORD PTR SS:[EBP+530] 00423C1B MOV BYTE PTR DS:[EAX+F], CL 00423C1E MOV EAX, DWORD PTR SS:[EBP+530] 00423C24 MOV DL, BYTE PTR DS:[EAX+14] 00423C27 MOV CL, BYTE PTR DS:[EAX+5] 00423C2A MOV BYTE PTR DS:[EAX+5], DL 00423C2D MOV EAX, DWORD PTR SS:[EBP+530] 00423C33 POP EBP 00423C34 MOV BYTE PTR DS:[EAX+14], CL ; CL=36 00423C37 ADD ESP, 3C ; //EAX=01260490 00423C3A RETN **************** 00423C2D MOV EAX <==12x45l7o9abcBefqhiuklmn8pgrstjvH3FzAdCDEyGwIJK 到这里试验码变成 12x45l7o9abcBefqhiuklmn8pgrstjvH3FzAdCDEyGwIJK
; //以上把试验码打散 ===============================================================
第二部分--注册码的计算(实际上是把试验码用用户名计算的值做参数重新排列)
004231AD CALL 超级拖拉.004051B0 004231B2 MOV EBX, EAX ; EBX=EAX=6长度 004231B4 ADD ESP, 4 004231B7 TEST EBX, EBX 004231B9 JLE SHORT 超级拖拉.00423215 004231BB MOV EAX, -4F8 ; EAX=-4F8 004231C0 MOV ECX, EDI ; ECX<==00470D60,(ASCII fxyang) 004231C2 SUB EAX, ESI 004231C4 MOV DWORD PTR SS:[ESP+14], EAX ; EAX=FFB8F2A0 004231C8 XOR EDX, EDX 004231CA MOV EBP, 2C ; EBP=2C 004231CF MOV DL, BYTE PTR DS:[ECX] ; DL<==DS:[470D60]=66 ('f') 用户名的第一位 004231D1 MOV EDI, EDX ; EDI=66 004231D3 XOR EDX, EDX 004231D5 MOV EAX, EDI ; EAX=66 004231D7 DIV EBP ; EAX=66 DIV EBP=2C ==>EAX=02 EDX=0E 004231D9 MOV EAX, EDI ; EAX=66 004231DB MOV EDI, 2C ; EDI=2C 004231E0 NOT EAX ; EAX=FFFFFFF99 004231E2 MOV EBP, EDX ; EBP=EDX=0E 004231E4 XOR EDX, EDX 004231E6 DIV EDI 004231E8 MOV EAX, DWORD PTR DS:[ESI+530] 004231EE INC ECX ; //进一位 004231EF MOV EDI, EDX ; EDI=EDX=21 004231F1 MOV DL, BYTE PTR DS:[EAX+EBP] 004231F4 MOV BYTE PTR SS:[ESP+13], DL 004231F8 MOV DL, BYTE PTR DS:[EAX+EDI] ; DL<==DS:[EAX+EDI]=C1 EAX=01260490 EDI=21 004231FB MOV BYTE PTR DS:[EAX+EBP], DL 004231FE MOV EAX, DWORD PTR DS:[ESI+530] 00423204 MOV DL, BYTE PTR SS:[ESP+13] 00423208 MOV BYTE PTR DS:[EDI+EAX], DL 0042320B MOV EAX, DWORD PTR SS:[ESP+14] 0042320F ADD EAX, ECX 00423211 CMP EAX, EBX ; //计算的次数=6 00423213 JL SHORT 超级拖拉.004231C8
; //用用户名计算的值做指针把试验码重新排列
00423215 DEC EBX 00423216 TEST EBX, EBX 00423218 MOV DWORD PTR SS:[ESP+18], EBX 0042321C JLE SHORT 超级拖拉.00423289 0042321E MOV EAX, -4F9 ; EAX=-4F9 00423223 LEA EDI, DWORD PTR DS:[ESI+4F9]
; EDI<== DS:[ESI+4F9]=00470D61,(ASCII xyang)
00423229 SUB EAX, ESI 0042322B MOV DWORD PTR SS:[ESP+14], EAX ; EAX=FFB8F29F 0042322F XOR ECX, ECX 00423231 XOR EDX, EDX 00423233 MOV CL, BYTE PTR DS:[EDI-1] ; CL=DS:[470D60]=66 ('f') 00423236 MOV EBX, 29 ; EBX=29 0042323B MOV EBP, ECX ; EBP=66 0042323D XOR ECX, ECX 0042323F MOV CL, BYTE PTR DS:[EDI] ; CL=DS:[470D61]=78 ('x') 00423241 MOV EAX, EBP ; EAX=66 00423243 SHL EAX, 8 ; EAX=00006600 00423246 ADD EAX, ECX ; EAX=6678 00423248 DIV EBX ; EAX=6678 DIV EBX=29 ==>EAX=27F EDX=21 0042324A MOV EAX, EBP ; EAX=66 0042324C NOT EAX ; EAX=FFFFFF99 0042324E SHL EAX, 8 ; EAX=FFFF9900 00423251 NOT ECX ; ECX=FFFFFF87 00423253 ADD EAX, ECX ; EAX=FFFF9987 00423255 MOV ECX, 25 ; ECX=25 0042325A MOV EBX, EDX ; EBX=21 0042325C XOR EDX, EDX 0042325E DIV ECX
; EAX=FFFF9887 DIV ECX=25 ==>EAX=6EB3B79 EDX=0A
00423260 MOV EAX, DWORD PTR DS:[ESI+530] 00423266 INC EDI 00423267 MOV CL, BYTE PTR DS:[EAX+EBX] ; CL=DS:[EAX+EBX]=C1 EAX=01260490 EBX=21
0042326A MOV EBP, EDX ; EBP=EDX=A 0042326C MOV DL, BYTE PTR DS:[EAX+EBP] ; DL=DS:[EAX+EBP]=31 ('1') 0042326F MOV BYTE PTR DS:[EAX+EBX], DL 00423272 MOV EAX, DWORD PTR DS:[ESI+530] 00423278 MOV BYTE PTR DS:[EAX+EBP], CL ; CL=C1 0042327B MOV ECX, DWORD PTR SS:[ESP+14] 0042327F MOV EAX, DWORD PTR SS:[ESP+18] 00423283 ADD ECX, EDI 00423285 CMP ECX, EAX 00423287 JL SHORT 超级拖拉.0042322F
; //用用户名计算的值做指针把试验码重新排列 | 004232EC MOV DWORD PTR DS:[4719B8], EDI 004232F2 MOV ECX, DWORD PTR DS:[ESI+530] ; ECX<==DS:[470D98]=01260490,(ASCII 78) 004232F8 MOV EDX, DWORD PTR DS:[ESI+52C] ; EDX<==DS:[470D94]=01260450 004232FE MOV EAX, DWORD PTR DS:[ECX] ; EAX=DS:[1260490]=34003837 00423300 MOV DWORD PTR DS:[EDX], EAX 00423302 MOV EAX, DWORD PTR DS:[ECX+4] 00423305 MOV DWORD PTR DS:[EDX+4], EAX 00423308 MOV EAX, DWORD PTR DS:[ECX+8] ; EAX=DS:[1260498]=32C17433 0042330B MOV DWORD PTR DS:[EDX+8], EAX 0042330E MOV EAX, DWORD PTR DS:[ECX+C] ; EAX=DS:[ECX+C]=007134C0 00423311 MOV DWORD PTR DS:[EDX+C], EAX 00423314 MOV CX, WORD PTR DS:[ECX+10] ; CX=DS:[ECX+10]=0033 00423318 MOV WORD PTR DS:[EDX+10], CX 0042331C MOV EDX, DWORD PTR DS:[ESI+52C] 00423322 MOV BYTE PTR DS:[EDX+12], 0 00423326 MOV EAX, DWORD PTR DS:[ESI+530] 0042332C MOV ECX, DWORD PTR DS:[ESI+528] 00423332 ADD EAX, 12 00423335 MOV EDX, DWORD PTR DS:[EAX] 00423337 MOV DWORD PTR DS:[ECX], EDX 00423339 MOV EDX, DWORD PTR DS:[EAX+4] ; EDX=DS:[EAX+4]=3A733236 0042333C MOV DWORD PTR DS:[ECX+4], EDX 0042333F MOV EDX, DWORD PTR DS:[EAX+8] ; EDX=DS:[EAX+8]=3275006B 00423342 MOV DWORD PTR DS:[ECX+8], EDX 00423345 MOV EDX, DWORD PTR DS:[EAX+C] ; EDX=DS:[EAX+C]=3139FA76 00423348 MOV DWORD PTR DS:[ECX+C], EDX 0042334B MOV AX, WORD PTR DS:[EAX+10] ; AX=DS:[EAX+10]=3701 0042334F MOV WORD PTR DS:[ECX+10], AX 00423353 MOV ECX, DWORD PTR DS:[ESI+528] ; ECX=01260470 00423359 XOR EAX, EAX 0042335B MOV BYTE PTR DS:[ECX+12], 0
;到这里试验码经过用用户名计算的值做指针重新排列
到这里试验码变成 12x45f7o9rFcBelqdiuk6mg8pnDstjvH3bzAhCaEyGwIJK
====================================================
第三部分:注册码最后的计算和比较 (fly的功劳)
如果你悔牌超过29次后,会提示你“未注册.就是说你必须悔牌超过29次后 .才会来到这里:
00423490 SUB ESP, 0C 00423493 PUSH EBX 00423494 MOV EBX, ECX 00423496 PUSH EBP 00423497 XOR ECX, ECX 00423499 PUSH ESI 0042349A MOV ESI, DWORD PTR DS:[EBX+530] 004234A0 PUSH EDI 004234A1 MOV BYTE PTR SS:[ESP+14], CL 004234A5 MOV BYTE PTR SS:[ESP+15], CL 004234A9 MOV BYTE PTR SS:[ESP+16], CL 004234AD MOV BYTE PTR SS:[ESP+17], CL 004234B1 /MOV EAX, 38E38E39 004234B6 |MOV EBP, 47 004234BB |IMUL ECX 004234BD |SAR EDX, 1 004234BF |MOV EAX, EDX 004234C1 |SHR EAX, 1F 004234C4 |ADD EDX, EAX 004234C6 |XOR EAX, EAX 004234C8 |MOV AL, BYTE PTR DS:[ESI+ECX] 004234CB |LEA EDI, DWORD PTR SS:[ESP+EDX+14> 004234CF |CDQ 004234D0 |IDIV EBP 004234D2 |MOV AL, BYTE PTR DS:[EDI] 004234D4 |ADD AL, DL 004234D6 |INC ECX 004234D7 |CMP ECX, 9 004234DA |MOV BYTE PTR DS:[EDI], AL 004234DC /JL SHORT 超级拖拉.004234B1
;以上把试验码重新排列后的字符串的前9位12x45f7o9的hex值计算后相加 ; AL =B4
004234DE MOV ECX, 9 004234E3 /MOV EAX, 38E38E39 004234E8 |MOV EBP, 1D 004234ED |IMUL ECX 004234EF |SAR EDX, 1 004234F1 |MOV EAX, EDX 004234F3 |SHR EAX, 1F 004234F6 |ADD EDX, EAX 004234F8 |XOR EAX, EAX 004234FA |MOV AL, BYTE PTR DS:[ESI+ECX] 004234FD |LEA EDI, DWORD PTR SS:[ESP+EDX+14> 00423501 |CDQ 00423502 |IDIV EBP 00423504 |MOV AL, BYTE PTR DS:[EDI] 00423506 |ADD AL, DL 00423508 |INC ECX 00423509 |CMP ECX, 12 0042350C |MOV BYTE PTR DS:[EDI], AL ; EAX=8B 0042350E /JL SHORT 超级拖拉.004234E3
;以上把试验码重新排列后的字符串的第10-18位rFcBelqdi的hex值计算后相加 ; AL =8B
00423510 MOV ECX, 12 00423515 /MOV EAX, 38E38E39 0042351A |MOV EBP, 2F 0042351F |IMUL ECX 00423521 |SAR EDX, 1 00423523 |MOV EAX, EDX 00423525 |SHR EAX, 1F 00423528 |ADD EDX, EAX 0042352A |XOR EAX, EAX 0042352C |MOV AL, BYTE PTR DS:[ESI+ECX] 0042352F |LEA EDI, DWORD PTR SS:[ESP+EDX+14> 00423533 |CDQ 00423534 |IDIV EBP 00423536 |MOV AL, BYTE PTR DS:[EDI] 00423538 |ADD AL, DL 0042353A |INC ECX 0042353B |CMP ECX, 1B 0042353E |MOV BYTE PTR DS:[EDI], AL 00423540 /JL SHORT 超级拖拉.00423515 ; EAX=95
;以上把试验码重新排列后的字符串的第19-27位uk6mg8pnD的hex值计算后相加 ; AL =95
00423542 MOV ECX, 1B 00423547 /MOV EAX, 38E38E39 0042354C |MOV EBP, 11 00423551 |IMUL ECX 00423553 |SAR EDX, 1 00423555 |MOV EAX, EDX 00423557 |SHR EAX, 1F 0042355A |ADD EDX, EAX 0042355C |XOR EAX, EAX 0042355E |MOV AL, BYTE PTR DS:[ESI+ECX] 00423561 |LEA EDI, DWORD PTR SS:[ESP+EDX+14> 00423565 |CDQ 00423566 |IDIV EBP 00423568 |MOV AL, BYTE PTR DS:[EDI] 0042356A |ADD AL, DL 0042356C |INC ECX 0042356D |CMP ECX, 24 00423570 |MOV BYTE PTR DS:[EDI], AL 00423572 /JL SHORT 超级拖拉.00423547 ; EAX=45
;以上把试验码重新排列后的字符串的第28-36位stjvH3bzA的hex值计算后相加 ; AL =45
00423574 MOV EDX, DWORD PTR SS:[ESP+14] ; EDX=518397B4 00423578 LEA ECX, DWORD PTR SS:[ESP+12] ; ECX=0012EEA6 0042357C PUSH ECX 0042357D PUSH EDX 0042357E CALL 超级拖拉.00422FF0 ; 用上面ECX值计算二组值 00423583 MOV EAX, DWORD PTR DS:[EBX+530] ; EAX<==DS:[EBX+530]=01260490, 00423589 MOV CX, WORD PTR SS:[ESP+1A] ; CX<== SS:[12EEA6]=4234 0042358E ADD ESP, 8 00423591 CMP CL, BYTE PTR DS:[EAX+24] ; 第37位=CL 00423594 JNZ 超级拖拉.0042361E 0042359A CMP CH, BYTE PTR DS:[EAX+25] ; 第38位=CH 0042359D JNZ SHORT 超级拖拉.0042361E 0042359F MOV ECX, DWORD PTR SS:[ESP+15] ; ECX=9A518397 004235A3 LEA EAX, DWORD PTR SS:[ESP+12] 004235A7 PUSH EAX 004235A8 PUSH ECX 004235A9 CALL 超级拖拉.00422FF0 ; 用上面ECX值计算二组值 004235AE MOV EAX, DWORD PTR DS:[EBX+530] 004235B4 MOV CX, WORD PTR SS:[ESP+1A] ; CX=3937 004235B9 ADD ESP, 8 004235BC CMP CL, BYTE PTR DS:[EAX+26] ; 第39位=CL 004235BF JNZ SHORT 超级拖拉.0042361E 004235C1 CMP CH, BYTE PTR DS:[EAX+27] ; 第40位=CH 004235C4 JNZ SHORT 超级拖拉.0042361E 004235C6 MOV EAX, DWORD PTR SS:[ESP+16] ; EAX=029A5183 004235CA LEA EDX, DWORD PTR SS:[ESP+12] 004235CE PUSH EDX 004235CF PUSH EAX 004235D0 CALL 超级拖拉.00422FF0 ; 用上面EAX值计算二组值 004235D5 MOV EAX, DWORD PTR DS:[EBX+530] 004235DB MOV CX, WORD PTR SS:[ESP+1A] ; CX=3833 004235E0 ADD ESP, 8 004235E3 CMP CL, BYTE PTR DS:[EAX+28] ; 第41位=CL 004235E6 JNZ SHORT 超级拖拉.0042361E 004235E8 CMP CH, BYTE PTR DS:[EAX+29] ; 第42位=CH 004235EB JNZ SHORT 超级拖拉.0042361E 004235ED MOV EDX, DWORD PTR SS:[ESP+17] ; EDX=45029A51 004235F1 LEA ECX, DWORD PTR SS:[ESP+12] 004235F5 PUSH ECX 004235F6 PUSH EDX 004235F7 CALL 超级拖拉.00422FF0 ; 用上面EDX值计算二组值 004235FC MOV EAX, DWORD PTR DS:[EBX+530] 00423602 MOV CX, WORD PTR SS:[ESP+1A] ; CX=3531 00423607 ADD ESP, 8 0042360A CMP CL, BYTE PTR DS:[EAX+2A] ; 第43位=CL 0042360D JNZ SHORT 超级拖拉.0042361E 0042360F CMP CH, BYTE PTR DS:[EAX+2B] ; 第44位=CH 00423612 JNZ SHORT 超级拖拉.0042361E 00423614 POP EDI 00423615 POP ESI 00423616 POP EBP 00423617 MOV AL, 1 <==赋注册成功标记 00423619 POP EBX 0042361A ADD ESP, 0C 0042361D RETN 0042361E POP EDI 0042361F POP ESI 00423620 POP EBP 00423621 XOR AL, AL <==赋注册失败标记 00423623 POP EBX 00423624 ADD ESP, 0C 00423627 RETN
===============================
总结: 条件注册码必须有46位长
1. 把注册码按照软件固定的顺序重新排列 2. 用用户名计算的值做易位的指针再次排列 3. 把排列后的字符串前36位计算出一组八位的值 然后用这个值计算出第37-44位的正确值
一组可用的注册码 用户名: fxyang 注册码: 1234567897bcdefg4ijklmnopqrstuv1x3zABBD9F8H5JK Cracked fly[OCN] fxyang[OCN]
|