很久没在这发文了,年终将近,纪念下郁闷的生活.

Apex MPEG VCD DVD Converter 4.94 
 
软件大小:7870KB
软件语言:英文
软件类别:国外软件/共享版/视频工具
运行环境:Win9x/Me/NT/2000/XP/2003
加入时间:2006-12-11 11:20:38
软件详细信息 
一款视频转换工具,支持一种格式转换成多种格式的功能。能转换VI, DivX,XviD, MPEG, WMV, MOV, ASF, QuickTime ,RM,RMVB为MPG,VCD,SVCD,DVD MPEG格式,能选择制作人和指定视频格式大小等,能进行视频片段的剪截并进行编码,支持批处理。  

比较简单的RSA,供练习.

加载过程中n多dll加了ASprotect壳,脚本顺便脱之.

出错提示:
0040A8D6     68 0C664300     push ApexMPEG.0043660C                   ; ASCII "Register Code or Name can be null !"

关键地方:
0040A833     50              push eax
0040A834     E8 2796FFFF     call ApexMPEG.00403E60
0040A839     83C4 04         add esp,4
0040A83C     83F8 01         cmp eax,1
0040A83F     0F85 A7000000   jnz ApexMPEG.0040A8EC

注册码长度:
00403E7C     83F9 30         cmp ecx,30
00403E7F     0F85 E5000000   jnz ApexMPEG.00403F6A

共3关,3个RSA加密:
00403EFD     8D8C24 30010000 lea ecx,dword ptr ss:[esp+130]     ; M1
00403F04     68 AC614300     push ApexMPEG.004361AC             ; ASCII "8B5F314DC132D0E1"
00403F09     51              push ecx
00403F0A     889C24 48010000 mov byte ptr ss:[esp+148],bl
00403F11     885C24 48       mov byte ptr ss:[esp+48],bl
00403F15     889C24 48020000 mov byte ptr ss:[esp+248],bl
00403F1C     E8 0FFEFFFF     call ApexMPEG.00403D30             ; RSA加密
00403F21     8D5424 38       lea edx,dword ptr ss:[esp+38]      ; M2
00403F25     68 98614300     push ApexMPEG.00436198             ; ASCII "702E902F7C6D8689"
00403F2A     52              push edx
00403F2B     8BF0            mov esi,eax                        ; 得到的加密值C1赋值给esi
00403F2D     E8 FEFDFFFF     call ApexMPEG.00403D30             ; RSA加密
00403F32     8BF8            mov edi,eax                        ; 得到的加密值C2赋值给edi
00403F34     8D8424 40020000 lea eax,dword ptr ss:[esp+240]     ; M3
00403F3B     68 98614300     push ApexMPEG.00436198             ; ASCII "702E902F7C6D8689"
00403F40     50              push eax
00403F41     E8 EAFDFFFF     call ApexMPEG.00403D30             ; RSA加密
00403F46     83C4 3C         add esp,3C                         ; 得到加密值C3=eax
00403F49     3BF3            cmp esi,ebx
00403F4B     7E 1D           jle short ApexMPEG.00403F6A
00403F4D     3BFB            cmp edi,ebx
00403F4F     7E 19           jle short ApexMPEG.00403F6A
00403F51     3BC3            cmp eax,ebx
00403F53     7E 15           jle short ApexMPEG.00403F6A
00403F55     03C6            add eax,esi                         ; C3+C1
00403F57     33C9            xor ecx,ecx
00403F59     3BC7            cmp eax,edi                         ; 和与C2比较
00403F5B     5F              pop edi
00403F5C     0F94C1          sete cl
00403F5F     5E              pop esi
00403F60     8BC1            mov eax,ecx
00403F62     5B              pop ebx
00403F63     81C4 00030000   add esp,300
00403F69     C3              retn

分3组RSA加密,第一组与第三组的加密值的和=第二组的加密值.

RSA加密过程: call ApexMPEG.00403D30
先判断是不是数字:
00403DA6     8B8424 1C010000 mov eax,dword ptr ss:[esp+11C]
00403DAD     0FBE0C06        movsx ecx,byte ptr ds:[esi+eax]
00403DB1     51              push ecx
00403DB2     FF15 C4E54200   call dword ptr ds:[<&MSVCRT.isxdigit>]    ; MSVCRT.isxdigit
00403DB8     83C4 04         add esp,4
00403DBB     85C0            test eax,eax
00403DBD     0F84 82000000   je ApexMPEG.00403E45
00403DC3     46              inc esi
00403DC4     3BF7            cmp esi,edi
00403DC6   ^ 7C DE           jl short ApexMPEG.00403DA6

再判断M是否大于N:
00403DF7     55              push ebp                            ; N
00403DF8     53              push ebx                            ; M
00403DF9     E8 421E0200     call ApexMPEG.00425C40              ; M是否大于N?
00403DFE     83C4 20         add esp,20
00403E01     83F8 FF         cmp eax,-1
00403E04     75 3F           jnz short ApexMPEG.00403E45         ; 大于就over?

加密:
00403E0A     56              push esi                            ; 存放加密值
00403E0B     55              push ebp                            ; N
00403E0C     57              push edi
00403E0D     53              push ebx                            ; M
00403E0E     E8 1D2E0200     call ApexMPEG.00426C30

转换为十六进制:
00403E4A     FF15 C0E54200   call dword ptr ds:[<&MSVCRT.atoi>]  ; MSVCRT.atol
eax的值就是转换后的值.

这里注意,如果M太大,不加密直接退出.
另外如果加密值不能转换为字符的话,eax值也为0.

反推注册码:
E=10001
N1=8B5F314DC132D0E1
D1=137F2D964D3F145
N2=702E902F7C6D8689
D2=E36D82E01011DD
N3=702E902F7C6D8689
D3=E36D82E01011DD

假设加密值分别为:32323232,38383838,,36363636
那么M1=01090CC1B0B76B8A,M2=4856DEF4EC488E63,M3=5B5E714BDE87AB7E

注册码:
01090CC1B0B76B8A4856DEF4EC488E635B5E714BDE87AB7E

注册码与用户名无关.
写入注册表:
HKCU\SOFTWARE\Apex\Apex MPEG Converter\user\(Default)
HKCU\SOFTWARE\Apex\Apex MPEG Converter\code\(Default)