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);
}
------------------------------------------------------------------------
【版权声明】本文纯属技术交流, 转载请注明作者信息并保持文章的完整, 谢谢! 学习,还有好多同类的,正好找到教材 好文章,学习了。 详细的说,学习! 学习下`````` 学习!~~~ 受益非浅~~~ 学习学习再学习,,,看 来算法是要花时间 研究
还有老大写注册机用那一种语言好一些 原帖由 阿才 于 2006-3-29 13:53 发表
学习学习再学习,,,看 来算法是要花时间 研究
还有老大写注册机用那一种语言好一些
看个人喜好~~
不过,我偏向于:软件采用什么语言编写,我就用什么写注册机~~ 嘿嘿,对数据类型支持得好些~~ 强!~~~` 这么多看的眼睛花了
页:
[1]
2