【破文标题】Mpeg Joiner算法分析
【破文作者】小娃崽[DFCG]
【作者邮箱】wanzailuan@yahoo.com.cn
【作者主页】
【破解工具】OllyDbg
【破解平台】xp+sp2
【软件名称】Mpeg Joiner
【软件大小】244KB
【原版下载】http://www.skycn.com/soft/17764.html
【保护方式】时间限制+功能限制
【软件简介】MPEG影片合并的工具软件 - MPEG Joiner,是一款很容易操作的软件,它能够将多个 MPEG 影片档案加以合并成一个单一档案,如此对观看、烧录、传送给他人都更加的方便,您只要选择所要合并的MPEG 档案,再按下Joiner,一切就大功告成了。
------------------------------------------------------------------------
00403D13 . 55 push ebp
00403D14 . 56 push esi
00403D15 . 57 push edi
00403D16 . BF 01000000 mov edi,1
00403D1B . 57 push edi
00403D1C . 8BF1 mov esi,ecx
00403D1E . E8 C8A30100 call MpegJoin.0041E0EB
00403D23 . 8B46 70 mov eax,dword ptr ds:[esi+70] ; 用户名到EAX
00403D26 . 8B68 F4 mov ebp,dword ptr ds:[eax-C] ; 用户名长度到EBP
00403D29 . 83FD 02 cmp ebp,2
00403D2C . 7D 15 jge short MpegJoin.00403D43 ; 用户名长度要≥2
00403D2E . 6A 00 push 0
00403D30 . 6A 00 push 0
00403D32 . 68 FCAE4200 push MpegJoin.0042AEFC ; ASCII "Please input correct User Name!"
00403D37 . E8 B9FE0100 call MpegJoin.00423BF5
00403D3C . 5F pop edi
00403D3D . 5E pop esi
00403D3E . 5D pop ebp
00403D3F . 83C4 0C add esp,0C
00403D42 . C3 retn
00403D43 > 8B4E 74 mov ecx,dword ptr ds:[esi+74] ; 注册码到ECX
00403D46 . 8379 F4 08 cmp dword ptr ds:[ecx-C],8
00403D4A . 7D 15 jge short MpegJoin.00403D61 ; 注册码长度要≥8
00403D4C . 6A 00 push 0
00403D4E . 6A 00 push 0
00403D50 . 68 D4AE4200 push MpegJoin.0042AED4 ; ASCII "Please input correct Registration Code!"
00403D55 . E8 9BFE0100 call MpegJoin.00423BF5
00403D5A . 5F pop edi
00403D5B . 5E pop esi
00403D5C . 5D pop ebp
00403D5D . 83C4 0C add esp,0C
00403D60 . C3 retn
00403D61 > 8B46 70 mov eax,dword ptr ds:[esi+70] ; 用户名到EAX
00403D64 . 8B48 F4 mov ecx,dword ptr ds:[eax-C] ; 注册码到ECX
00403D67 . 85C9 test ecx,ecx
00403D69 7D 0A jge short MpegJoin.00403D75
00403D6B . 68 57000780 push 80070057
00403D70 . E8 BBD6FFFF call MpegJoin.00401430
00403D75 > 8A10 mov dl,byte ptr ds:[eax]
00403D77 . 8B46 70 mov eax,dword ptr ds:[esi+70]
00403D7A . 3978 F4 cmp dword ptr ds:[eax-C],edi
00403D7D . 7D 0A jge short MpegJoin.00403D89
00403D7F . 68 57000780 push 80070057
00403D84 . E8 A7D6FFFF call MpegJoin.00401430
00403D89 > 8A40 01 mov al,byte ptr ds:[eax+1]
00403D8C . 884424 0E mov byte ptr ss:[esp+E],al
00403D90 . 8B46 70 mov eax,dword ptr ds:[esi+70]
00403D93 . 8B48 F4 mov ecx,dword ptr ds:[eax-C]
00403D96 . 85C9 test ecx,ecx
00403D98 . 7D 0A jge short MpegJoin.00403DA4
00403D9A . 68 57000780 push 80070057
00403D9F . E8 8CD6FFFF call MpegJoin.00401430
00403DA4 > 8B4E 70 mov ecx,dword ptr ds:[esi+70]
00403DA7 . 53 push ebx
00403DA8 . 8A18 mov bl,byte ptr ds:[eax]
00403DAA . 3979 F4 cmp dword ptr ds:[ecx-C],edi
00403DAD . 7D 0A jge short MpegJoin.00403DB9
00403DAF . 68 57000780 push 80070057
00403DB4 . E8 77D6FFFF call MpegJoin.00401430
00403DB9 > 0FB6C2 movzx eax,dl ; 用户名第1位到EAX
00403DBC . 83C8 44 or eax,44 ; or 44
00403DBF . 99 cdq
00403DC0 . BF 0A000000 mov edi,0A
00403DC5 . F7FF idiv edi ; 除以A
00403DC7 . 0FB64424 12 movzx eax,byte ptr ss:[esp+12] ; 用户名第2位到EAX
00403DCC . 83C8 43 or eax,43 ; or 43
00403DCF . 885424 16 mov byte ptr ss:[esp+16],dl ; 上面的得到的余数到[ESP+16]
00403DD3 . 99 cdq
00403DD4 . F7FF idiv edi ; 除以A
00403DD6 . 0FB6C3 movzx eax,bl ; 用户名第1位到EAX
00403DD9 . 83C8 43 or eax,43 ; OR 43
00403DDC . 885424 12 mov byte ptr ss:[esp+12],dl ; 上面得到的余数到[EBP+12]
00403DE0 . 99 cdq
00403DE1 . F7FF idiv edi ; 除以A
00403DE3 . 0FB641 01 movzx eax,byte ptr ds:[ecx+1] ; 用户名第2位到EAX
00403DE7 . 83C8 44 or eax,44 ; or 44
00403DEA . 8BCF mov ecx,edi ; ECX=EDI=A
00403DEC . 885424 17 mov byte ptr ss:[esp+17],dl ; 上面得到的余数到[ESP+17]
00403DF0 . 99 cdq
00403DF1 . F7F9 idiv ecx ; 除以A
00403DF3 . 33C0 xor eax,eax ; EAX清零
00403DF5 . 33C9 xor ecx,ecx ; ECX清零
00403DF7 . 85ED test ebp,ebp
00403DF9 . 885424 18 mov byte ptr ss:[esp+18],dl ; 上面得到的余数到[ESP+18]
00403DFD . 7E 20 jle short MpegJoin.00403E1F
00403DFF . 90 nop
00403E00 > 85C9 test ecx,ecx ; ECX清零,做计数器
00403E02 . 0F8C D2000000 jl MpegJoin.00403EDA
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00403E08 . 8B7E 70 mov edi,dword ptr ds:[esi+70] ; 用户名到EDI
00403E0B . 3B4F F4 cmp ecx,dword ptr ds:[edi-C]
00403E0E . 0F8F C6000000 jg MpegJoin.00403EDA
00403E14 . 0FB6140F movzx edx,byte ptr ds:[edi+ecx] ; EDX依次等于用户名的各个位
00403E18 . 03C2 add eax,edx ; EAX=EAX+EDX
00403E1A . 41 inc ecx ; 计数器+1
00403E1B . 3BCD cmp ecx,ebp ; 小于继续循环
00403E1D .^ 7C E1 jl short MpegJoin.00403E00
~~~~~~~~~~~~~~~~~~~~~~~~~~~循环的结果是累加用户名各位累加~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00403E1F > 8B4E 74 mov ecx,dword ptr ds:[esi+74] ; 注册码到ECX
00403E22 . 8B51 F4 mov edx,dword ptr ds:[ecx-C] ; 注册码长度到EDX
00403E25 . 85D2 test edx,edx
00403E27 . 7D 0A jge short MpegJoin.00403E33
00403E29 . 68 57000780 push 80070057
00403E2E . E8 FDD5FFFF call MpegJoin.00401430
00403E33 > 8A11 mov dl,byte ptr ds:[ecx]
00403E35 . 8B4E 74 mov ecx,dword ptr ds:[esi+74]
00403E38 . 8379 F4 01 cmp dword ptr ds:[ecx-C],1
00403E3C . 885424 19 mov byte ptr ss:[esp+19],dl ; 注册码第1位到[ESP+19]
00403E40 . 7D 0A jge short MpegJoin.00403E4C
00403E42 . 68 57000780 push 80070057
00403E47 . E8 E4D5FFFF call MpegJoin.00401430
00403E4C > 8A49 01 mov cl,byte ptr ds:[ecx+1]
00403E4F . 8B7E 74 mov edi,dword ptr ds:[esi+74]
00403E52 . 884C24 13 mov byte ptr ss:[esp+13],cl ; 注册码第2位到[ESP+13]
00403E56 . 837F F4 02 cmp dword ptr ds:[edi-C],2
00403E5A . 7D 0A jge short MpegJoin.00403E66
00403E5C . 68 57000780 push 80070057
00403E61 . E8 CAD5FFFF call MpegJoin.00401430
00403E66 > 8A4F 02 mov cl,byte ptr ds:[edi+2]
00403E69 . 8B7E 74 mov edi,dword ptr ds:[esi+74]
00403E6C . 884C24 14 mov byte ptr ss:[esp+14],cl ; 注册码第3位到[ESP+14]
00403E70 . 837F F4 03 cmp dword ptr ds:[edi-C],3
00403E74 . 7D 0A jge short MpegJoin.00403E80
00403E76 . 68 57000780 push 80070057
00403E7B . E8 B0D5FFFF call MpegJoin.00401430
00403E80 > 8A4F 03 mov cl,byte ptr ds:[edi+3]
00403E83 . 8B7E 74 mov edi,dword ptr ds:[esi+74]
00403E86 . 884C24 15 mov byte ptr ss:[esp+15],cl ; 注册码第4位到ESP+15
00403E8A . 837F F4 04 cmp dword ptr ds:[edi-C],4
00403E8E . 7D 0A jge short MpegJoin.00403E9A
00403E90 . 68 57000780 push 80070057
00403E95 . E8 96D5FFFF call MpegJoin.00401430
00403E9A > 8A4F 04 mov cl,byte ptr ds:[edi+4] ; 注册码第5位到cl
00403E9D . 8B7E 74 mov edi,dword ptr ds:[esi+74]
00403EA0 . 837F F4 05 cmp dword ptr ds:[edi-C],5
00403EA4 . 7D 0A jge short MpegJoin.00403EB0
00403EA6 . 68 57000780 push 80070057
00403EAB . E8 80D5FFFF call MpegJoin.00401430
00403EB0 > 8A5F 05 mov bl,byte ptr ds:[edi+5]
00403EB3 . 8B7E 74 mov edi,dword ptr ds:[esi+74]
00403EB6 . 885C24 1A mov byte ptr ss:[esp+1A],bl ; 注册码第6位到[ESP=1A]
00403EBA . 837F F4 06 cmp dword ptr ds:[edi-C],6
00403EBE . 7D 0A jge short MpegJoin.00403ECA
00403EC0 . 68 57000780 push 80070057
00403EC5 . E8 66D5FFFF call MpegJoin.00401430
00403ECA > 8A5F 06 mov bl,byte ptr ds:[edi+6]
00403ECD . 8B7E 74 mov edi,dword ptr ds:[esi+74]
00403ED0 . 885C24 1B mov byte ptr ss:[esp+1B],bl ; 注册码第7位到[ESP+1B]
00403ED4 . 837F F4 07 cmp dword ptr ds:[edi-C],7
00403ED8 . 7D 0A jge short MpegJoin.00403EE4
00403EDA > 68 57000780 push 80070057
00403EDF . E8 4CD5FFFF call MpegJoin.00401430
00403EE4 > 8A5F 07 mov bl,byte ptr ds:[edi+7]
00403EE7 . 0FB67C24 16 movzx edi,byte ptr ss:[esp+16] ; 用户名第1位经过运算后的值到EDI
00403EEC . 0FB6D2 movzx edx,dl
00403EEF . 83EA 30 sub edx,30 ; 取数值本身
00403EF2 . 3BFA cmp edi,edx ; 比较注册码第一位
00403EF4 75 48 jnz short MpegJoin.00403F3E
00403EF6 . 0FB65424 13 movzx edx,byte ptr ss:[esp+13]
00403EFB . 0FB67C24 12 movzx edi,byte ptr ss:[esp+12] ; 用户名第2位经过运算后的值到EDI
00403F00 . 83EA 30 sub edx,30
00403F03 . 3BFA cmp edi,edx ; 比较注册码第2位
00403F05 75 37 jnz short MpegJoin.00403F3E
00403F07 . 0FB65424 14 movzx edx,byte ptr ss:[esp+14]
00403F0C . 0FB67C24 17 movzx edi,byte ptr ss:[esp+17]
00403F11 . 83EA 30 sub edx,30
00403F14 . 3BFA cmp edi,edx ; 比较注册码第3位
00403F16 . 75 26 jnz short MpegJoin.00403F3E
00403F18 . 0FB65424 15 movzx edx,byte ptr ss:[esp+15]
00403F1D . 0FB67C24 18 movzx edi,byte ptr ss:[esp+18]
00403F22 . 83EA 30 sub edx,30
00403F25 . 3BFA cmp edi,edx ; 比较注册码第4位
00403F27 75 15 jnz short MpegJoin.00403F3E
00403F29 . 99 cdq
00403F2A . BF 0A000000 mov edi,0A
00403F2F . F7FF idiv edi ; 用户名累加值除以A
00403F31 . 0FB6C2 movzx eax,dl ; 余数到EAX
00403F34 . 0FB6D1 movzx edx,cl ; 注册码第5位到EDX
00403F37 . 83EA 30 sub edx,30
00403F3A . 3BC2 cmp eax,edx ; 比较注册码第5位
00403F3C . 74 3A je short MpegJoin.00403F78
//////////////////////////////////////////////////////////////////////////////
根据以上分析可以得出以下结论:
注册码第1位=(用户名第1位ASCII码 or 44) mod 0A
注册码第2位=(用户名第2位ASCII码 or 43) mod 0A
注册码第3位=(用户名第1位ASCII码 or 43) mod 0A
注册码第4位=(用户名第1位ASCII码 or 44) mod 0A
注册码第5位=(用户名各位ASCII码的值累加) mod 0A
用户名必须大于等于2位
注册码必须大于等于8位,但是只比较前5位
////////////////////////////////////////////////////////////////
00403F3E > 807C24 19 39 cmp byte ptr ss:[esp+19],39 ;注册码第一位是9吗?
00403F43 0F85 85000000 jnz MpegJoin.00403FCE
00403F49 . 807C24 13 33 cmp byte ptr ss:[esp+13],33 ;注册码第2位是3吗?
00403F4E 75 7E jnz short MpegJoin.00403FCE
00403F50 . 807C24 14 30 cmp byte ptr ss:[esp+14],30 ;注册码第3位是0吗?
00403F55 75 77 jnz short MpegJoin.00403FCE
00403F57 . 8A5424 15 mov dl,byte ptr ss:[esp+15]
00403F5B . B0 31 mov al,31
00403F5D . 3AD0 cmp dl,al ;注册码第4位是1吗
00403F5F 75 6D jnz short MpegJoin.00403FCE
00403F61 . 80F9 33 cmp cl,33 ;注册码第5位是3吗
00403F64 75 68 jnz short MpegJoin.00403FCE
00403F66 . 384424 1A cmp byte ptr ss:[esp+1A],al ;注册码第6位是1吗
00403F6A 75 62 jnz short MpegJoin.00403FCE
00403F6C . 807C24 1B 34 cmp byte ptr ss:[esp+1B],34 ;注册码第7位是4吗
00403F71 75 5B jnz short MpegJoin.00403FCE
00403F73 . 80FB 37 cmp bl,37 ;注册码第8位是7吗
00403F76 75 56 jnz short MpegJoin.00403FCE
///////////////////////////////////////////////////////////////////////////////////////////////
根据以上分析我们可以得到一个万能注册码:
用户名:随意填写(大于两位即可)
注册码:93013147
///////////////////////////////////////////////////////////////////////////////////////////////
00403F78 > 6A 00 push 0
00403F7A . 6A 00 push 0
00403F7C . 68 B8AE4200 push MpegJoin.0042AEB8 ; ASCII "Registration has succeeded!"
00403F81 . E8 6FFC0100 call MpegJoin.00423BF5
00403F86 . 8B7E 70 mov edi,dword ptr ds:[esi+70]
00403F89 . E8 D2210200 call MpegJoin.00426160
00403F8E . 8B40 04 mov eax,dword ptr ds:[eax+4]
00403F91 . 57 push edi ; /Arg3
00403F92 . 68 D8AA4200 push MpegJoin.0042AAD8 ; |Arg2 = 0042AAD8 ASCII "username"
00403F97 . 68 D0AA4200 push MpegJoin.0042AAD0 ; |Arg1 = 0042AAD0 ASCII "Option"
00403F9C . 8BC8 mov ecx,eax ; |
00403F9E . E8 8EFD0100 call MpegJoin.00423D31 ; \MpegJoin.00423D31
00403FA3 . 8B7E 74 mov edi,dword ptr ds:[esi+74]
00403FA6 . E8 B5210200 call MpegJoin.00426160
00403FAB . 8B40 04 mov eax,dword ptr ds:[eax+4]
00403FAE . 57 push edi ; /Arg3
00403FAF . 68 BCAA4200 push MpegJoin.0042AABC ; |Arg2 = 0042AABC ASCII "registration_code"
00403FB4 . 68 D0AA4200 push MpegJoin.0042AAD0 ; |Arg1 = 0042AAD0 ASCII "Option"
00403FB9 . 8BC8 mov ecx,eax ; |
00403FBB . E8 71FD0100 call MpegJoin.00423D31 ; \MpegJoin.00423D31
00403FC0 . 5B pop ebx
00403FC1 . 5F pop edi
00403FC2 . 8BCE mov ecx,esi
00403FC4 . 5E pop esi
00403FC5 . 5D pop ebp
00403FC6 . 83C4 0C add esp,0C
00403FC9 . E9 118B0100 jmp MpegJoin.0041CADF
00403FCE > 6A 00 push 0
00403FD0 . 6A 00 push 0
00403FD2 . 68 A0AE4200 push MpegJoin.0042AEA0 ; ASCII "Registration failed!"
00403FD7 . E8 19FC0100 call MpegJoin.00423BF5
00403FDC . 5B pop ebx
00403FDD . 5F pop edi
00403FDE . 5E pop esi
00403FDF . 5D pop ebp
00403FE0 . 83C4 0C add esp,0C
00403FE3 . 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 &H44) Mod &HA
Rem 计算注册码第1位
serial2 = (Asc(Mid(Text1.Text, 2, 1)) Or &H43) Mod &HA
Rem 计算注册码第2位
serial3 = (Asc(Mid(Text1.Text, 1, 1)) Or &H43) Mod &HA
Rem 计算注册码第3位
serial4 = (Asc(Mid(Text1.Text, 2, 1)) Or &H44) 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
########################################################################################### ------------------------------------------------------------------------
国内的软件比较难破,这个软件可能和open Viedo Converter软件作者是同一个人,算法一模一样!!
------------------------------------------------------------------------
【版权声明】"破"文一篇,请随意转载,但请保持文章的完整性
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课