老文章档案 · 2003 年

超级拖拉机 4.02 算法分析

破解教程 · 算法分析 · 2003-07-15 · 作者:fxyang 人气: · 出处:赢政天下整理收藏)

超级拖拉机

超级拖拉机是一个四副牌的拖拉机游戏,在全国范围都有广泛使用。

游戏有多种设定以适应不同地方的规则。游戏支持单人玩,也支网络

多人一起玩。最新版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'yc"k$%&'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,(ASCII"123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJK")

00423B74 MOV EAX, DWORD PTR SS:[EBP+530]

; EAX<==01260490,(ASCII"123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJK")

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]

2003.3.31

.

(出处:赢政天下整理收藏)

相关文章:

·语音界面2.0算法分析及注册机源码!

·侠客系统修改器1.21破解手记--算法分析

·中文拨号上网计时计费器 V4.12注册算法分析

·ClockWise 3.22e注册码算法分析

·CoolClock V1.02注册算法分析

·Directory Scanner v1.5 注册算法分析

·Disk Chief 1.2 简单注册算法分析

·EffeTech HTTP Sniffer 3.2注册算法分析

·eLib2.01算法分析

·EZ MP3 Recorder 1.15 注册算法分析

相关软件:

→ 特别推荐

→ 热点TOP10

我为人人《《==》》人人为我

关于我们 |

帮助(?)

| 广告服务 |

版权声明 |

商业合作 |

发展历程 |

加盟我们 |

联系我们

Copyright © 1999-2003

winzheng.com All Rights Reserved.

繁体版:由华琦数码技术提供

Powered

by:MeSky.Net

2003-2004 年,宽带刚刚普及,下载站的文章区是许多人学电脑的第一课堂。
🕰 → 🤖 从那时到现在

当年一篇教程能让一台电脑焕然一新;今天的效率工具换成了 AI。 想知道当下最可靠的 AI 模型怎么选?看 赢政指数——我们用了 28 年的选软件严谨,现在用来评测大模型。

档案性质声明:本页为赢政天下(1998-2011)老文章的历史档案复原, 内容反映当年发表时的原貌——包括当年的技术表述、软件版本与观点,部分方法在今天已不适用或不合规,仅作互联网历史记录与研究用途, 不提供任何形式的下载。原始数据经由公共网络存档(Internet Archive)复原。发现问题请联系我们
← 返回老文章档案 · 软件史档案馆 · 赢政天下站史