小娃崽申请加入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------------------------------------------------------------------------
【版权声明】"破"文一篇,请随意转载,但请保持文章的完整性