小娃崽申请加入DFCG破文4
【破文标题】Open Video Converter算法分析
【破文作者】小娃崽
【作者邮箱】wanzailuan@yahoo.com.cn
【作者主页】
【破解工具】OllyDbg
【破解平台】XP+SP2
【软件名称】VideoConverter
【软件大小】508KB
【原版下载】http://www.skycn.com/soft/18234.html
【保护方式】序列号
【软件简介】Open Video Converter 是一款易于使用的视频转换,分割和编辑工具。它能转换多个视频格式如MPG,AVI,ASF,WMV到AVI 文件。它能改变帧尺寸,帧频,视频和音频压缩编码。主要功能有:-转换MPEG,WMV,ASF,MPG,VCD,OGM,DAT,SVCD为AVI。支持DIVX,XVID编码。-分割视频文件 -改变帧尺寸,调整视频屏幕高宽比。-通过选择不同编码率改变视频文件大小 -改变AVI文件的视频和音频压缩编码。
------------------------------------------------------------------------
一、查壳
peid显示不是有效的PE文件,不管了,OD直接载入
二破解
用户名:xz
试炼码:12345678
00424980 /. 55 push ebp ;这里下断
00424981 |. 8BEC mov ebp,esp
00424983 |. 83EC 20 sub esp,20
00424986 |. 894D E0 mov dword ptr ss:[ebp-20],ecx ; 用户名到EBP-20
00424989 |. 6A 01 push 1
0042498B |. 8B4D E0 mov ecx,dword ptr ss:[ebp-20]
0042498E |. E8 CA230200 call VideoCon.00446D5D
00424993 |. 8B4D E0 mov ecx,dword ptr ss:[ebp-20]
00424996 |. 83C1 70 add ecx,70
00424999 |. E8 B270FEFF call VideoCon.0040BA50
0042499E |. 83F8 02 cmp eax,2 ; 用户名≥2吗?
004249A1 |. 7D 13 jge short VideoCon.004249B6
004249A3 |. 6A 00 push 0
004249A5 |. 6A 00 push 0
004249A7 |. 68 2C034600 push VideoCon.0046032C ; ASCII "Please input correct User Name!"
004249AC |. E8 BEC10200 call VideoCon.00450B6F
004249B1 |. E9 A9020000 jmp VideoCon.00424C5F
004249B6 |> 8B4D E0 mov ecx,dword ptr ss:[ebp-20]
004249B9 |. 83C1 74 add ecx,74
004249BC |. E8 8F70FEFF call VideoCon.0040BA50
004249C1 |. 83F8 08 cmp eax,8 ; 注册码≥8吗?
004249C4 |. 7D 13 jge short VideoCon.004249D9
004249C6 |. 6A 00 push 0
004249C8 |. 6A 00 push 0
004249CA |. 68 4C034600 push VideoCon.0046034C ; ASCII "Please input correct Registration Code!"
004249CF |. E8 9BC10200 call VideoCon.00450B6F
004249D4 |. E9 86020000 jmp VideoCon.00424C5F
004249D9 |> 6A 00 push 0 ; /Arg1 = 00000000
004249DB |. 8B4D E0 mov ecx,dword ptr ss:[ebp-20] ; |
004249DE |. 83C1 70 add ecx,70 ; |
004249E1 |. E8 AAF5FFFF call VideoCon.00423F90 ; \VideoCon.00423F90
004249E6 |. 8845 EF mov byte ptr ss:[ebp-11],al ; 用户名第1位到[ebp-11];78
004249E9 |. 6A 01 push 1 ; /Arg1 = 00000001
004249EB |. 8B4D E0 mov ecx,dword ptr ss:[ebp-20] ; |
004249EE |. 83C1 70 add ecx,70 ; |
004249F1 |. E8 9AF5FFFF call VideoCon.00423F90 ; \VideoCon.00423F90
004249F6 |. 8845 F8 mov byte ptr ss:[ebp-8],al ; 用户名第2位到[ebp-8];7A
004249F9 |. 6A 00 push 0 ; /Arg1 = 00000000
004249FB |. 8B4D E0 mov ecx,dword ptr ss:[ebp-20] ; |
004249FE |. 83C1 70 add ecx,70 ; |
00424A01 |. E8 8AF5FFFF call VideoCon.00423F90 ; \VideoCon.00423F90
00424A06 |. 8845 FF mov byte ptr ss:[ebp-1],al ; 用户名第1位到[ebp-1]
00424A09 |. 6A 01 push 1 ; /Arg1 = 00000001
00424A0B |. 8B4D E0 mov ecx,dword ptr ss:[ebp-20] ; |
00424A0E |. 83C1 70 add ecx,70 ; |
00424A11 |. E8 7AF5FFFF call VideoCon.00423F90 ; \VideoCon.00423F90
00424A16 |. 8845 FA mov byte ptr ss:[ebp-6],al ; 用户名第2位到[ebp-6]
00424A19 |. 0FB645 EF movzx eax,byte ptr ss:[ebp-11] ; eax=78;也就是用户名第一位的ASCII玛
00424A1D |. 83C8 41 or eax,41 ; or 41
00424A20 |. 8845 EF mov byte ptr ss:[ebp-11],al ; 值保存到[ebp-11];79
00424A23 |. 0FB64D F8 movzx ecx,byte ptr ss:[ebp-8] ; ecx=z(7A);也就是用户名第2位的ASCII码
00424A27 |. 83C9 56 or ecx,56 ; or 56
00424A2A |. 884D F8 mov byte ptr ss:[ebp-8],cl ; 值保存到[ebp-8];7E
00424A2D |. 0FB655 FF movzx edx,byte ptr ss:[ebp-1] ; edx=w(77)也就是用户名第1位的ASCII码
00424A31 |. 83CA 49 or edx,49 ; or 49
00424A34 |. 8855 FF mov byte ptr ss:[ebp-1],dl ; 值保存到[ebp-1];79
00424A37 |. 0FB645 FA movzx eax,byte ptr ss:[ebp-6] ; eax=z;也就是用户名第2位的ASCII码
00424A3B |. 83C8 43 or eax,43 ; or 43
00424A3E |. 8845 FA mov byte ptr ss:[ebp-6],al ; 值保存到[ebp-6];7B
00424A41 |. 0FB645 EF movzx eax,byte ptr ss:[ebp-11] ; EAX=(用户名第一位ASCII码 or 41)
00424A45 |. 99 cdq
00424A46 |. B9 0A000000 mov ecx,0A ; ecx=0a
00424A4B |. F7F9 idiv ecx ; eax/ecx
00424A4D |. 8855 EF mov byte ptr ss:[ebp-11],dl ; 余数到[ebp-11];01
00424A50 |. 0FB645 F8 movzx eax,byte ptr ss:[ebp-8] ; EAX=(用户名第2位ASCII码 or 49)
00424A54 |. 99 cdq
00424A55 |. B9 0A000000 mov ecx,0A ; ecx=a
00424A5A |. F7F9 idiv ecx ; eax/ecx
00424A5C |. 8855 F8 mov byte ptr ss:[ebp-8],dl ; 余数到[ebp-8];06
00424A5F |. 0FB645 FF movzx eax,byte ptr ss:[ebp-1] ; eax=79
00424A63 |. 99 cdq
00424A64 |. B9 0A000000 mov ecx,0A
00424A69 |. F7F9 idiv ecx ; 7f/0a
00424A6B |. 8855 FF mov byte ptr ss:[ebp-1],dl ; 值到[ebp-1];01
00424A6E |. 0FB645 FA movzx eax,byte ptr ss:[ebp-6] ; EAX=7B
00424A72 |. 99 cdq
00424A73 |. B9 0A000000 mov ecx,0A
00424A78 |. F7F9 idiv ecx ; 7b/a
00424A7A |. 8855 FA mov byte ptr ss:[ebp-6],dl ; 值到[ebp-6];03
00424A7D |. C745 F0 00000000 mov dword ptr ss:[ebp-10],0 ; ebp-10=0
00424A84 |. C745 E8 00000000 mov dword ptr ss:[ebp-18],0 ; ebp-18=0
00424A8B |. EB 09 jmp short VideoCon.00424A96
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~这里是一个循环
00424A8D |> 8B55 E8 /mov edx,dword ptr ss:[ebp-18] ; edx=0
00424A90 |. 83C2 01 |add edx,1 ; edx=edx+1;做计数器
00424A93 |. 8955 E8 |mov dword ptr ss:[ebp-18],edx ; 把计数器的值保存到变量EBP-18
00424A96 |> 8B4D E0 mov ecx,dword ptr ss:[ebp-20] ; 用户名到ECX
00424A99 83C1 70 add ecx,70
00424A9C |. E8 AF6FFEFF |call VideoCon.0040BA50 ; 取用户名长度
00424AA1 |. 3945 E8 |cmp dword ptr ss:[ebp-18],eax ; ebp-18 cmp 用户名长度
00424AA4 |. 7D 1E |jge short VideoCon.00424AC4 ; 大于就跳出循环
00424AA6 |. 8B45 E8 |mov eax,dword ptr ss:[ebp-18] ; eax=ebp-18;移动到用户名的下一位做准备
00424AA9 |. 50 |push eax ; /Arg1
00424AAA |. 8B4D E0 |mov ecx,dword ptr ss:[ebp-20] ; |
00424AAD |. 83C1 70 |add ecx,70 ; |
00424AB0 |. E8 DBF4FFFF |call VideoCon.00423F90 ; \VideoCon.00423F90
00424AB5 |. 8845 E7 |mov byte ptr ss:[ebp-19],al ; 取用户名第1位
00424AB8 |. 0FB64D E7 |movzx ecx,byte ptr ss:[ebp-19] ; 扩展到ECX
00424ABC |. 034D F0 |add ecx,dword ptr ss:[ebp-10] ; ECX=ECX+[EBP-10]
00424ABF |. 894D F0 |mov dword ptr ss:[ebp-10],ecx ; 结果保存到变量EBP-10
00424AC2 |.^ EB C9 \jmp short VideoCon.00424A8D
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~这里是一个循环
00424AC4 |> 8B45 F0 mov eax,dword ptr ss:[ebp-10] ; 把上面循环结果的值保存到EAX
00424AC7 |. 99 cdq
00424AC8 |. B9 0A000000 mov ecx,0A
00424ACD |. F7F9 idiv ecx ; 结果/ECX
00424ACF |. 8855 F4 mov byte ptr ss:[ebp-C],dl ; 余数到EBP-C
00424AD2 |. 6A 00 push 0 ; /Arg1 = 00000000
00424AD4 |. 8B4D E0 mov ecx,dword ptr ss:[ebp-20] ; |
00424AD7 |. 83C1 74 add ecx,74 ; |
00424ADA |. E8 B1F4FFFF call VideoCon.00423F90 ; \VideoCon.00423F90
00424ADF |. 8845 FC mov byte ptr ss:[ebp-4],al ; 注册码第一位到EBP-4
00424AE2 |. 6A 01 push 1 ; /Arg1 = 00000001
00424AE4 |. 8B4D E0 mov ecx,dword ptr ss:[ebp-20] ; |
00424AE7 |. 83C1 74 add ecx,74 ; |
00424AEA |. E8 A1F4FFFF call VideoCon.00423F90 ; \VideoCon.00423F90
00424AEF |. 8845 FD mov byte ptr ss:[ebp-3],al ; 注册码第2位到EBP-3
00424AF2 |. 6A 02 push 2 ; /Arg1 = 00000002
00424AF4 |. 8B4D E0 mov ecx,dword ptr ss:[ebp-20] ; |
00424AF7 |. 83C1 74 add ecx,74 ; |
00424AFA |. E8 91F4FFFF call VideoCon.00423F90 ; \VideoCon.00423F90
00424AFF |. 8845 F6 mov byte ptr ss:[ebp-A],al ; 注册玛第三位到EBP-A
00424B02 |. 6A 03 push 3 ; /Arg1 = 00000003
00424B04 |. 8B4D E0 mov ecx,dword ptr ss:[ebp-20] ; |
00424B07 |. 83C1 74 add ecx,74 ; |
00424B0A |. E8 81F4FFFF call VideoCon.00423F90 ; \VideoCon.00423F90
00424B0F |. 8845 F5 mov byte ptr ss:[ebp-B],al ; 注册码第四位到EBP-B
00424B12 |. 6A 04 push 4 ; /Arg1 = 00000004
00424B14 |. 8B4D E0 mov ecx,dword ptr ss:[ebp-20] ; |
00424B17 |. 83C1 74 add ecx,74 ; |
00424B1A |. E8 71F4FFFF call VideoCon.00423F90 ; \VideoCon.00423F90
00424B1F |. 8845 F9 mov byte ptr ss:[ebp-7],al ; 注册码第5位到EBP-7
00424B22 |. 6A 05 push 5 ; /Arg1 = 00000005
00424B24 |. 8B4D E0 mov ecx,dword ptr ss:[ebp-20] ; |
00424B27 |. 83C1 74 add ecx,74 ; |
00424B2A |. E8 61F4FFFF call VideoCon.00423F90 ; \VideoCon.00423F90
00424B2F |. 8845 F7 mov byte ptr ss:[ebp-9],al ; 注册码第6位到EBP-9
00424B32 |. 6A 06 push 6 ; /Arg1 = 00000006
00424B34 |. 8B4D E0 mov ecx,dword ptr ss:[ebp-20] ; |
00424B37 |. 83C1 74 add ecx,74 ; |
00424B3A |. E8 51F4FFFF call VideoCon.00423F90 ; \VideoCon.00423F90
00424B3F |. 8845 FE mov byte ptr ss:[ebp-2],al ; 注册码第7位到EBP-2
00424B42 |. 6A 07 push 7 ; /Arg1 = 00000007
00424B44 |. 8B4D E0 mov ecx,dword ptr ss:[ebp-20] ; |
00424B47 |. 83C1 74 add ecx,74 ; |
00424B4A |. E8 41F4FFFF call VideoCon.00423F90 ; \VideoCon.00423F90
00424B4F |. 8845 FB mov byte ptr ss:[ebp-5],al ; 注册码第8位到EBP-5
00424B52 |. 0FB655 EF movzx edx,byte ptr ss:[ebp-11] ; EDX=EBP-11
00424B56 |. 0FB645 FC movzx eax,byte ptr ss:[ebp-4] ; 注册码第1位到EAX
00424B5A |. 83E8 30 sub eax,30 ; EAX=EAX-30;就是数值本身
00424B5D |. 3BD0 cmp edx,eax ; 比较[EBP-11]与注册码第一位
00424B5F 75 3C jnz short VideoCon.00424B9D ; 不相等往下跳
00424B61 0FB64D F8 movzx ecx,byte ptr ss:[ebp-8] ; ECX=[EBP-8]
00424B65 |. 0FB655 FD movzx edx,byte ptr ss:[ebp-3] ; EDX=注册码第2位
00424B69 |. 83EA 30 sub edx,30 ; 取数值本身
00424B6C |. 3BCA cmp ecx,edx ; [EBP-8]与注册码第2位比较
00424B6E 75 2D jnz short VideoCon.00424B9D ; 不相等跳到下面继续比较
00424B70 0FB645 FF movzx eax,byte ptr ss:[ebp-1] ; EAX=[EBP-1]
00424B74 |. 0FB64D F6 movzx ecx,byte ptr ss:[ebp-A] ; ECX=用户名第三位
00424B78 |. 83E9 30 sub ecx,30
00424B7B |. 3BC1 cmp eax,ecx ; 和注册码第三位比较
00424B7D 75 1E jnz short VideoCon.00424B9D ; 不相等跳到下面继续比较
00424B7F |. 0FB655 FA movzx edx,byte ptr ss:[ebp-6] ; EDX=[EBP-6]
00424B83 |. 0FB645 F5 movzx eax,byte ptr ss:[ebp-B] ; EDX=注册码第4位
00424B87 |. 83E8 30 sub eax,30
00424B8A |. 3BD0 cmp edx,eax
00424B8C 75 0F jnz short VideoCon.00424B9D ; 和注册码第4位比较
00424B8E 0FB64D F4 movzx ecx,byte ptr ss:[ebp-C] ; 循环结果的值-->ECX
00424B92 |. 0FB655 F9 movzx edx,byte ptr ss:[ebp-7] ; EDX=注册码第5位
00424B96 |. 83EA 30 sub edx,30
00424B99 |. 3BCA cmp ecx,edx ; 和第5位比较
00424B9B 74 58 je short VideoCon.00424BF5 ; 相等就提示注册成功
/////////////////////////////////////////////////////////////////////////////////////////////////
根据以上分析可以得出以下结论:
注册码第1位=(用户名第1位ASCII码 or 41) mod 0A
注册码第2位=(用户名第2位ASCII码 or 56) mod 0A
注册码第3位=(用户名第1位ASCII码 or 49) mod 0A
注册码第4位=(用户名第1位ASCII码 or 43) mod 0A
注册码第5位=(用户名各位ASCII码的值累加) mod 0A
用户名必须大于等于2位
注册码必须大于等于8位,但是只比较前5位
////////////////////////////////////////////////////////////////////////////////////////////////
00424B9D |> 0FB645 FC movzx eax,byte ptr ss:[ebp-4] ; EAX=注册码第1位
00424BA1 |. 83F8 35 cmp eax,35 ; 第一位=35?
00424BA4 0F85 A7000000 jnz VideoCon.00424C51 ; 不相等提示失败
00424BAA |. 0FB64D FD movzx ecx,byte ptr ss:[ebp-3] ; ECX=注册码第2位
00424BAE |. 83F9 31 cmp ecx,31 ; =31?,不等提示失败
00424BB1 0F85 9A000000 jnz VideoCon.00424C51
00424BB7 |. 0FB655 F6 movzx edx,byte ptr ss:[ebp-A] ; EDX=注册码第3位
00424BBB |. 83FA 38 cmp edx,38 ; =38?不等提示失败
00424BBE 0F85 8D000000 jnz VideoCon.00424C51
00424BC4 |. 0FB645 F5 movzx eax,byte ptr ss:[ebp-B] ; EAX=注册码第4位
00424BC8 |. 83F8 39 cmp eax,39 ; =39?不等就提示注册失败
00424BCB 0F85 80000000 jnz VideoCon.00424C51
00424BD1 |. 0FB64D F9 movzx ecx,byte ptr ss:[ebp-7] ; ECX=注册码第5位
00424BD5 |. 83F9 37 cmp ecx,37 ; =37?不相等就提示失败
00424BD8 75 77 jnz short VideoCon.00424C51
00424BDA |. 0FB655 F7 movzx edx,byte ptr ss:[ebp-9]
00424BDE |. 83FA 36 cmp edx,36 ; 注册码第6位=36?不等就提示失败
00424BE1 |. 75 6E jnz short VideoCon.00424C51
00424BE3 |. 0FB645 FE movzx eax,byte ptr ss:[ebp-2]
00424BE7 |. 83F8 32 cmp eax,32 ; 注册码第7位=32?不等就提示失败
00424BEA 75 65 jnz short VideoCon.00424C51
00424BEC |. 0FB64D FB movzx ecx,byte ptr ss:[ebp-5]
00424BF0 |. 83F9 39 cmp ecx,39 ; 注册码第8位=39?
00424BF3 75 5C jnz short VideoCon.00424C51
///////////////////////////////////////////////////////////////////////////////////////////////
以上分析得出万能注册码:因为不可能前面5个值都相等那么巧吧~_~
用户名:随意填写(大于2位即可)
序列号:51897629
///////////////////////////////////////////////////////////////////////////////////////////////
00424BF5 |> 6A 00 push 0
00424BF7 |. 6A 00 push 0
00424BF9 |. 68 74034600 push VideoCon.00460374 ; ASCII "Registration has succeeded!"
00424BFE |. E8 6CBF0200 call VideoCon.00450B6F
00424C03 |. 8B4D E0 mov ecx,dword ptr ss:[ebp-20]
00424C06 |. 83C1 70 add ecx,70
00424C09 |. E8 62F4FFFF call VideoCon.00424070
00424C0E |. 50 push eax
00424C0F |. 68 90034600 push VideoCon.00460390 ; ASCII "username"
00424C14 |. 68 9C034600 push VideoCon.0046039C ; ASCII "Option"
00424C19 |. E8 A295FEFF call VideoCon.0040E1C0
00424C1E |. 8BC8 mov ecx,eax ; |
00424C20 |. E8 AABC0200 call VideoCon.004508CF ; \VideoCon.004508CF
00424C25 |. 8B4D E0 mov ecx,dword ptr ss:[ebp-20]
00424C28 |. 83C1 74 add ecx,74
00424C2B |. E8 40F4FFFF call VideoCon.00424070
00424C30 |. 50 push eax
00424C31 |. 68 A4034600 push VideoCon.004603A4 ; ASCII "registration_code"
00424C36 |. 68 B8034600 push VideoCon.004603B8 ; ASCII "Option"
00424C3B |. E8 8095FEFF call VideoCon.0040E1C0
00424C40 |. 8BC8 mov ecx,eax ; |
00424C42 |. E8 88BC0200 call VideoCon.004508CF ; \VideoCon.004508CF
00424C47 |. 8B4D E0 mov ecx,dword ptr ss:[ebp-20]
00424C4A |. E8 87620200 call VideoCon.0044AED6
00424C4F |. EB 0E jmp short VideoCon.00424C5F
00424C51 |> 6A 00 push 0
00424C53 |. 6A 00 push 0
00424C55 |. 68 C0034600 push VideoCon.004603C0 ; ASCII "Registration failed!"
00424C5A |. E8 10BF0200 call VideoCon.00450B6F
00424C5F |> 8BE5 mov esp,ebp
00424C61 |. 5D pop ebp
00424C62 \. C3 retn
------------------------------------------------------------------------
算法注册机如下:
Dim serial1, serial2, serial3, serial4, serial5, serial6 As Integer
Dim sum As Integer
Dim i As Integer
Private Sub Command1_Click()
If Len(Text1.Text) < 2 Then
PROMPT = MsgBox("用户名至少两位以上!", vbOKOnly, "ERROR")
End If
serial1 = (Asc(Mid(Text1.Text, 1, 1)) Or &H41) Mod &HA
Rem 计算注册码第1位
serial2 = (Asc(Mid(Text1.Text, 2, 1)) Or &H56) Mod &HA
Rem 计算注册码第2位
serial3 = (Asc(Mid(Text1.Text, 1, 1)) Or &H49) Mod &HA
Rem 计算注册码第3位
serial4 = (Asc(Mid(Text1.Text, 2, 1)) Or &H43) Mod &HA
Rem 计算注册码第4位
sum = 0
For i = 1 To Len(Text1.Text)
sum = sum + Asc(Mid(Text1.Text, i, 1))
Next i
serial5 = sum Mod &HA
Rem 计算注册码第5位
serial6 = Fix(Rnd * 900) + 100
Rem 随机产生三位数
Text2.Text = Trim(Str(serial1)) + Trim(Str(serial2)) + Trim(Str(serial3)) + Trim(Str(serial4)) + Trim(Str(serial5)) _
+ Trim(Str(serial6))
Rem text2显示的就是注册码
End Sub------------------------------------------------------------------------
【版权声明】"破"文一篇,请随意转载,但请保持文章的完整性