飘云 发表于 2006-3-28 16:15:23

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

【破文标题】Audio To Video Mixer 3.0.62 算法分析
【破文作者】飘云
【作者邮箱】[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:   ; 用户名地址
00416A44         8B48 F4            mov ecx,dword ptr ds:      ; 用户名位数
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:          ; 用户名第一位ascii送dl
00416A57         8B46 70            mov eax,dword ptr ds:
00416A5A         3978 F4            cmp dword ptr ds:,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:      ; 取用户名第2位
00416A6C         884424 0E          mov byte ptr ss:,al      ; 用户名第2位ascii放到
00416A70         8B46 70            mov eax,dword ptr ds:   ; 用户名地址
00416A73         8B48 F4            mov ecx,dword ptr ds:      ; 用户名位数
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:   ; 用户名地址
00416A87         53               push ebx
00416A88         8A18               mov bl,byte ptr ds:          ; 用户名第1位ascii送bl
00416A8A         3979 F4            cmp dword ptr ds:,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:    ; 第二位用户名的ascii传递到eax
00416AAC         83C8 32            or eax,32                         ; 第2位ascii or 0x32
00416AAF         885424 16          mov byte ptr ss:,dl       ; ★重点值1★dl是"第1位ascii or 0x41的值%0xA"得到的余数,送到
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:,dl       ; ★重点值2★dl是"第2位ascii or 0x32的值%0xA"得到的余数,送到
00416AC0         99               cdq                               ; 扩展
00416AC1         F7FF               idiv edi                        ; eax%edi(即第1位ascii or 0x56的值%0xA) 余数放dl
00416AC3         0FB641 01          movzx eax,byte ptr ds:   ; 传送用户名第二位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:,dl       ; ★重点值3★dl是"第1位ascii or 0x4D的值%0xA"得到的余数,送到
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:,dl       ; ★重点值4★dl是"第2位ascii or 0x4D的值%0xA"得到的余数,送到
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:
00416AEB         3B4F F4            cmp ecx,dword ptr ds:   
00416AEE         0F8F C6000000      jg a2vmixer.00416BBA
00416AF4         0FB6140F         movzx edx,byte ptr ds:   ; 逐位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:   ; 假码
00416B02         8B51 F4            mov edx,dword ptr ds:      ; 假码位数
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:          ; 假码第一位放到 dl ★注意了★
00416B15         8B4E 74            mov ecx,dword ptr ds:
00416B18         8379 F4 01         cmp dword ptr ds:,1
00416B1C         885424 19          mov byte ptr ss:,dl       ; 假码第一位放到
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:
00416B2F         8B7E 74            mov edi,dword ptr ds:
00416B32         884C24 13          mov byte ptr ss:,cl       ; 假码第二位放到
00416B36         837F F4 02         cmp dword ptr ds:,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:
00416B49         8B7E 74            mov edi,dword ptr ds:
00416B4C         884C24 14          mov byte ptr ss:,cl       ; 假码第三位放到
00416B50         837F F4 03         cmp dword ptr ds:,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:
00416B63         8B7E 74            mov edi,dword ptr ds:
00416B66         884C24 15          mov byte ptr ss:,cl       ; 假码第四位放到
00416B6A         837F F4 04         cmp dword ptr ds:,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:      ; 假码第五位放到cl
00416B7D         8B7E 74            mov edi,dword ptr ds:
00416B80         837F F4 05         cmp dword ptr ds:,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:
00416B93         8B7E 74            mov edi,dword ptr ds:
00416B96         885C24 1A          mov byte ptr ss:,bl       ; 假码第六位放到
00416B9A         837F F4 06         cmp dword ptr ds:,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:
00416BAD         8B7E 74            mov edi,dword ptr ds:
00416BB0         885C24 1B          mov byte ptr ss:,bl       ; 假码第七位放到
00416BB4         837F F4 07         cmp dword ptr ds:,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:      ; 假码第八位放到bl ★注意了★
00416BC7         0FB67C24 16      movzx edi,byte ptr ss:    ; 这里是上面分析的 ★重点值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:
00416BDB         0FB67C24 12      movzx edi,byte ptr ss:
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:
00416BEC         0FB67C24 17      movzx edi,byte ptr ss:
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:
00416BFD         0FB67C24 18      movzx edi,byte ptr ss:
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:,31       ; 1
00416C23         0F85 85000000      jnz a2vmixer.00416CAE
00416C29         807C24 13 32       cmp byte ptr ss:,32       ; 2
00416C2E         75 7E            jnz short a2vmixer.00416CAE
00416C30         8A5424 14          mov dl,byte ptr ss:
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:,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:,al       ; 8
00416C4A         75 62            jnz short a2vmixer.00416CAE
00416C4C         807C24 1B 33       cmp byte ptr ss:,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:
00416C69         E8 3B8E0200      call a2vmixer.0043FAA9
00416C6E         8B40 04            mov eax,dword ptr ds:
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:
00416C86         E8 1E8E0200      call a2vmixer.0043FAA9
00416C8B         8B40 04            mov eax,dword ptr ds:
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)】
void CPYG_KeyGenDlg::OnOK()
{

        UpdateData (true) ;
int i,len,Sn1=0,Sn2=0,Sn3=0,Sn4=0,Sn5=0;
char Name;
byte n;//支持中文
len=m_User.GetLength ();
if (len>=2)
{
          strcpy(Name,m_User);

               
                n=Name;
                Sn1=n|0x41; //计算第1位
                Sn1%=0xA;

                n=Name;
                Sn2=n|0x32; //计算第2位
                Sn2%=0xA;

                n=Name;
                Sn3=n|0x56; //计算第3位
                Sn3%=0xA;

                n=Name;
                Sn4=n|0x4D; //计算第4位
                Sn4%=0xA;

                for (i=0;i<len;i++)//计算第5位
                        {
                                n = Name;
                                Sn5+=n;
                        }
                                Sn5%=0xA;

                m_Code.Format("%d%d%d%d%d520",Sn1,Sn2,Sn3,Sn4,Sn5); //输出注册码
}
        else
                m_Code = "Please input correct User Name!";
UpdateData (false);
}
------------------------------------------------------------------------
【版权声明】本文纯属技术交流, 转载请注明作者信息并保持文章的完整, 谢谢!

lzq1973 发表于 2006-3-28 17:33:12

学习,还有好多同类的,正好找到教材

hbqjxhw 发表于 2006-3-28 19:42:12

好文章,学习了。

西岭秋风 发表于 2006-3-28 21:41:29

详细的说,学习!

hsj840119 发表于 2006-3-28 22:54:25

学习下``````

vivian 发表于 2006-3-29 19:52:40

学习!~~~

lhl8730 发表于 2006-3-29 21:42:30

受益非浅~~~

阿才 发表于 2006-3-29 21:53:51

学习学习再学习,,,看 来算法是要花时间 研究

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

飘云 发表于 2006-3-30 21:41:02

原帖由 阿才 于 2006-3-29 13:53 发表
学习学习再学习,,,看 来算法是要花时间 研究

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


看个人喜好~~

不过,我偏向于:软件采用什么语言编写,我就用什么写注册机~~ 嘿嘿,对数据类型支持得好些~~

eszwaq123 发表于 2006-4-2 22:26:58

强!~~~`    这么多看的眼睛花了
页: [1] 2
查看完整版本: Audio To Video Mixer 3.0.62 算法分析[初学者进]