飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 7281|回复: 16

Audio To Video Mixer 3.0.62 算法分析[初学者进]

[复制链接]
  • TA的每日心情
    开心
    2024-12-1 11:04
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    发表于 2006-3-28 16:15:23 | 显示全部楼层 |阅读模式
    【破文标题】Audio To Video Mixer 3.0.62 算法分析
    【破文作者】飘云[PYG]
    【作者邮箱】[email protected]
    【作者主页】www.chinapyg.com
    破解工具】OD,PEID
    【破解平台】WinXP
    【软件名称】Audio To Video Mixer 3.0.62
    【软件大小】697KB
    【原版下载】http://hn.onlinedown.net/soft/39614.htm
    【保护方式】序列号
    【软件简介】Audio to Video Mixer是一款视频编辑工具,用于将音频文件混合入视频中。它能够将你的家庭视频的原音消除,加入背景音乐,解说或更多的音轨。
    【分析过程】PEID探测Microsoft Visual C++ 7.0 编写,OD字符插件来到如下位置:

    00416A41         8B46 70            mov eax,dword ptr ds:[esi+70]     ; 用户名地址
    00416A44         8B48 F4            mov ecx,dword ptr ds:[eax-C]      ; 用户名位数
    00416A47         85C9               test ecx,ecx
    00416A49         7D 0A              jge short a2vmixer.00416A55
    00416A4B         68 57000780        push 80070057
    00416A50         E8 ABA8FEFF        call a2vmixer.00401300
    00416A55         8A10               mov dl,byte ptr ds:[eax]          ; 用户名第一位ascii送dl
    00416A57         8B46 70            mov eax,dword ptr ds:[esi+70]
    00416A5A         3978 F4            cmp dword ptr ds:[eax-C],edi
    00416A5D         7D 0A              jge short a2vmixer.00416A69
    00416A5F         68 57000780        push 80070057
    00416A64         E8 97A8FEFF        call a2vmixer.00401300
    00416A69         8A40 01            mov al,byte ptr ds:[eax+1]        ; 取用户名第2位
    00416A6C         884424 0E          mov byte ptr ss:[esp+E],al        ; 用户名第2位ascii放到[esp+E]
    00416A70         8B46 70            mov eax,dword ptr ds:[esi+70]     ; 用户名地址
    00416A73         8B48 F4            mov ecx,dword ptr ds:[eax-C]      ; 用户名位数
    00416A76         85C9               test ecx,ecx
    00416A78         7D 0A              jge short a2vmixer.00416A84
    00416A7A         68 57000780        push 80070057
    00416A7F         E8 7CA8FEFF        call a2vmixer.00401300
    00416A84         8B4E 70            mov ecx,dword ptr ds:[esi+70]     ; 用户名地址
    00416A87         53                 push ebx
    00416A88         8A18               mov bl,byte ptr ds:[eax]          ; 用户名第1位ascii送bl
    00416A8A         3979 F4            cmp dword ptr ds:[ecx-C],edi
    00416A8D         7D 0A              jge short a2vmixer.00416A99
    00416A8F         68 57000780        push 80070057
    00416A94         E8 67A8FEFF        call a2vmixer.00401300
    00416A99         0FB6C2             movzx eax,dl                      ; dl中保存的是用户名第一位的ascii值(见00416A55代码处)
    00416A9C         83C8 41            or eax,41                         ; 第1位ascii or 0x41
    00416A9F         99                 cdq                               ; 扩展
    00416AA0         BF 0A000000        mov edi,0A                        ; edi=0xA
    00416AA5         F7FF               idiv edi                          ; eax%edi(即第1位ascii or 0x41的值%0xA) 余数放dl
    00416AA7         0FB64424 12        movzx eax,byte ptr ss:[esp+12]    ; 第二位用户名的ascii传递到eax
    00416AAC         83C8 32            or eax,32                         ; 第2位ascii or 0x32
    00416AAF         885424 16          mov byte ptr ss:[esp+16],dl       ; ★重点值1★dl是"第1位ascii or 0x41的值%0xA"得到的余数,送到[esp+16]
    00416AB3         99                 cdq                               ; 扩展
    00416AB4         F7FF               idiv edi                          ; eax%edi(即第2位ascii or 0x32的值%0xA) 余数放dl
    00416AB6         0FB6C3             movzx eax,bl                      ; bl也是用户名第一位ascii(见00416A88处代码)送eax
    00416AB9         83C8 56            or eax,56                         ; 用户名第一位ascii or 0x56
    00416ABC         885424 12          mov byte ptr ss:[esp+12],dl       ; ★重点值2★dl是"第2位ascii or 0x32的值%0xA"得到的余数,送到[esp+12]
    00416AC0         99                 cdq                               ; 扩展
    00416AC1         F7FF               idiv edi                          ; eax%edi(即第1位ascii or 0x56的值%0xA) 余数放dl
    00416AC3         0FB641 01          movzx eax,byte ptr ds:[ecx+1]     ; 传送用户名第二位ascii到eax
    00416AC7         83C8 4D            or eax,4D                         ; 第二位ascii or 0x4D
    00416ACA         8BCF               mov ecx,edi                       ; ecx = edi = 0xA
    00416ACC         885424 17          mov byte ptr ss:[esp+17],dl       ; ★重点值3★dl是"第1位ascii or 0x4D的值%0xA"得到的余数,送到[esp+17]
    00416AD0         99                 cdq                               ; 扩展
    00416AD1         F7F9               idiv ecx                          ; eax%ecx(即第2位ascii or 0x4D的值%0xA) 余数放dl
    00416AD3         33C0               xor eax,eax                       ; eax清0
    00416AD5         33C9               xor ecx,ecx                       ; ecx清0
    00416AD7         85ED               test ebp,ebp
    00416AD9         885424 18          mov byte ptr ss:[esp+18],dl       ; ★重点值4★dl是"第2位ascii or 0x4D的值%0xA"得到的余数,送到[esp+18]
    00416ADD         7E 20              jle short a2vmixer.00416AFF
    00416ADF         90                 nop
    00416AE0         85C9               test ecx,ecx
    00416AE2         0F8C D2000000      jl a2vmixer.00416BBA
    00416AE8         8B7E 70            mov edi,dword ptr ds:[esi+70]
    00416AEB         3B4F F4            cmp ecx,dword ptr ds:[edi-C]     
    00416AEE         0F8F C6000000      jg a2vmixer.00416BBA
    00416AF4         0FB6140F           movzx edx,byte ptr ds:[edi+ecx]   ; 逐位ascii送edx
    00416AF8         03C2               add eax,edx                       ; eax = eax+edx
    00416AFA         41                 inc ecx
    00416AFB         3BCD               cmp ecx,ebp
    00416AFD       ^ 7C E1              jl short a2vmixer.00416AE0        ; 上面累加用户名ascii值 结果保存到eax
    00416AFF         8B4E 74            mov ecx,dword ptr ds:[esi+74]     ; 假码
    00416B02         8B51 F4            mov edx,dword ptr ds:[ecx-C]      ; 假码位数
    00416B05         85D2               test edx,edx
    00416B07         7D 0A              jge short a2vmixer.00416B13
    00416B09         68 57000780        push 80070057
    00416B0E         E8 EDA7FEFF        call a2vmixer.00401300
    00416B13         8A11               mov dl,byte ptr ds:[ecx]          ; 假码第一位放到 dl ★注意了★
    00416B15         8B4E 74            mov ecx,dword ptr ds:[esi+74]
    00416B18         8379 F4 01         cmp dword ptr ds:[ecx-C],1
    00416B1C         885424 19          mov byte ptr ss:[esp+19],dl       ; 假码第一位放到 [esp+19]
    00416B20         7D 0A              jge short a2vmixer.00416B2C
    00416B22         68 57000780        push 80070057
    00416B27         E8 D4A7FEFF        call a2vmixer.00401300
    00416B2C         8A49 01            mov cl,byte ptr ds:[ecx+1]
    00416B2F         8B7E 74            mov edi,dword ptr ds:[esi+74]
    00416B32         884C24 13          mov byte ptr ss:[esp+13],cl       ; 假码第二位放到 [esp+13]
    00416B36         837F F4 02         cmp dword ptr ds:[edi-C],2
    00416B3A         7D 0A              jge short a2vmixer.00416B46
    00416B3C         68 57000780        push 80070057
    00416B41         E8 BAA7FEFF        call a2vmixer.00401300
    00416B46         8A4F 02            mov cl,byte ptr ds:[edi+2]
    00416B49         8B7E 74            mov edi,dword ptr ds:[esi+74]
    00416B4C         884C24 14          mov byte ptr ss:[esp+14],cl       ; 假码第三位放到 [esp+14]
    00416B50         837F F4 03         cmp dword ptr ds:[edi-C],3
    00416B54         7D 0A              jge short a2vmixer.00416B60
    00416B56         68 57000780        push 80070057
    00416B5B         E8 A0A7FEFF        call a2vmixer.00401300
    00416B60         8A4F 03            mov cl,byte ptr ds:[edi+3]
    00416B63         8B7E 74            mov edi,dword ptr ds:[esi+74]
    00416B66         884C24 15          mov byte ptr ss:[esp+15],cl       ; 假码第四位放到 [esp+15]
    00416B6A         837F F4 04         cmp dword ptr ds:[edi-C],4
    00416B6E         7D 0A              jge short a2vmixer.00416B7A
    00416B70         68 57000780        push 80070057
    00416B75         E8 86A7FEFF        call a2vmixer.00401300
    00416B7A         8A4F 04            mov cl,byte ptr ds:[edi+4]        ; 假码第五位放到cl
    00416B7D         8B7E 74            mov edi,dword ptr ds:[esi+74]
    00416B80         837F F4 05         cmp dword ptr ds:[edi-C],5
    00416B84         7D 0A              jge short a2vmixer.00416B90
    00416B86         68 57000780        push 80070057
    00416B8B         E8 70A7FEFF        call a2vmixer.00401300
    00416B90         8A5F 05            mov bl,byte ptr ds:[edi+5]
    00416B93         8B7E 74            mov edi,dword ptr ds:[esi+74]
    00416B96         885C24 1A          mov byte ptr ss:[esp+1A],bl       ; 假码第六位放到 [esp+1A]
    00416B9A         837F F4 06         cmp dword ptr ds:[edi-C],6
    00416B9E         7D 0A              jge short a2vmixer.00416BAA
    00416BA0         68 57000780        push 80070057
    00416BA5         E8 56A7FEFF        call a2vmixer.00401300
    00416BAA         8A5F 06            mov bl,byte ptr ds:[edi+6]
    00416BAD         8B7E 74            mov edi,dword ptr ds:[esi+74]
    00416BB0         885C24 1B          mov byte ptr ss:[esp+1B],bl       ; 假码第七位放到 [esp+1B]
    00416BB4         837F F4 07         cmp dword ptr ds:[edi-C],7
    00416BB8         7D 0A              jge short a2vmixer.00416BC4
    00416BBA         68 57000780        push 80070057
    00416BBF         E8 3CA7FEFF        call a2vmixer.00401300
    00416BC4         8A5F 07            mov bl,byte ptr ds:[edi+7]        ; 假码第八位放到bl ★注意了★
    00416BC7         0FB67C24 16        movzx edi,byte ptr ss:[esp+16]    ; 这里是上面分析的 ★重点值1★
    00416BCC         0FB6D2             movzx edx,dl                      ; dl是假码第1位
    00416BCF         83EA 30            sub edx,30
    00416BD2         3BFA               cmp edi,edx                       ; 比较第1位注册码是否和 重点值1 相等
    00416BD4         75 48              jnz short a2vmixer.00416C1E       ; 不等则over
    00416BD6         0FB65424 13        movzx edx,byte ptr ss:[esp+13]
    00416BDB         0FB67C24 12        movzx edi,byte ptr ss:[esp+12]
    00416BE0         83EA 30            sub edx,30
    00416BE3         3BFA               cmp edi,edx                       ; 比较第2位注册码是否和 重点值2 相等
    00416BE5         75 37              jnz short a2vmixer.00416C1E
    00416BE7         0FB65424 14        movzx edx,byte ptr ss:[esp+14]
    00416BEC         0FB67C24 17        movzx edi,byte ptr ss:[esp+17]
    00416BF1         83EA 30            sub edx,30
    00416BF4         3BFA               cmp edi,edx                       ; 比较第3位注册码是否和 重点值3 相等
    00416BF6         75 26              jnz short a2vmixer.00416C1E
    00416BF8         0FB65424 15        movzx edx,byte ptr ss:[esp+15]
    00416BFD         0FB67C24 18        movzx edi,byte ptr ss:[esp+18]
    00416C02         83EA 30            sub edx,30
    00416C05         3BFA               cmp edi,edx                       ; 比较第4位注册码是否和 重点值4 相等
    00416C07         75 15              jnz short a2vmixer.00416C1E
    00416C09         99                 cdq                               ; 扩展
    00416C0A         BF 0A000000        mov edi,0A                        ; edi=0xA
    00416C0F         F7FF               idiv edi                          ; eax%edi (eax是用户名累加和)
    00416C11         0FB6C2             movzx eax,dl                      ; ★重点值5★(用户名各位ascii累加%0xA)余数传送到
    00416C14         0FB6D1             movzx edx,cl                      ; cl是假码第5位
    00416C17         83EA 30            sub edx,30
    00416C1A         3BC2               cmp eax,edx                       ; 比较第5位注册码是否和 重点值5 想到
    00416C1C         74 3A              je short a2vmixer.00416C58        ; 都相等则注册成功!   否则继续比较是否为下面的通用注册码~
    00416C1E         807C24 19 31       cmp byte ptr ss:[esp+19],31       ; 1
    00416C23         0F85 85000000      jnz a2vmixer.00416CAE
    00416C29         807C24 13 32       cmp byte ptr ss:[esp+13],32       ; 2
    00416C2E         75 7E              jnz short a2vmixer.00416CAE
    00416C30         8A5424 14          mov dl,byte ptr ss:[esp+14]
    00416C34         B0 38              mov al,38                         ; 8
    00416C36         3AD0               cmp dl,al
    00416C38         75 74              jnz short a2vmixer.00416CAE
    00416C3A         807C24 15 30       cmp byte ptr ss:[esp+15],30       ; 0
    00416C3F         75 6D              jnz short a2vmixer.00416CAE
    00416C41         80F9 37            cmp cl,37                         ; 7
    00416C44         75 68              jnz short a2vmixer.00416CAE
    00416C46         384424 1A          cmp byte ptr ss:[esp+1A],al       ; 8
    00416C4A         75 62              jnz short a2vmixer.00416CAE
    00416C4C         807C24 1B 33       cmp byte ptr ss:[esp+1B],33       ; 3
    00416C51         75 5B              jnz short a2vmixer.00416CAE
    00416C53         80FB 35            cmp bl,35                         ; 5  //bl是第8位  见 00416BC4 处
    00416C56         75 56              jnz short a2vmixer.00416CAE
    00416C58         6A 00              push 0
    00416C5A         6A 00              push 0
    00416C5C         68 98874400        push a2vmixer.00448798            ; registration has succeeded!
    00416C61         E8 5A4F0200        call a2vmixer.0043BBC0
    00416C66         8B7E 70            mov edi,dword ptr ds:[esi+70]
    00416C69         E8 3B8E0200        call a2vmixer.0043FAA9
    00416C6E         8B40 04            mov eax,dword ptr ds:[eax+4]
    00416C71         57                 push edi
    00416C72         68 547C4400        push a2vmixer.00447C54            ; username
    00416C77         68 4C7C4400        push a2vmixer.00447C4C            ; option
    00416C7C         8BC8               mov ecx,eax
    00416C7E         E8 43500200        call a2vmixer.0043BCC6
    00416C83         8B7E 74            mov edi,dword ptr ds:[esi+74]
    00416C86         E8 1E8E0200        call a2vmixer.0043FAA9
    00416C8B         8B40 04            mov eax,dword ptr ds:[eax+4]
    00416C8E         57                 push edi
    00416C8F         68 387C4400        push a2vmixer.00447C38            ; registration_code
    00416C94         68 4C7C4400        push a2vmixer.00447C4C            ; option
    00416C99         8BC8               mov ecx,eax
    00416C9B         E8 26500200        call a2vmixer.0043BCC6
    00416CA0         5B                 pop ebx
    00416CA1         5F                 pop edi
    00416CA2         8BCE               mov ecx,esi
    00416CA4         5E                 pop esi
    00416CA5         5D                 pop ebp
    00416CA6         83C4 0C            add esp,0C
    00416CA9         E9 A4F10100        jmp a2vmixer.00435E52
    00416CAE         6A 00              push 0
    00416CB0         6A 00              push 0
    00416CB2         68 80874400        push a2vmixer.00448780            ; registration failed!
    00416CB7         E8 044F0200        call a2vmixer.0043BBC0
    00416CBC         5B                 pop ebx
    00416CBD         5F                 pop edi
    00416CBE         5E                 pop esi
    00416CBF         5D                 pop ebp
    00416CC0         83C4 0C            add esp,0C
    00416CC3         C3                 retn


    【算法总结】
    第1位注册码:用户名第1位ascii or 0x41的值%0xA 得到的余数
    第2位注册码:用户名第2位ascii or 0x32的值%0xA 得到的余数
    第3位注册码:用户名第1位ascii or 0x56的值%0xA 得到的余数
    第4位注册码:用户名第2位ascii or 0x4D的值%0xA 得到的余数
    第5位注册码:用户名各位ascii累加之和 %0xA 得到的余数余数

    其他位随意填写数字~~

    当然分析得知还有通用注册码:12807835

    【算法注册机(MFC)】
    1. void CPYG_KeyGenDlg::OnOK()
    2. {

    3.         UpdateData (true) ;
    4.   int i,len,Sn1=0,Sn2=0,Sn3=0,Sn4=0,Sn5=0;
    5.   char Name[80];
    6.   byte n;  //支持中文
    7.   len=m_User.GetLength ();
    8.   if (len>=2)
    9.   {
    10.             strcpy(Name,m_User);

    11.                
    12.                 n=Name[0];
    13.                 Sn1=n|0x41; //计算第1位
    14.                 Sn1%=0xA;

    15.                 n=Name[1];
    16.                 Sn2=n|0x32; //计算第2位
    17.                 Sn2%=0xA;

    18.                 n=Name[0];
    19.                 Sn3=n|0x56; //计算第3位
    20.                 Sn3%=0xA;

    21.                 n=Name[1];
    22.                 Sn4=n|0x4D; //计算第4位
    23.                 Sn4%=0xA;

    24.                 for (i=0;i<len;i++)  //计算第5位
    25.                         {
    26.                                 n = Name[i];
    27.                                 Sn5+=n;
    28.                         }
    29.                                 Sn5%=0xA;

    30.                 m_Code.Format("%d%d%d%d%d520",Sn1,Sn2,Sn3,Sn4,Sn5); //输出注册码
    31.   }
    32.         else
    33.                 m_Code = "Please input correct User Name!";
    34. UpdateData (false);
    35. }
    复制代码

    ------------------------------------------------------------------------
    【版权声明】本文纯属技术交流, 转载请注明作者信息并保持文章的完整, 谢谢!
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2019-1-18 17:27
  • 签到天数: 30 天

    [LV.5]常住居民I

    发表于 2006-3-28 17:33:12 | 显示全部楼层
    学习,还有好多同类的,正好找到教材
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2024-12-26 09:55
  • 签到天数: 88 天

    [LV.6]常住居民II

    发表于 2006-3-28 19:42:12 | 显示全部楼层
    好文章,学习了。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-3-28 21:41:29 | 显示全部楼层
    详细的说,学习!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-1-6 14:28
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    发表于 2006-3-28 22:54:25 | 显示全部楼层
    学习下``````
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-3-29 19:52:40 | 显示全部楼层
    学习!~~~
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-3-29 21:42:30 | 显示全部楼层
    受益非浅~~~
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-3-29 21:53:51 | 显示全部楼层
    学习学习再学习,,,看 来算法是要花时间 研究

    还有老大写注册机用那一种语言好一些
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-12-1 11:04
  • 签到天数: 12 天

    [LV.3]偶尔看看II

     楼主| 发表于 2006-3-30 21:41:02 | 显示全部楼层
    原帖由 阿才 于 2006-3-29 13:53 发表
    学习学习再学习,,,看 来算法是要花时间 研究

    还有老大写注册机用那一种语言好一些



    看个人喜好~~

    不过,我偏向于:软件采用什么语言编写,我就用什么写注册机~~ 嘿嘿,对数据类型支持得好些~~
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2016-2-2 20:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2006-4-2 22:26:58 | 显示全部楼层
    强  !~~~`    这么多看的眼睛花了
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表