【破解作者】 zmw1224[CZG][DFCG]
【作者邮箱】 zmw1224@yahoo.com.cn
【使用工具】 OD
【破解平台】 win2003
【软件名称】 Audio To Video Mixer 3.0
【下载地址】 http://www.onlinedown.net/soft/39614.htm
【软件简介】 Audio to Video Mixer是一款视频编辑工具,用于将音频文件混合入视频中。它能够将你的家庭视频的原音消除,加入背景音乐,解说或更多的音轨。
【软件大小】 697KB
【加壳方式】 无
【破解声明】 本笔记只用于学习交流, 初学Crack,只是感兴趣技术,没有其他目的, 如有不妥之处, 希望作者谅解.
--------------------------------------------------------------------------------
【破解内容】 查壳无,OD载入,查找字符串,快速的上下翻了下,看见了重要信息--------> "Please input correct User Name!"
双击来到下面:
输入相关信息:
用户名:zmw1224
注册码:123567890
确定后马上被断:
004169F3 . 55 push ebp ;在这下断
004169F4 . 56 push esi
004169F5 . 57 push edi
004169F6 . BF 01000000 mov edi,1
004169FB . 57 push edi
004169FC . 8BF1 mov esi,ecx
004169FE . E8 BDB40100 call a2vmixer.00431EC0
00416A03 . 8B46 70 mov eax,dword ptr ds :[esi+70]
00416A06 . 8B68 F4 mov ebp,dword ptr ds :[eax-C]
00416A09 . 83FD 02 cmp ebp,2 ; 用户名必须大于2位
00416A0C . 7D 15 jge short a2vmixer.00416A23
00416A0E . 6A 00 push 0
00416A10 . 6A 00 push 0
00416A12 . 68 DC874400 push a2vmixer.004487DC ; ASCII "Please input correct User Name!"
00416A17 . E8 A4510200 call a2vmixer.0043BBC0
00416A1C . 5F pop edi
00416A1D . 5E pop esi
00416A1E . 5D pop ebp
00416A1F . 83C4 0C add esp,0C
00416A22 . C3 retn
00416A23 > 8B4E 74 mov ecx,dword ptr ds :[esi+74]
00416A26 . 8379 F4 08 cmp dword ptr ds :[ecx-C],8 ; 注册码必须大于8位(其实注册判断只是前5位起做用,后面的N位无关紧要随意输,这是分析完注册算法后得出的结果。)
00416A2A . 7D 15 jge short a2vmixer.00416A41
00416A2C . 6A 00 push 0
00416A2E . 6A 00 push 0
00416A30 . 68 B4874400 push a2vmixer.004487B4 ; ASCII "Please input correct Registration Code!"
00416A35 . E8 86510200 call a2vmixer.0043BBC0
00416A3A . 5F pop edi
00416A3B . 5E pop esi
00416A3C . 5D pop ebp
00416A3D . 83C4 0C add esp,0C
00416A40 . C3 retn
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]
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]
00416A6C . 884424 0E mov byte ptr ss :[esp+E],al
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]
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 ; 第一个字符(z)送到EAX里。
00416A9C . 83C8 41 or eax,41 ; EAX=EAX or 0x41
00416A9F . 99 cdq
00416AA0 . BF 0A000000 mov edi,0A
00416AA5 . F7FF idiv edi ; EAX=EAX/EDI(0A),余数在EDX里,EDX=3
00416AA7 . 0FB64424 12 movzx eax,byte ptr ss :[esp+12] ; 第二个字符(m)送到EAX里
00416AAC . 83C8 32 or eax,32 ; EAX=EAX or 0x32
00416AAF . 885424 16 mov byte ptr ss :[esp+16],dl ; 把第一次算的余数先保存起来。
00416AB3 . 99 cdq
00416AB4 . F7FF idiv edi ; (EDI里的值一直没变,一直都是除以A)EAX=EAX/EDI(0A),余数在EDX里,EDX=7
00416AB6 . 0FB6C3 movzx eax,bl ; 再次把第一个字符(z)送到EAX里,EAX=7A
00416AB9 . 83C8 56 or eax,56 ; EAX=EAX or 0x56
00416ABC . 885424 12 mov byte ptr ss :[esp+12],dl ; 把第二次算的余数先保存起来。
00416AC0 . 99 cdq
00416AC1 . F7FF idiv edi ; EAX=EAX/EDI(0A),余数在EDX里,EDX=6
00416AC3 . 0FB641 01 movzx eax,byte ptr ds :[ecx+1] ; 再次把第二个字符(m)送到EAX里,EAX=6D
00416AC7 . 83C8 4D or eax,4D ; EAX=EAX or 0x4D
00416ACA . 8BCF mov ecx,edi
00416ACC . 885424 17 mov byte ptr ss :[esp+17],dl ; 把第三次算的余数先保存起来。
00416AD0 . 99 cdq
00416AD1 . F7F9 idiv ecx ; EAX=EAX/ECX(0A),余数在EDX里,EDX=9
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 ; 把第四次算的余数先保存起来。(四次的余数,分别为3、7、6、9)
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值
00416AF8 . 03C2 add eax,edx
00416AFA . 41 inc ecx ; 即zmw1224---->EAX=0x227
00416AFB . 3BCD cmp ecx,ebp
00416AFD .^ 7C E1 jl short a2vmixer.00416AE0
00416AFF > 8B4E 74 mov ecx,dword ptr ds :[esi+74] ; 假注册码送到ECX里,ECX=123456789
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]
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
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
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
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
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]
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
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
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]
00416BC7 . 0FB67C24 16 movzx edi,byte ptr ss :[esp+16]
00416BCC . 0FB6D2 movzx edx,dl
00416BCF . 83EA 30 sub edx,30
00416BD2 . 3BFA cmp edi,edx
00416BD4 . 75 48 jnz short a2vmixer.00416C1E
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
00416BE5 . 75 37 jnz short a2vmixer.00416C1E ; 这部分的四个跳转JNZ是判断注册码的前四前是否是3、7、6、9
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
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
00416C07 . 75 15 jnz short a2vmixer.00416C1E
00416C09 . 99 cdq
00416C0A . BF 0A000000 mov edi,0A ; 如果上面四个余数正确的话,我们就快成功了,继续往下走吧!
00416C0F . F7FF idiv edi ; 这里是用户名的ASCii累加值除以A,EAX=0x227/A,余数在EDX里,EDX=1
00416C11 . 0FB6C2 movzx eax,dl ; 余数1,送到EAX里,EAX=1
00416C14 . 0FB6D1 movzx edx,cl ; 判断我们假注册码的第五位数,是否为余数1,不是就OVER了
00416C17 . 83EA 30 sub edx,30
00416C1A . 3BC2 cmp eax,edx
00416C1C . 74 3A je short a2vmixer.00416C58 ; 相等的话就注册成功了! 虽然要满足8位注册码,但只有前5位起作用,后面N位无关紧要。
00416C1E > 807C24 19 31 cmp byte ptr ss :[esp+19],31
00416C23 . 0F85 85000000 jnz a2vmixer.00416CAE
00416C29 . 807C24 13 32 cmp byte ptr ss :[esp+13],32
00416C2E . 75 7E jnz short a2vmixer.00416CAE
00416C30 . 8A5424 14 mov dl,byte ptr ss :[esp+14]
00416C34 . B0 38 mov al,38
00416C36 . 3AD0 cmp dl,al
00416C38 . 75 74 jnz short a2vmixer.00416CAE
00416C3A . 807C24 15 30 cmp byte ptr ss :[esp+15],30
00416C3F . 75 6D jnz short a2vmixer.00416CAE
00416C41 . 80F9 37 cmp cl,37
00416C44 . 75 68 jnz short a2vmixer.00416CAE
00416C46 . 384424 1A cmp byte ptr ss :[esp+1A],al
00416C4A . 75 62 jnz short a2vmixer.00416CAE
00416C4C . 807C24 1B 33 cmp byte ptr ss :[esp+1B],33
00416C51 . 75 5B jnz short a2vmixer.00416CAE
00416C53 . 80FB 35 cmp bl,35
00416C56 . 75 56 jnz short a2vmixer.00416CAE
00416C58 > 6A 00 push 0
00416C5A . 6A 00 push 0 ; 注册成功对话框,然后把注册码写到注册表里。
00416C5C . 68 98874400 push a2vmixer.00448798 ; ASCII "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 ; /Arg3
00416C72 . 68 547C4400 push a2vmixer.00447C54 ; |Arg2 = 00447C54 ASCII "username"
00416C77 . 68 4C7C4400 push a2vmixer.00447C4C ; |Arg1 = 00447C4C ASCII "Option"
00416C7C . 8BC8 mov ecx,eax ; |
00416C7E . E8 43500200 call a2vmixer.0043BCC6 ; \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 ; /Arg3
00416C8F . 68 387C4400 push a2vmixer.00447C38 ; |Arg2 = 00447C38 ASCII "registration_code"
00416C94 . 68 4C7C4400 push a2vmixer.00447C4C ; |Arg1 = 00447C4C ASCII "Option"
00416C99 . 8BC8 mov ecx,eax ; |
00416C9B . E8 26500200 call a2vmixer.0043BCC6 ; \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 ; ASCII "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
--------------------------------------------------------------------------------
【破解总结】 注册码和用户名有关,注册码必须不小于8位,8位里只有前5位起作用,后面N位无关紧要!
--------------------------------------------------------------------------------
【算法注册机】 #include <stdio.h>
int main()
{ int i,n,n1,n2,n3,n4,n5=0;
char name[255]={0}; printf("Crack by zmw1224[CZG][DFCG]\n" );
printf("___________________________\n" );
printf("请输入你的用户名(用户名大于2位):" );
scanf("%s" ,&name); n=strlen(name);
for (i=0;i<n;i++)
n5+=name[i];
n5%=0xA;
n1=name[0]|0x41;
n1%=0xA;
n2=name[1]|0x32;
n2%=0xA;
n3=name[0]|0x56;
n3%=0xA;
n4=name[1]|0x4D;
n4%=0xA; printf("你的注册码是:%d%d%d%d%d888" ,n1,n2,n3,n4,n5); return 0;
}
--------------------------------------------------------------------------------
【用户名、密码】 用户名:zmw1224
注册码:37691888
--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!