vacant 发表于 2006-6-30 20:27:37

MPEG Joiner V2.0.196算法分析

【文章标题】: MPEG Joiner V2.0.196算法分析(菜鸟级,高手勿进)
【文章作者】: vacant
【作者邮箱】: [email protected]
【软件名称】: MPEG Joiner V2.0.196
【软件大小】: 389 KB
【下载地址】: http://www.skycn.com/soft/17764.html
【加壳方式】: 无壳
【保护方式】: 用户名+序列号
【编写语言】: Microsoft Visual C++ 7.0
【使用工具】: OD,windows计算器
【操作平台】: Win9x/NT/2000/XP/2003
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
1.PEID侦测主程序,无壳,Microsoft Visual C++ 7.0
2.OD载入主程序,输入试炼码
    name:vacant
    code:87654321
    点注册,有错误提示.
3.重新OD装载,字符串参考,找到错误提示,"registration failed!",在00403D13 F2下断点.
4.重新OD装载,输入试炼码,点注册,中断
5.分析过程如下:

00403D13   .55            push    ebp
00403D14   .56            push    esi
00403D15   .57            push    edi
00403D16   .BF 01000000   mov   edi, 1                           ;edi=1
00403D1B   .57            push    edi
00403D1C   .8BF1          mov   esi, ecx
00403D1E   .E8 C8A30100   call    0041E0EB
00403D23   .8B46 70       mov   eax,                   ;eax=name地址
00403D26   .8B68 F4       mov   ebp,                      ;=name长度,送ebp
00403D29   .83FD 02       cmp   ebp, 2                           ;name 长度要大于2
00403D2C   .7D 15         jge   short 00403D43
00403D2E   .6A 00         push    0
00403D30   .6A 00         push    0
00403D32   .68 FCAE4200   push    0042AEFC                         ;please input correct user name!
00403D37   .E8 B9FE0100   call    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,                   ;ecx=code地址
00403D46   .8379 F4 08    cmp   dword ptr , 8             ;code长度要大于8
00403D4A   .7D 15         jge   short 00403D61
00403D4C   .6A 00         push    0
00403D4E   .6A 00         push    0
00403D50   .68 D4AE4200   push    0042AED4                         ;please input correct registration code!
00403D55   .E8 9BFE0100   call    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,                   ;name地址送eax
00403D64   .8B48 F4       mov   ecx,                      ;code长度送ecx
00403D67   .85C9          test    ecx, ecx                         ;code长度不为0,就跳
00403D69   .7D 0A         jge   short 00403D75
00403D6B   .68 57000780   push    80070057
00403D70   .E8 BBD6FFFF   call    00401430
00403D75   >8A10          mov   dl,                         ;name第1位送dl
00403D77   .8B46 70       mov   eax,                   ;name地址送eax
00403D7A   .3978 F4       cmp   , edi                     ;name长度大于1,就跳
00403D7D   .7D 0A         jge   short 00403D89
00403D7F   .68 57000780   push    80070057
00403D84   .E8 A7D6FFFF   call    00401430
00403D89   >8A40 01       mov   al,                       ;name第2位送al
00403D8C   .884424 0E   mov   , al                      ;name第2位送
00403D90   .8B46 70       mov   eax,                   ;name地址送eax
00403D93   .8B48 F4       mov   ecx,                      ;name长度送ecx
00403D96   .85C9          test    ecx, ecx                         ;ecx不为0,就跳
00403D98   .7D 0A         jge   short 00403DA4
00403D9A   .68 57000780   push    80070057
00403D9F   .E8 8CD6FFFF   call    00401430
00403DA4   >8B4E 70       mov   ecx,                   ;name地址送ecx
00403DA7   .53            push    ebx
00403DA8   .8A18          mov   bl,                         ;name第1位送bl
00403DAA   .3979 F4       cmp   , edi                     ;name长度大于1,就跳
00403DAD   .7D 0A         jge   short 00403DB9
00403DAF   .68 57000780   push    80070057
00403DB4   .E8 77D6FFFF   call    00401430
00403DB9   >0FB6C2      movzx   eax, dl                        ;eax1=name第1位 零扩展
00403DBC   .83C8 44       or      eax, 44                        ;eax1=eax1 or ox44
00403DBF   .99            cdq                                    ;双字扩展,edx=00000000
00403DC0   .BF 0A000000   mov   edi, 0A                        ;edi=0xa
00403DC5   .F7FF          idiv    edi
00403DC7   .0FB64424 12   movzx   eax, byte ptr          ;eax2=name第2位
00403DCC   .83C8 43       or      eax, 43                        ;eax2=eax2 or 0x43
00403DCF   .885424 16   mov   , dl                     ;eax1 余数送
00403DD3   .99            cdq
00403DD4   .F7FF          idiv    edi
00403DD6   .0FB6C3      movzx   eax, bl                        ;eax3=name第1位
00403DD9   .83C8 43       or      eax, 43                        ;eax3=eax3 or 43
00403DDC   .885424 12   mov   , dl                     ;eax2 余数送
00403DE0   .99            cdq
00403DE1   .F7FF          idiv    edi
00403DE3   .0FB641 01   movzx   eax, byte ptr             ;eax4=name第2位
00403DE7   .83C8 44       or      eax, 44                        ;eax4=eax4 or 44
00403DEA   .8BCF          mov   ecx, edi                         ;ecx=0A
00403DEC   .885424 17   mov   , dl                     ;eax3 余数送
00403DF0   .99            cdq
00403DF1   .F7F9          idiv    ecx
00403DF3   .33C0          xor   eax, eax                         ;eax=0
00403DF5   .33C9          xor   ecx, ecx                         ;ecx=0
00403DF7   .85ED          test    ebp, ebp                         ;name长度是否为0
00403DF9   .885424 18   mov   , dl                     ;eax4 余数 送
00403DFD   .7E 20         jle   short 00403E1F
00403DFF   .90            nop
00403E00   >85C9          test    ecx, ecx
00403E02   .0F8C D2000000 jl      00403EDA
00403E08   .8B7E 70       mov   edi,
00403E0B   .3B4F F4       cmp   ecx,
00403E0E   .0F8F C6000000 jg      00403EDA
00403E14   .0FB6140F      movzx   edx, byte ptr
00403E18   .03C2          add   eax, edx
00403E1A   .41            inc   ecx
00403E1B   .3BCD          cmp   ecx, ebp
00403E1D   .^ 7C E1         jl      short 00403E00                   ;这个循环是把name的ASCII码相加,结果送eax
00403E1F   >8B4E 74       mov   ecx,                   ;code地址送ecx
00403E22   .8B51 F4       mov   edx,                      ;是code长度
00403E25   .85D2          test    edx, edx
00403E27   .7D 0A         jge   short 00403E33                   ;长度大于0,就跳
00403E29   .68 57000780   push    80070057
00403E2E   .E8 FDD5FFFF   call    00401430
00403E33   >8A11          mov   dl,                         ;code第1位送dl
00403E35   .8B4E 74       mov   ecx,                   ;code地址送ecx
00403E38   .8379 F4 01    cmp   dword ptr , 1             ;code长度与1比较
00403E3C   .885424 19   mov   , dl                     ;code第1位送
00403E40   .7D 0A         jge   short 00403E4C
00403E42   .68 57000780   push    80070057
00403E47   .E8 E4D5FFFF   call    00401430
00403E4C   >8A49 01       mov   cl,                       ;code第2位送cl
00403E4F   .8B7E 74       mov   edi,                   ;code地址送edi
00403E52   .884C24 13   mov   , cl                     ;code第2位送
00403E56   .837F F4 02    cmp   dword ptr , 2             ;code长度大于2,就跳
00403E5A   .7D 0A         jge   short 00403E66
00403E5C   .68 57000780   push    80070057
00403E61   .E8 CAD5FFFF   call    00401430
00403E66   >8A4F 02       mov   cl,
00403E69   .8B7E 74       mov   edi,
00403E6C   .884C24 14   mov   , cl                     ;code第3位送
00403E70   .837F F4 03    cmp   dword ptr , 3
00403E74   .7D 0A         jge   short 00403E80
00403E76   .68 57000780   push    80070057
00403E7B   .E8 B0D5FFFF   call    00401430
00403E80   >8A4F 03       mov   cl,
00403E83   .8B7E 74       mov   edi,
00403E86   .884C24 15   mov   , cl                     ;code第4位送
00403E8A   .837F F4 04    cmp   dword ptr , 4
00403E8E   .7D 0A         jge   short 00403E9A
00403E90   .68 57000780   push    80070057
00403E95   .E8 96D5FFFF   call    00401430
00403E9A   >8A4F 04       mov   cl,                       ;code第5位送cl
00403E9D   .8B7E 74       mov   edi,
00403EA0   .837F F4 05    cmp   dword ptr , 5
00403EA4   .7D 0A         jge   short 00403EB0
00403EA6   .68 57000780   push    80070057
00403EAB   .E8 80D5FFFF   call    00401430
00403EB0   >8A5F 05       mov   bl,                       ;code第6位送bl
00403EB3   .8B7E 74       mov   edi,
00403EB6   .885C24 1A   mov   , bl                     ;code第6位送
00403EBA   .837F F4 06    cmp   dword ptr , 6
00403EBE   .7D 0A         jge   short 00403ECA
00403EC0   .68 57000780   push    80070057
00403EC5   .E8 66D5FFFF   call    00401430
00403ECA   >8A5F 06       mov   bl,                       ;code第7位送bl
00403ECD   .8B7E 74       mov   edi,
00403ED0   .885C24 1B   mov   , bl                     ;code第7位送
00403ED4   .837F F4 07    cmp   dword ptr , 7
00403ED8   .7D 0A         jge   short 00403EE4
00403EDA   >68 57000780   push    80070057
00403EDF   .E8 4CD5FFFF   call    00401430
00403EE4   >8A5F 07       mov   bl,                       ;code第8位送bl
00403EE7   .0FB67C24 16   movzx   edi, byte ptr          ;name运算部分结果
00403EEC   .0FB6D2      movzx   edx, dl                        ;code第1位 零符号扩展到edx
00403EEF   .83EA 30       sub   edx, 30
00403EF2   .3BFA          cmp   edi, edx                         ;edi=09,eax1运算余数
00403EF4   .75 48         jnz   short 00403F3E
00403EF6   .0FB65424 13   movzx   edx, byte ptr
00403EFB   .0FB67C24 12   movzx   edi, byte ptr
00403F00   .83EA 30       sub   edx, 30
00403F03   .3BFA          cmp   edi, edx                         ;edi=eax2 运算余数
00403F05      74 37         je      short 00403F3E
00403F07   .0FB65424 14   movzx   edx, byte ptr
00403F0C   .0FB67C24 17   movzx   edi, byte ptr
00403F11   .83EA 30       sub   edx, 30
00403F14   .3BFA          cmp   edi, edx                         ;edi=eax3 运算余数
00403F16      74 26         je      short 00403F3E
00403F18   .0FB65424 15   movzx   edx, byte ptr
00403F1D   .0FB67C24 18   movzx   edi, byte ptr
00403F22   .83EA 30       sub   edx, 30
00403F25   .3BFA          cmp   edi, edx                         ;edi=eax4 运算余数
00403F27      74 15         je      short 00403F3E
00403F29   .99            cdq
00403F2A   .BF 0A000000   mov   edi, 0A                        ;eax=上面name的ASCII码相加结果
00403F2F   .F7FF          idiv    edi
00403F31   .0FB6C2      movzx   eax, dl                        ;余数送eax=7
00403F34   .0FB6D1      movzx   edx, cl                        ;code第5位送edx
00403F37   .83EA 30       sub   edx, 30
00403F3A   .3BC2          cmp   eax, edx
00403F3C   .74 3A         je      short 00403F78
00403F3E   >807C24 19 39cmp   byte ptr , 39            ;name第1位是否为0x39='9'
00403F43      0F85 85000000 jnz   00403FCE                         ;不等就出错
00403F49   .807C24 13 33cmp   byte ptr , 33            ;name第2位是否为0x33='3'
00403F4E      75 7E         jnz   short 00403FCE                   ;不等就出错
00403F50   .807C24 14 30cmp   byte ptr , 30            ;name第3位是否为0x30='0'
00403F55      75 77         jnz   short 00403FCE                   ;不等就出错
00403F57   .8A5424 15   mov   dl,
00403F5B   .B0 31         mov   al, 31
00403F5D   .3AD0          cmp   dl, al                           ;name第4位是否为0x31='1'
00403F5F      75 6D         jnz   short 00403FCE                   ;不等就出错
00403F61   .80F9 33       cmp   cl, 33                           ;name第5位是否为0x33='3'
00403F64      75 68         jnz   short 00403FCE                   ;不等就出错
00403F66   .384424 1A   cmp   , al                     ;name第6位是否为0x31='1'
00403F6A      75 62         jnz   short 00403FCE                   ;不等就出错
00403F6C   .807C24 1B 34cmp   byte ptr , 34            ;name第7位是否为0x34='4'
00403F71      75 5B         jnz   short 00403FCE                   ;不等就出错
00403F73   .80FB 37       cmp   bl, 37                           ;name第8位是否为0x37='7'
00403F76      75 56         jnz   short 00403FCE                   ;不等就出错
00403F78   >6A 00         push    0
00403F7A   .6A 00         push    0
00403F7C   .68 B8AE4200   push    0042AEB8                         ;registration has succeeded!
00403F81   .E8 6FFC0100   call    00423BF5
00403F86   .8B7E 70       mov   edi,
00403F89   .E8 D2210200   call    00426160
00403F8E   .8B40 04       mov   eax,
00403F91   .57            push    edi                              ; /Arg3
00403F92   .68 D8AA4200   push    0042AAD8                         ; |username
00403F97   .68 D0AA4200   push    0042AAD0                         ; |option
00403F9C   .8BC8          mov   ecx, eax                         ; |
00403F9E   .E8 8EFD0100   call    00423D31                         ; \MpegJoin.00423D31
00403FA3   .8B7E 74       mov   edi,
00403FA6   .E8 B5210200   call    00426160
00403FAB   .8B40 04       mov   eax,
00403FAE   .57            push    edi                              ; /Arg3
00403FAF   .68 BCAA4200   push    0042AABC                         ; |registration_code
00403FB4   .68 D0AA4200   push    0042AAD0                         ; |option
00403FB9   .8BC8          mov   ecx, eax                         ; |
00403FBB   .E8 71FD0100   call    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   0041CADF
00403FCE   >6A 00         push    0
00403FD0   .6A 00         push    0
00403FD2   .68 A0AE4200   push    0042AEA0                         ;registration failed!
00403FD7   .E8 19FC0100   call    00423BF5


--------------------------------------------------------------------------------
【经验总结】
比较简单的一个软件,明码比较.
要求:用户名大于2, 注册码长度大于8

可用的一组注册信息:
Name:vacant
Code:89917xxx(xxx代表任意字符)
万能注册码:93013147

附上C算法注册机,初学者程序写得很烂,勿见怪,请指出错误.

#include "stdio.h"
#include "conio.h"
void main()
{
    int len,i,eax;
    char name={0};
    char code={0};
    printf("Name:");
    scanf("%s",name);
    len=strlen(name);
    for(i=0;i<len;i++)
    {
   eax+=name;
   }
   code=(name|0x44)%0xA;
   code=(name|0x43)%0xA;
   code=(name|0x43)%0xA;
   code=(name|0x44)%0xA;
   code=eax%0xA;
   printf("Code:");
    for(i=0;i<8;i++)
    {
    printf("%d",code);
    }
    getch();
}

--------------------------------------------------------------------------------
【版权声明】:转载请注明作者并保持文章的完整, 谢谢!

                                                       2006年06月30日 1:20:03

野猫III 发表于 2006-6-30 23:53:34

呵呵~~学习咯!

兄弟有时间教教咱们编C++ KeyGen!

bfqyygy 发表于 2006-7-1 00:53:06

支持一下.写的很不错.适合我们新手!

wang0315 发表于 2006-7-2 21:58:22

学习!~~~~`
页: [1]
查看完整版本: MPEG Joiner V2.0.196算法分析