【软件名称】Mp3 Joiner
【下载地址】http://www.onlinedown.net/soft/45966.htm
【应用平台】Win9x/NT/2000/XP
【软件大小】410K
【软件限制】未注册时,每次合并不能超过3个Mp3文件。
【保护方式】用户名+序列号
【破 解 者】HappyTown
【破解难度】1/10
【破解声明】这是我分析的第一个共享软件,简单,适合初学者。
【破解工具】OD,Peid,Windows自带计算器
【软件简介】把多个Mp3文件合而为一。
======================================================================
【分析过程】

在这个分析过程中,我不会假设你不知道如何下断点;有些地方我省略去了解释,主要是不想让你变得太懒惰。

1、Peid分析,无壳;

2、正式入题:

输入Name:happy
假码:87654321(为什么是8位?只有你亲自动手才能知道)

00405426    8845 FA       mov byte ptr ss:[ebp-6],al            ; 61(a)
00405429    0FB645 EF     movzx eax,byte ptr ss:[ebp-11]        ; 68(h)
0040542D    83C8 4D       or eax,4D                             ; 68 xor 4d =6D
00405430    8845 EF       mov byte ptr ss:[ebp-11],al           ; 6D(m)
00405433    0FB64D F8     movzx ecx,byte ptr ss:[ebp-8]         ; 61(a)
00405437    83C9 50       or ecx,50                             ; 71
0040543A    884D F8       mov byte ptr ss:[ebp-8],cl
0040543D    0FB655 FF     movzx edx,byte ptr ss:[ebp-1]         ; 68
00405441    83CA 33       or edx,33                             ; 7B
00405444    8855 FF       mov byte ptr ss:[ebp-1],dl
00405447    0FB645 FA     movzx eax,byte ptr ss:[ebp-6]         ; 61
0040544B    83C8 4A       or eax,4A                             ; 6B
0040544E    8845 FA       mov byte ptr ss:[ebp-6],al
00405451    0FB645 EF     movzx eax,byte ptr ss:[ebp-11]        ; 6D(m)
00405455    99            cdq
00405456    B9 0A000000   mov ecx,0A
0040545B    F7F9          idiv ecx                              ; EAX=A,EDX=9;
0040545D    8855 EF       mov byte ptr ss:[ebp-11],dl           ; 09 (serial 第1位)
00405460    0FB645 F8     movzx eax,byte ptr ss:[ebp-8]         ; 71(q)
00405464    99            cdq
00405465    B9 0A000000   mov ecx,0A
0040546A    F7F9          idiv ecx                              ; EAX=B,EDX=3;
0040546C    8855 F8       mov byte ptr ss:[ebp-8],dl            ; 3 (serial 第2位)
0040546F    0FB645 FF     movzx eax,byte ptr ss:[ebp-1]         ; 7B({)
00405473    99            cdq
00405474    B9 0A000000   mov ecx,0A
00405479    F7F9          idiv ecx
0040547B    8855 FF       mov byte ptr ss:[ebp-1],dl            ; 7b=C*A+3;  3 (serial 第3位)
0040547E    0FB645 FA     movzx eax,byte ptr ss:[ebp-6]         ; 6B(k)
00405482    99            cdq
00405483    B9 0A000000   mov ecx,0A
00405488    F7F9          idiv ecx                              ; 6B=A*A+7
0040548A    8855 FA       mov byte ptr ss:[ebp-6],dl            ; 7 (serial 第4位)
0040548D    C745 F0 00000>mov dword ptr ss:[ebp-10],0
00405494    C745 E8 00000>mov dword ptr ss:[ebp-18],0
0040549B    EB 09         jmp short MP3Joine.004054A6
0040549D    8B55 E8       mov edx,dword ptr ss:[ebp-18]
004054A0    83C2 01       add edx,1
004054A3    8955 E8       mov dword ptr ss:[ebp-18],edx
004054A6    8B4D E0       mov ecx,dword ptr ss:[ebp-20]
004054A9    83C1 70       add ecx,70
004054AC    E8 EFF3FFFF   call MP3Joine.004048A0                ; NameLen
004054B1    3945 E8       cmp dword ptr ss:[ebp-18],eax
004054B4    7D 1E         jge short MP3Joine.004054D4
004054B6    8B45 E8       mov eax,dword ptr ss:[ebp-18]
004054B9    50            push eax
004054BA    8B4D E0       mov ecx,dword ptr ss:[ebp-20]
004054BD    83C1 70       add ecx,70
004054C0    E8 8BEAFFFF   call MP3Joine.00403F50                ; happy
004054C5    8845 E7       mov byte ptr ss:[ebp-19],al           ; 68(h),61(a),70(p),70,79
004054C8    0FB64D E7     movzx ecx,byte ptr ss:[ebp-19]        ; 68,61,70,70,79
004054CC    034D F0       add ecx,dword ptr ss:[ebp-10]         ; 68+0=68,61+68=C9,C9+70=139,139+70=1A9,1A9+79=222
004054CF    894D F0       mov dword ptr ss:[ebp-10],ecx         ; 68,C9,139,1A9,222
004054D2  ^ EB C9         jmp short MP3Joine.0040549D
004054D4    8B45 F0       mov eax,dword ptr ss:[ebp-10]         ; 222
004054D7    99            cdq
004054D8    B9 0A000000   mov ecx,0A
004054DD    F7F9          idiv ecx                              ; 222=36*A+6
004054DF    8855 F4       mov byte ptr ss:[ebp-C],dl            ; 6 (serial 第5位)
004054E2    6A 00         push 0
004054E4    8B4D E0       mov ecx,dword ptr ss:[ebp-20]
004054E7    83C1 74       add ecx,74
004054EA    E8 61EAFFFF   call MP3Joine.00403F50                ; 87654321
004054EF    8845 FC       mov byte ptr ss:[ebp-4],al            ; 38(8)
004054F2    6A 01         push 1
004054F4    8B4D E0       mov ecx,dword ptr ss:[ebp-20]
004054F7    83C1 74       add ecx,74
004054FA    E8 51EAFFFF   call MP3Joine.00403F50                ; 87654321
004054FF    8845 FD       mov byte ptr ss:[ebp-3],al            ; 37(7)
00405502    6A 02         push 2
00405504    8B4D E0       mov ecx,dword ptr ss:[ebp-20]
00405507    83C1 74       add ecx,74
0040550A    E8 41EAFFFF   call MP3Joine.00403F50
0040550F    8845 F6       mov byte ptr ss:[ebp-A],al            ; 36(6)
00405512    6A 03         push 3
00405514    8B4D E0       mov ecx,dword ptr ss:[ebp-20]
00405517    83C1 74       add ecx,74
0040551A    E8 31EAFFFF   call MP3Joine.00403F50
0040551F    8845 F5       mov byte ptr ss:[ebp-B],al            ; 35(5)
00405522    6A 04         push 4
00405524    8B4D E0       mov ecx,dword ptr ss:[ebp-20]
00405527    83C1 74       add ecx,74
0040552A    E8 21EAFFFF   call MP3Joine.00403F50
0040552F    8845 F9       mov byte ptr ss:[ebp-7],al            ; 34(4)
00405532    6A 05         push 5
00405534    8B4D E0       mov ecx,dword ptr ss:[ebp-20]
00405537    83C1 74       add ecx,74
0040553A    E8 11EAFFFF   call MP3Joine.00403F50
0040553F    8845 F7       mov byte ptr ss:[ebp-9],al            ; 33(3)
00405542    6A 06         push 6
00405544    8B4D E0       mov ecx,dword ptr ss:[ebp-20]
00405547    83C1 74       add ecx,74
0040554A    E8 01EAFFFF   call MP3Joine.00403F50
0040554F    8845 FE       mov byte ptr ss:[ebp-2],al            ; 32(2)
00405552    6A 07         push 7
00405554    8B4D E0       mov ecx,dword ptr ss:[ebp-20]
00405557    83C1 74       add ecx,74
0040555A    E8 F1E9FFFF   call MP3Joine.00403F50
0040555F    8845 FB       mov byte ptr ss:[ebp-5],al            ; 31(1)
00405562    0FB655 EF     movzx edx,byte ptr ss:[ebp-11]        ; 09
00405566    0FB645 FC     movzx eax,byte ptr ss:[ebp-4]         ; 38(8)
0040556A    83E8 30       sub eax,30                            ; 38-30=8
0040556D    3BD0          cmp edx,eax                           ; 9=8?不等则错
0040556F    75 3C         jnz short MP3Joine.004055AD
00405571    0FB64D F8     movzx ecx,byte ptr ss:[ebp-8]
00405575    0FB655 FD     movzx edx,byte ptr ss:[ebp-3]
00405579    83EA 30       sub edx,30
0040557C    3BCA          cmp ecx,edx                           ;不等则错
0040557E    75 2D         jnz short MP3Joine.004055AD
00405580    0FB645 FF     movzx eax,byte ptr ss:[ebp-1]
00405584    0FB64D F6     movzx ecx,byte ptr ss:[ebp-A]
00405588    83E9 30       sub ecx,30
0040558B    3BC1          cmp eax,ecx                           ;不等则错
0040558D    75 1E         jnz short MP3Joine.004055AD
0040558F    0FB655 FA     movzx edx,byte ptr ss:[ebp-6]
00405593    0FB645 F5     movzx eax,byte ptr ss:[ebp-B]
00405597    83E8 30       sub eax,30
0040559A    3BD0          cmp edx,eax                           ;不等则错
0040559C    75 0F         jnz short MP3Joine.004055AD
0040559E    0FB64D F4     movzx ecx,byte ptr ss:[ebp-C]
004055A2    0FB655 F9     movzx edx,byte ptr ss:[ebp-7]
004055A6    83EA 30       sub edx,30
004055A9    3BCA          cmp ecx,edx                           ;若相等,则注册成功
004055AB    74 58         je short MP3Joine.00405605
004055AD    0FB645 FC     movzx eax,byte ptr ss:[ebp-4]
004055B1    83F8 35       cmp eax,35
004055B4    0F85 A7000000 jnz MP3Joine.00405661                 ;以下这些35,35,38等等,你可以尝试,看看它是干什么的。
004055BA    0FB64D FD     movzx ecx,byte ptr ss:[ebp-3]
004055BE    83F9 35       cmp ecx,35
004055C1    0F85 9A000000 jnz MP3Joine.00405661
004055C7    0FB655 F6     movzx edx,byte ptr ss:[ebp-A]
004055CB    83FA 38       cmp edx,38
004055CE    0F85 8D000000 jnz MP3Joine.00405661
004055D4    0FB645 F5     movzx eax,byte ptr ss:[ebp-B]
004055D8    83F8 35       cmp eax,35
004055DB    0F85 80000000 jnz MP3Joine.00405661
004055E1    0FB64D F9     movzx ecx,byte ptr ss:[ebp-7]
004055E5    83F9 36       cmp ecx,36
004055E8    75 77         jnz short MP3Joine.00405661
004055EA    0FB655 F7     movzx edx,byte ptr ss:[ebp-9]
004055EE    83FA 37       cmp edx,37
004055F1    75 6E         jnz short MP3Joine.00405661
004055F3    0FB645 FE     movzx eax,byte ptr ss:[ebp-2]
004055F7    83F8 36       cmp eax,36
004055FA    75 65         jnz short MP3Joine.00405661
004055FC    0FB64D FB     movzx ecx,byte ptr ss:[ebp-5]
00405600    83F9 35       cmp ecx,35
00405603    75 5C         jnz short MP3Joine.00405661
00405605    6A 00         push 0
00405607    6A 00         push 0
00405609    68 A4C14200   push MP3Joine.0042C1A4                ; ASCII "Registration has succeeded!"
0040560E    E8 B2FB0100   call MP3Joine.004251C5
======================================================================
【分析总结】

//注册算法-Delphi版
procedure TfrmMain.edtNameChange(Sender: TObject);
type
intchr_=array [1..5] of Integer;
var
  strName,strCode,strRandom:string;
  intNameLen,i,intSum,intchr_1,intchr_2,intchr_3,intchr_4,intchr_5:Integer;
  intTemp,intTemp1,intTemp2,intTemp3:Integer;
  chr_1,chr_2,chr_3,chr_4,chr_5,chr_6,chr_7,chr_8:string;
  intchr:intchr_;
begin
  strName:=edtName.Text ;
  intNameLen:=length(strName);

  if intNameLen<=4 then
    edtCode.Text :='';
  intSum:=0;
  if intNameLen>4 then
  begin
    for i:=1 to intNameLen do
    begin
      intTemp:=Ord(strName[i]);
      intSum:=intSum+intTemp;
    end;

    for i:=1 to 5 do
      intchr [i]:=Ord(strName[i]);

    chr_1:=Chr(((intchr[1] or $4D)mod 10)+$30);  //注册码第1位
    chr_2:=Chr(((intchr[2] or $50)mod 10)+$30);  //注册码第2位  
    chr_3:=Chr(((intchr[1] or $33)mod 10)+$30);  //注册码第3位
    chr_4:=Chr(((intchr[2] or $4A)mod 10)+$30);  //注册码第4位
    chr_5:=Chr((intSum mod 10)+$30);             //注册码第5位

    strCode:='';

    //最后3位无所谓,所以采用随机数
    Randomize;
    intTemp1:=Random(9)+1;

    Randomize;
    intTemp2:=Random(9)+1;

    Randomize;
    intTemp3:=Random(9)+1;
    strCode:=chr_1+chr_2+chr_3+chr_4+chr_5+IntToStr(intTemp1)+IntToStr(intTemp2)+IntToStr(intTemp3);
    edtCode.Text :=strCode;
  end;
end;
======================================================================
【版权信息】
  CopyLeft(仅限于本破文)
                                                   2006-03-21