老文章档案 · 2003 年

MP3 CD 刻录大师 V1.0 算法分析

赢政天下 [WINZHENG.COM] · 网络学院 · 2003-08-01 · 作者:fxyang 人气: · 出处:赢政天下整理收藏)

MP3 CD 刻录大师 V1.0

软件大小: 499 KB

软件语言: 简体中文

软件类别: 国产软件 / 共享版 / 光盘刻录

应用平台: Win9x/NT/2000/XP

界面预览: 无

加入时间: 2002-10-28 15:55:42

下载次数: 5155

推荐等级:

联 系 人: mp3_cd2001@yahoo.com.cn

开 发 商: http://mp3tocd.yeah.net/

软件介绍:

MP3 CD 刻录大师经常在网上冲浪,下载了许多MP3歌曲,但却只能在电脑上播放,这样既不方便,效果也不是很好。现在有了MP3 CD刻录大师,您就能轻松地把喜爱的MP3,WAV文件的歌曲刻录成自己的音乐CD,放在家里的普通CD机,外出的CD随身听,甚至在自己的汽车音响上欣赏。MP3 CD刻录大师能制作出极具个性的音乐CD,任意歌手任意歌曲的任意组合,帮你制作专辑大全,丰富您的CD收藏架,或者作为礼物赠予自己的爱人,好友!

【作者声明】:本人只是对Crack感兴趣,没有其它目的。

【破解工具】:Ollydbg1.09 中文版

—————————————————————————————

【过 程】:

由于用惯了Ollydbg不想到98下面,就用Ollydbg试试直接找可以用的断点,可惜没有找到。不过这次我用了Ollydbg的搜索〔字符参考〕功能,打开搜索字符参考功能窗口,发现有"%s"等格式字符,双击它就来到了00411488 |. 68 70CE4400 PUSH 44CE70 ; |format = "%s"这个地方,下中断。填注册信息--用户名:fxyang 试验码:7894561230123456 按注册键会被OD中断来到这里:

00411460 /$ 6A FF PUSH -1

00411462 |. 68 55AE4300 PUSH 43AE55

00411467 |. 64:A1 0000000>MOV EAX, DWORD PTR FS:[0]

0041146D |. 50 PUSH EAX

0041146E |. 64:8925 00000>MOV DWORD PTR FS:[0], ESP

00411475 |. 81EC 90000000 SUB ESP, 90

0041147B |. 53 PUSH EBX

0041147C |. 55 PUSH EBP

0041147D |. 56 PUSH ESI

0041147E |. 57 PUSH EDI

0041147F |. 68 74CE4400 PUSH 44CE74

; "abcdefABCDEFghijkqrs234tuvwxyzGHIJKLMNOPlmnopQRSTUVWXYZ1567890" <--字符串表

00411484 |. 8D4424 60 LEA EAX, DWORD PTR SS:[ESP+60]

00411488 |. 68 70CE4400 PUSH 44CE70 ; |format = "%s"

0041148D |. 50 PUSH EAX // 断点

0041148E |. C78424 B40000>MOV DWORD PTR SS:[ESP+B4], 1

00411499 |. FF15 84C44300 CALL DWORD PTR DS:[43C484]

0041149F |. 83C4 0C ADD ESP, 0C

004114A2 |. 8D8C24 B00000>LEA ECX, DWORD PTR SS:[ESP+B0]

004114A9 |. 51 PUSH ECX

004114AA |. 8D4C24 18 LEA ECX, DWORD PTR SS:[ESP+18]

004114AE |. E8 2CCF0100 CALL 0042E3DF

004114B3 |. A1 34E14400 MOV EAX, DWORD PTR DS:[44E134]

004114B8 |. 894424 10 MOV DWORD PTR SS:[ESP+10], EAX

004114BC |. 894424 18 MOV DWORD PTR SS:[ESP+18], EAX

004114C0 |. 8B5424 14 MOV EDX, DWORD PTR SS:[ESP+14]

004114C4 |. C68424 A80000>MOV BYTE PTR SS:[ESP+A8], 4

004114CC |. 8B42 F8 MOV EAX, DWORD PTR DS:[EDX-8]

004114CF |. 83F8 02 CMP EAX, 2

004114D2 |. 0F8C 4D030000 JL 00411825

004114D8 |. 8D8424 B40000>LEA EAX, DWORD PTR SS:[ESP+B4]

004114DF |. 8D4C24 1C LEA ECX, DWORD PTR SS:[ESP+1C]

004114E3 |. 50 PUSH EAX

004114E4 |. E8 F6CE0100 CALL 0042E3DF

004114E9 |. 8B4C24 1C MOV ECX, DWORD PTR SS:[ESP+1C]

004114ED |. C68424 A80000>MOV BYTE PTR SS:[ESP+A8], 5

004114F5 |. 8B41 F8 MOV EAX, DWORD PTR DS:[ECX-8]

004114F8 |. 83F8 06 CMP EAX, 6

004114FB |. 0F8C 13030000 JL 00411814

00411501 |. 8B5424 14 MOV EDX, DWORD PTR SS:[ESP+14]

00411505 |. 8B42 F8 MOV EAX, DWORD PTR DS:[EDX-8]

00411508 |. 83F8 04 CMP EAX, 4

0041150B |. 7D 09 JGE SHORT 00411516

0041150D |. 8D0440 LEA EAX, DWORD PTR DS:[EAX+EAX*2]

00411510 |. 894424 30 MOV DWORD PTR SS:[ESP+30], EAX

00411514 |. EB 07 JMP SHORT 0041151D

00411516 |> 8D0C00 LEA ECX, DWORD PTR DS:[EAX+EAX]

00411519 |. 894C24 30 MOV DWORD PTR SS:[ESP+30], ECX

0041151D |> 33FF XOR EDI, EDI

0041151F |. B3 09 MOV BL, 9

00411521 |> 68 B4CE4400 /PUSH 44CEB4

; ASCII "mp3tocdrecord" <--参数

00411526 |. 8D4C24 24 |LEA ECX, DWORD PTR SS:[ESP+24]

0041152A |. E8 A9D10100 |CALL 0042E6D8

0041152F |. 33ED |XOR EBP, EBP

00411531 |. 6A 02 |PUSH 2

00411533 |. 8D5424 38 |LEA EDX, DWORD PTR SS:[ESP+38]

00411537 |. 55 |PUSH EBP

00411538 |. 52 |PUSH EDX

00411539 |. 8D4C24 20 |LEA ECX, DWORD PTR SS:[ESP+20]

0041153D |. C68424 B40000>|MOV BYTE PTR SS:[ESP+B4], 6

00411545 |. E8 AAA70100 |CALL 0042BCF4 <--取用户名的前二位 “fx"

0041154A |. 50 |PUSH EAX

0041154B |. 8D4C24 14 |LEA ECX, DWORD PTR SS:[ESP+14]

0041154F |. C68424 AC0000>|MOV BYTE PTR SS:[ESP+AC], 7

00411557 |. E8 47D20100 |CALL 0042E7A3

0041155C |. 8D4C24 34 |LEA ECX, DWORD PTR SS:[ESP+34]

00411560 |. C68424 A80000>|MOV BYTE PTR SS:[ESP+A8], 6

00411568 |. E8 FDD00100 |CALL 0042E66A

0041156D |. 8B4424 10 |MOV EAX, DWORD PTR SS:[ESP+10]

; EAX<--011A7528,(ASCII "fx")

00411571 |. 83C0 F8 |ADD EAX, -8

00411574 |. 8338 00 |CMP DWORD PTR DS:[EAX], 0 ; DS:[011A7520]=02

00411577 |. 0F8E 40020000 |JLE 004117BD

0041157D |> 8B10 |/MOV EDX, DWORD PTR DS:[EAX]

0041157F |. 8B0D 34E14400 ||MOV ECX, DWORD PTR DS:[44E134]

00411585 |. 03EA ||ADD EBP, EDX ; EBP=0+2<--这里在计数

00411587 |. 894C24 24 ||MOV DWORD PTR SS:[ESP+24], ECX

0041158B |. 896C24 44 ||MOV DWORD PTR SS:[ESP+44], EBP

0041158F |. 8B08 ||MOV ECX, DWORD PTR DS:[EAX]

00411591 |. 33F6 ||XOR ESI, ESI

00411593 |. 85C9 ||TEST ECX, ECX

00411595 |. C68424 A80000>||MOV BYTE PTR SS:[ESP+A8], 8

0041159D |. 897424 2C ||MOV DWORD PTR SS:[ESP+2C], ESI

004115A1 |. 0F8E B1010000 ||JLE 00411758

004115A7 |. EB 04 ||JMP SHORT 004115AD

004115A9 |> 8B7424 2C ||/MOV ESI, DWORD PTR SS:[ESP+2C]

004115AD |> 51 || PUSH ECX

004115AE |. 8D4C24 24 |||LEA ECX, DWORD PTR SS:[ESP+24]

004115B2 |. 8BD4 |||MOV EDX, ESP

004115B4 |. 896424 58 |||MOV DWORD PTR SS:[ESP+58], ESP

004115B8 |. 6A 01 |||PUSH 1

004115BA |. 56 |||PUSH ESI

004115BB |. 52 |||PUSH EDX

004115BC |. E8 33A70100 |||CALL 0042BCF4

; AL=DS:[011A7488]=6D ('m')<--取参数的第一位

004115C1 |. E8 AAFDFFFF |||CALL 00411370

; <--取m在串中的偏移

004115C6 |. 8BE8 |||MOV EBP, EAX

// 第二次的参数不用固定的,是第一次计算的二位注册码

004115C8 |. 83C4 04 |||ADD ESP, 4

004115CB |. 85ED |||TEST EBP, EBP

004115CD |. 0F8C 1F020000 |||JL 004117F2

004115D3 |. 51 |||PUSH ECX

004115D4 |. 8D4C24 14 |||LEA ECX, DWORD PTR SS:[ESP+14]

004115D8 |. 8BC4 |||MOV EAX, ESP

004115DA |. 896424 58 |||MOV DWORD PTR SS:[ESP+58], ESP

004115DE |. 6A 01 |||PUSH 1

004115E0 |. 56 |||PUSH ESI

004115E1 |. 50 |||PUSH EAX

004115E2 |. E8 0DA70100 |||CALL 0042BCF4 ; <--取用户码的第一位66('f')

004115E7 |. E8 84FDFFFF |||CALL 00411370 ; <--用户码的第一位66('f')在串中的地址偏移

004115EC |. 8BF0 |||MOV ESI, EAX ; ESI=EAX=5

004115EE |. 83C4 04 |||ADD ESP, 4

004115F1 |. 85F6 |||TEST ESI, ESI

004115F3 |. 0F8C F9010000 |||JL 004117F2

004115F9 |. 8D4C24 5C |||LEA ECX, DWORD PTR SS:[ESP+5C]

; ECX<--0012E0AC, ASCII "abcdefABCDEFghijkqrs234tuvwxyzGHIJKLMNOPlmnopQRSTUVWXYZ1567890"<--表进入

004115FD |. 51 |||PUSH ECX

004115FE |. 8D4C24 2C |||LEA ECX, DWORD PTR SS:[ESP+2C]

00411602 |. E8 D1D00100 |||CALL 0042E6D8

00411607 |. 03F5 |||ADD ESI, EBP ; ESI=5('f')+29('m')=2E

00411609 |. 889C24 A80000>|||MOV BYTE PTR SS:[ESP+A8], BL

00411610 |. 83FE 3D |||CMP ESI, 3D

00411613 |. 7E 03 |||JLE SHORT 00411618

00411615 |. 83EE 3E |||SUB ESI, 3E

00411618 |> 6A 01 |||PUSH 1

0041161A |. 8D5424 44 |||LEA EDX, DWORD PTR SS:[ESP+44]

0041161E |. 56 |||PUSH ESI

0041161F |. 52 |||PUSH EDX

00411620 |. 8D4C24 34 |||LEA ECX, DWORD PTR SS:[ESP+34]

00411624 |. E8 CBA60100 |||CALL 0042BCF4

; <--用2E寻址查找串中的字符=52('R')

00411629 |. 50 |||PUSH EAX

0041162A |. 8D4424 28 |||LEA EAX, DWORD PTR SS:[ESP+28]

0041162E |. 8D4C24 5C |||LEA ECX, DWORD PTR SS:[ESP+5C]

00411632 |. 50 |||PUSH EAX

00411633 |. 51 |||PUSH ECX

00411634 |. C68424 B40000>|||MOV BYTE PTR SS:[ESP+B4], 0A

0041163C |. E8 58D20100 |||CALL 0042E899

; R-->DS:[011A7618]--注册码的第一位

00411641 |. 50 |||PUSH EAX

00411642 |. 8D4C24 28 |||LEA ECX, DWORD PTR SS:[ESP+28]

00411646 |. C68424 AC0000>|||MOV BYTE PTR SS:[ESP+AC], 0B

0041164E |. E8 50D10100 |||CALL 0042E7A3

00411653 |. 8D4C24 58 |||LEA ECX, DWORD PTR SS:[ESP+58]

00411657 |. C68424 A80000>|||MOV BYTE PTR SS:[ESP+A8], 0A

0041165F |. E8 06D00100 |||CALL 0042E66A

00411664 |. 8D4C24 40 |||LEA ECX, DWORD PTR SS:[ESP+40]

00411668 |. 889C24 A80000>|||MOV BYTE PTR SS:[ESP+A8], BL

0041166F |. E8 F6CF0100 |||CALL 0042E66A

00411674 |. 6A 01 |||PUSH 1

00411676 |. 8D5424 4C |||LEA EDX, DWORD PTR SS:[ESP+4C]

0041167A |. 56 |||PUSH ESI

0041167B |. 52 |||PUSH EDX

0041167C |. 8D4C24 34 |||LEA ECX, DWORD PTR SS:[ESP+34]

00411680 |. E8 6FA60100 |||CALL 0042BCF4

00411685 |. 50 |||PUSH EAX

00411686 |. 8D4424 1C |||LEA EAX, DWORD PTR SS:[ESP+1C]

0041168A |. 8D4C24 54 |||LEA ECX, DWORD PTR SS:[ESP+54]

0041168E |. 50 |||PUSH EAX

0041168F |. 51 |||PUSH ECX

00411690 |. C68424 B40000>|||MOV BYTE PTR SS:[ESP+B4], 0C

00411698 |. E8 FCD10100 |||CALL 0042E899

0041169D |. 50 |||PUSH EAX

0041169E |. 8D4C24 1C |||LEA ECX, DWORD PTR SS:[ESP+1C]

004116A2 |. C68424 AC0000>|||MOV BYTE PTR SS:[ESP+AC], 0D

004116AA |. E8 F4D00100 |||CALL 0042E7A3

004116AF |. 8D4C24 50 |||LEA ECX, DWORD PTR SS:[ESP+50]

004116B3 |. C68424 A80000>|||MOV BYTE PTR SS:[ESP+A8], 0C

004116BB |. E8 AACF0100 |||CALL 0042E66A

004116C0 |. 8D4C24 48 |||LEA ECX, DWORD PTR SS:[ESP+48]

004116C4 |. 889C24 A80000>|||MOV BYTE PTR SS:[ESP+A8], BL

004116CB |. E8 9ACF0100 |||CALL 0042E66A

004116D0 |. 83FF 04 |||CMP EDI, 4

004116D3 |. 7D 56 |||JGE SHORT 0041172B

004116D5 |. 6A 01 |||PUSH 1

004116D7 |. 8D5424 40 |||LEA EDX, DWORD PTR SS:[ESP+40]

004116DB |. 56 |||PUSH ESI

004116DC |. 52 |||PUSH EDX

004116DD |. 8D4C24 34 |||LEA ECX, DWORD PTR SS:[ESP+34]

004116E1 |. E8 0EA60100 |||CALL 0042BCF4

004116E6 |. 8BF0 |||MOV ESI, EAX

004116E8 |. 8BC7 |||MOV EAX, EDI

004116EA |. 6A 01 |||PUSH 1

004116EC |. 50 |||PUSH EAX

004116ED |. 8D4424 40 |||LEA EAX, DWORD PTR SS:[ESP+40]

004116F1 |. 50 |||PUSH EAX

004116F2 |. 8D4C24 28 |||LEA ECX, DWORD PTR SS:[ESP+28]

004116F6 |. C68424 B40000>|||MOV BYTE PTR SS:[ESP+B4], 0E

004116FE |. 47 |||INC EDI

004116FF |. E8 F0A50100 |||CALL 0042BCF4

00411704 |. 8B36 |||MOV ESI, DWORD PTR DS:[ESI]

00411706 |. 8B00 |||MOV EAX, DWORD PTR DS:[EAX]

00411708 |. 56 |||PUSH ESI

00411709 |. 50 |||PUSH EAX

0041170A |. E8 55BB0000 |||CALL 0041D264

0041170F |. 83C4 08 |||ADD ESP, 8

00411712 |. 8D4C24 38 |||LEA ECX, DWORD PTR SS:[ESP+38]

00411716 |. E8 4FCF0100 |||CALL 0042E66A

0041171B |. 8D4C24 3C |||LEA ECX, DWORD PTR SS:[ESP+3C]

0041171F |. 889C24 A80000>|||MOV BYTE PTR SS:[ESP+A8], BL

00411726 |. E8 3FCF0100 |||CALL 0042E66A

0041172B |> 8D4C24 28 |||LEA ECX, DWORD PTR SS:[ESP+28]

0041172F |. C68424 A80000>|||MOV BYTE PTR SS:[ESP+A8], 8

00411737 |. E8 2ECF0100 |||CALL 0042E66A ; 又取用户名的二位

0041173C |. 8B4C24 10 |||MOV ECX, DWORD PTR SS:[ESP+10] ; ECX<--011A7528 ASCII "ya"

00411740 |. 8B4424 2C |||MOV EAX, DWORD PTR SS:[ESP+2C]

00411744 |. 40 |||INC EAX

00411745 |. 8B51 F8 |||MOV EDX, DWORD PTR DS:[ECX-8]

00411748 |. 894424 2C |||MOV DWORD PTR SS:[ESP+2C], EAX

0041174C |. 3BC2 |||CMP EAX, EDX

0041174E |.^ 0F8C 55FEFFFF ||\JL 004115A9 ;

<--这段循环把参数和用户名的各位在字符串中的偏移量相加做指针在字符串中取字符做注册码

00411754 |. 8B6C24 44 ||MOV EBP, DWORD PTR SS:[ESP+44]

00411758 |> 8D5424 24 ||LEA EDX, DWORD PTR SS:[ESP+24]

0041175C |. 8D4C24 20 ||LEA ECX, DWORD PTR SS:[ESP+20]

00411760 |. 52 ||PUSH EDX

00411761 |. E8 3DD00100 ||CALL 0042E7A3

00411766 |. 6A 02 ||PUSH 2

00411768 |. 8D4424 50 ||LEA EAX, DWORD PTR SS:[ESP+50]

0041176C |. 55 ||PUSH EBP

0041176D |. 50 ||PUSH EAX

0041176E |. 8D4C24 20 ||LEA ECX, DWORD PTR SS:[ESP+20]

00411772 |. E8 7DA50100 ||CALL 0042BCF4 ; <--取了最后二位("ng")

00411777 |. 50 ||PUSH EAX

00411778 |. 8D4C24 14 ||LEA ECX, DWORD PTR SS:[ESP+14]

0041177C |. C68424 AC0000>||MOV BYTE PTR SS:[ESP+AC], 0F

00411784 |. E8 1AD00100 ||CALL 0042E7A3

00411789 |. 8D4C24 4C ||LEA ECX, DWORD PTR SS:[ESP+4C]

0041178D |. C68424 A80000>||MOV BYTE PTR SS:[ESP+A8], 8

00411795 |. E8 D0CE0100 ||CALL 0042E66A

0041179A |. 8D4C24 24 ||LEA ECX, DWORD PTR SS:[ESP+24]

0041179E |. C68424 A80000>||MOV BYTE PTR SS:[ESP+A8], 6

004117A6 |. E8 BFCE0100 ||CALL 0042E66A

004117AB |. 8B4C24 10 ||MOV ECX, DWORD PTR SS:[ESP+10] ; ECX<--011A7528 ASCII "ng"

004117AF |. 8D41 F8 ||LEA EAX, DWORD PTR DS:[ECX-8]

004117B2 |. 8B49 F8 ||MOV ECX, DWORD PTR DS:[ECX-8]

004117B5 |. 85C9 ||TEST ECX, ECX

004117B7 |.^ 0F8F C0FDFFFF |\JG 0041157D

;<--这个循环检查注册码第一部分的长度等于用户名的长度

004117BD |> 8B4424 18 |MOV EAX, DWORD PTR SS:[ESP+18] ; EAX<--011A7528 ASCII "RDgDZ3vYNaz3"

004117C1 |. 8B5424 30 |MOV EDX, DWORD PTR SS:[ESP+30] // 计算注册码连接后的字符串

004117C5 |. 3950 F8 |CMP DWORD PTR DS:[EAX-8], EDX <--计算完成就出来

004117C8 |. 0F8D D0000000 |JGE 0041189E

004117CE |. 8D4424 18 |LEA EAX, DWORD PTR SS:[ESP+18]

004117D2 |. 8D4C24 14 |LEA ECX, DWORD PTR SS:[ESP+14]

004117D6 |. 50 |PUSH EAX

004117D7 |. E8 C7CF0100 |CALL 0042E7A3

004117DC |. 8D4C24 20 |LEA ECX, DWORD PTR SS:[ESP+20]

004117E0 |. C68424 A80000>|MOV BYTE PTR SS:[ESP+A8], 5

004117E8 |. E8 7DCE0100 |CALL 0042E66A

004117ED |.^ E9 2FFDFFFF \JMP 00411521

; <--这个循环检查注册码的第二部分和第二次计算的参数分配。

004117F2 |> 8D4C24 24 LEA ECX, DWORD PTR SS:[ESP+24]

004117F6 |. C68424 A80000>MOV BYTE PTR SS:[ESP+A8], 6

004117FE |. E8 67CE0100 CALL 0042E66A

00411803 |> 8D4C24 20 LEA ECX, DWORD PTR SS:[ESP+20]

00411807 |. C68424 A80000>MOV BYTE PTR SS:[ESP+A8], 5

0041180F |. E8 56CE0100 CALL 0042E66A

00411814 |> 8D4C24 1C LEA ECX, DWORD PTR SS:[ESP+1C]

00411818 |. C68424 A80000>MOV BYTE PTR SS:[ESP+A8], 4

00411820 |. E8 45CE0100 CALL 0042E66A

00411825 |> 8D4C24 18 LEA ECX, DWORD PTR SS:[ESP+18]

00411829 |. C68424 A80000>MOV BYTE PTR SS:[ESP+A8], 3

00411831 |. E8 34CE0100 CALL 0042E66A

00411836 |. 8D4C24 10 LEA ECX, DWORD PTR SS:[ESP+10]

0041183A |. C68424 A80000>MOV BYTE PTR SS:[ESP+A8], 2

00411842 |. E8 23CE0100 CALL 0042E66A

00411847 |. 8D4C24 14 LEA ECX, DWORD PTR SS:[ESP+14]

0041184B |. C68424 A80000>MOV BYTE PTR SS:[ESP+A8], 1

00411853 |. E8 12CE0100 CALL 0042E66A

00411858 |. 8D8C24 B00000>LEA ECX, DWORD PTR SS:[ESP+B0]

0041185F |. C68424 A80000>MOV BYTE PTR SS:[ESP+A8], 0

00411867 |. E8 FECD0100 CALL 0042E66A

0041186C |. 8D8C24 B40000>LEA ECX, DWORD PTR SS:[ESP+B4]

00411873 |. C78424 A80000>MOV DWORD PTR SS:[ESP+A8], -1

0041187E |. E8 E7CD0100 CALL 0042E66A

00411883 |. 32C0 XOR AL, AL

00411885 |> 8B8C24 A00000>MOV ECX, DWORD PTR SS:[ESP+A0]

0041188C |. 5F POP EDI

0041188D |. 5E POP ESI

0041188E |. 5D POP EBP

0041188F |. 64:890D 00000>MOV DWORD PTR FS:[0], ECX

00411896 |. 5B POP EBX

00411897 |. 81C4 9C000000 ADD ESP, 9C

0041189D |. C3 RETN

0041189E |> 8B4C24 1C MOV ECX, DWORD PTR SS:[ESP+1C]

004118A2 |. 50 PUSH EAX ; /EAX= 011A7528 ASCII "RDgDZ3vYNaz3"

004118A3 |. 51 PUSH ECX ; |ECX = 011A6F38 ASCII "RDgD789456"

004118A4 |. E8 BBB90000 CALL 0041D264 ; \<--注册码的比较

====>F8

----注册码的比较-----

|

0041D264 /$ 55 PUSH EBP

0041D265 |. 8BEC MOV EBP, ESP

0041D267 |. 833D 1C5D4800>CMP DWORD PTR DS:[485D1C], 0

0041D26E |. 53 PUSH EBX

0041D26F |. 56 PUSH ESI

0041D270 |. 57 PUSH EDI

0041D271 |. 75 12 JNZ SHORT 0041D285 ; mp32cd.0041D285

0041D273 |. FF75 0C PUSH [ARG.2]

0041D276 |. FF75 08 PUSH [ARG.1]

0041D279 |. E8 F2310000 CALL 00420470 ; mp32cd.00420470

0041D27E |. 59 POP ECX

0041D27F |. 59 POP ECX

0041D280 |. E9 89000000 JMP 0041D30E ; mp32cd.0041D30E

0041D285 |> 6A 19 PUSH 19

0041D287 |. E8 6E310000 CALL 004203FA ; mp32cd.004203FA

0041D28C |. 8B75 0C MOV ESI, [ARG.2]

0041D28F |. 8B7D 08 MOV EDI, [ARG.1]

0041D292 |. 59 POP ECX

0041D293 |> 66:0FB60F /MOVZX CX, BYTE PTR DS:[EDI]

; CX<--=37 ('7')<--试验码的各位

0041D297 |. 0FB6C1 |MOVZX EAX, CL

0041D29A |. 47 |INC EDI

0041D29B |. 894D 0C |MOV [ARG.2], ECX

0041D29E |. F680 215E4800>|TEST BYTE PTR DS:[EAX+485E21], 4

0041D2A5 |. 74 16 |JE SHORT 0041D2BD ; mp32cd.0041D2BD

0041D2A7 |. 8A07 |MOV AL, BYTE PTR DS:[EDI]

0041D2A9 |. 84C0 |TEST AL, AL

0041D2AB |. 75 06 |JNZ SHORT 0041D2B3 ; mp32cd.0041D2B3

0041D2AD |. 8365 0C 00 |AND [ARG.2], 0

0041D2B1 |. EB 0A |JMP SHORT 0041D2BD ; mp32cd.0041D2BD

0041D2B3 |> 33D2 |XOR EDX, EDX

0041D2B5 |. 47 |INC EDI

0041D2B6 |. 8AF1 |MOV DH, CL

0041D2B8 |. 8AD0 |MOV DL, AL

0041D2BA |. 8955 0C |MOV [ARG.2], EDX

0041D2BD |> 66:0FB61E |MOVZX BX, BYTE PTR DS:[ESI]

; BX<--=52 ('R')<--注册码的各位

0041D2C1 |. 0FB6C3 |MOVZX EAX, BL

0041D2C4 |. 46 |INC ESI

0041D2C5 |. F680 215E4800>|TEST BYTE PTR DS:[EAX+485E21], 4

0041D2CC |. 74 13 |JE SHORT 0041D2E1 ; mp32cd.0041D2E1

0041D2CE |. 8A06 |MOV AL, BYTE PTR DS:[ESI]

0041D2D0 |. 84C0 |TEST AL, AL

0041D2D2 |. 75 04 |JNZ SHORT 0041D2D8 ; mp32cd.0041D2D8

0041D2D4 |. 33DB |XOR EBX, EBX

0041D2D6 |. EB 09 |JMP SHORT 0041D2E1 ; mp32cd.0041D2E1

0041D2D8 |> 33C9 |XOR ECX, ECX

0041D2DA |. 46 |INC ESI

0041D2DB |. 8AEB |MOV CH, BL

0041D2DD |. 8AC8 |MOV CL, AL

0041D2DF |. 8BD9 |MOV EBX, ECX

0041D2E1 |> 66:395D 0C |CMP WORD PTR SS:[EBP+C], BX <--在这里比较

0041D2E5 75 09 JNZ SHORT 0041D2F0

0041D2E7 |. 66:837D 0C 00 |CMP WORD PTR SS:[EBP+C], 0

0041D2EC |. 74 16 |JE SHORT 0041D304

0041D2EE |.^ EB A3 \JMP SHORT 0041D293

0041D2F0 |> 6A 19 PUSH 19

0041D2F2 |. E8 64310000 CALL 0042045B

0041D2F7 |. 66:3B5D 0C CMP BX, WORD PTR SS:[EBP+C]

0041D2FB |. 59 POP ECX

0041D2FC |. 1BC0 SBB EAX, EAX

0041D2FE |. 83E0 02 AND EAX, 2

0041D301 |. 48 DEC EAX <--赋失败标志

0041D302 |. EB 0A JMP SHORT 0041D30E

0041D304 |> 6A 19 PUSH 19

0041D306 |. E8 50310000 CALL 0042045B

0041D30B |. 59 POP ECX

0041D30C |. 33C0 XOR EAX, EAX <--赋成功标志

0041D30E |> 5F POP EDI

0041D30F |. 5E POP ESI

0041D310 |. 5B POP EBX

0041D311 |. 5D POP EBP

0041D312 \. C3 RETN

====================================================

注册码的算法跟踪已经完成,总结一下:

条件---注册码的长度是用户名的二倍

注册码的计算方法:

1.首先取固定参数'mp"和用户名的前二位'fx',把参数的第一位和用户名的第一位在字符串表中的偏移量相加作为查表的指针,在字符串表中取相应位的字符做注册码的第一位。

第二位的计算同上。

2.第二次取用户名的第二个俩位,参数则用第一次计算的二位注册码,计算方法同上。

直到用户名计算完,得到的是注册码的第一部分。

3.注册码的后一半的计算同第一部分的计算方法一样(用一个循环计算的),但是参数改变了:

1.)首先取固定参数'mp'二位和第一次计算的字符串的前二位,进行同第一步一样的计算。

2.)第二次取第一次计算的字符串的第二个俩位和上面计算的二位注册码进行相同的计算,

直到第一次计算的字符串用完,得到的字符串就是注册码的后一半。

4.)把上面二次的字符串连接起来就是正确的注册码

PowerBoy兄说写这个软件的算法注册机能提高算法的分析能力,呵呵我用了将近二天的时间完成了它的算法注册机。感谢PowerBoy兄的鞭策。

这是注册机的vb源码:

------vb6.0测试通过-----

|

Private Sub Command1_Click()

Dim e As Integer

Dim f As Integer

Dim g As Integer

Dim h As Integer

Dim i As Integer

Dim j As Integer

Dim k As Integer

Dim l As String

Dim m As String

Dim w As Integer

Dim n As Integer

Dim nametemp2 As String

Dim nametemp3 As String

Dim nametemp As String

Dim regname As String

Dim nametemp1 As String

Dim nametemp0 As String

Dim nametemp4 As String

Dim nametemp5 As String

Dim a As String

Dim b As String

Dim c As String

strtmp1 = "abcdefABCDEFghijkqrs234tuvwxyzGHIJKLMNOPlmnopQRSTUVWXYZ1567890"

'定义一个字符串表

regname = Text1.Text '取得注册名

reglen = Len(regname) '取得注册名的长度

If reglen < 3 Then

MsgBox ("请输入长度大于三位的用户名")

GoTo tc

Else

End If

i = 1

begin:

l = Mid(regname, i, 1) '取用户名的各位字符

e = 1

bj: m = Mid(strtmp1, e, 1) '在串中查找用户名字符的偏移量

j = StrComp(l, m)

If j <> 0 Then

e = e + 1 'e用于计数

GoTo bj

Else

End If '这个循环用于计算偏移量

If i = 1 Then

e = e + 41

If e > 62 Then

e = e - 62

Else

End If

nametemp = Mid(strtmp1, e, 1)

i = i + 1

GoTo begin

Else

End If

e = e + 44

If e > 62 Then

e = e - 62

Else

End If

nametemp1 = Mid(strtmp1, e, 1)

nametemp0 = nametemp + nametemp1

'第二个关键计算

i = 3

k = 1

begin1:

b = Mid(regname, i, 1) '取用户名的各位字符

e = 1

bj2: m = Mid(strtmp1, e, 1) '在串中查找用户名字符的偏移量

j = StrComp(b, m)

If j <> 0 Then

e = e + 1 'e用于计数

GoTo bj2

Else

End If '这个循环用于计算偏移量

c = Mid(nametemp0, k, 1) '取第一次计算的值

f = 1

bj3: m = Mid(strtmp1, f, 1) '在串中查找用户名字符的偏移量

j = StrComp(c, m)

If j <> 0 Then

f = f + 1 'e用于计数

GoTo bj3

Else

End If '这个循环用于计算偏移量

e = e + f - 1

If e > 62 Then

e = e - 62

Else

End If

nametemp3 = Mid(strtmp1, e, 1)

nametemp0 = nametemp0 + nametemp3

i = i + 1

k = k + 1

If Len(nametemp0) < reglen Then

GoTo begin1

Else

End If

If Len(nametemp0) < reglen Then

GoTo begin1

Else

End If

'到这里完成一半的计算

'下面可是后一半的计算

'====================================================

i = 1

begin7:

l = Mid(nametemp0, i, 1) '取用户名的各位字符

e = 1

bj7: m = Mid(strtmp1, e, 1) '在串中查找用户名字符的偏移量

j = StrComp(l, m)

If j <> 0 Then

e = e + 1 'e用于计数

GoTo bj7

Else

End If '这个循环用于计算偏移量

If i = 1 Then

e = e + 41

If e > 62 Then

e = e - 62

Else

End If

nametemp = Mid(strtmp1, e, 1)

i = i + 1

GoTo begin7

Else

End If

e = e + 44

If e > 62 Then

e = e - 62

Else

End If

nametemp1 = Mid(strtmp1, e, 1)

nametemp4 = nametemp + nametemp1

'第二个关键计算

w = 3

n = 1

begin8:

b = Mid(nametemp0, w, 1) '取第一次计算字符串的各位字符

e = 1

bj8: m = Mid(strtmp1, e, 1) '在串中查找字符的偏移量

j = StrComp(b, m)

If j <> 0 Then

e = e + 1 'e用于计数

GoTo bj8

Else

End If '这个循环用于计算偏移量

c = Mid(nametemp4, n, 1) '取第一次计算的值

f = 1

bj9: m = Mid(strtmp1, f, 1) '在串中查找字符的偏移量

j = StrComp(c, m)

If j <> 0 Then

f = f + 1 'e用于计数

GoTo bj9

Else

End If '这个循环用于计算偏移量

e = e + f - 1

If e > 62 Then

e = e - 62

Else

End If

nametemp5 = Mid(strtmp1, e, 1) '在串中查找符合条件的字符

nametemp4 = nametemp4 + nametemp5 '连接成注册码的后半部分

w = w + 1

n = n + 1

If Len(nametemp4) < reglen Then

GoTo begin8

Else

End If

Text2.Text = nametemp0 + nametemp4 '二个部分连接成正确的注册码

tc: End Sub

Private Sub Command2_Click()

End

End Sub

由于对编程语言不熟悉,可能存在错误。请大家指正,谢谢。

by fxyang

2003.4.30

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

相关文章:

·语音界面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)复原。发现问题请联系我们
← 返回老文章档案 · 软件史档案馆 · 赢政天下站史