飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2054|回复: 0

申请加入PYG第四篇破文

[复制链接]

该用户从未签到

发表于 2006-4-10 16:52:46 | 显示全部楼层 |阅读模式
【破文标题】申请加入PYG第四篇破文
【破文作者】Fantasy
【作者邮箱】[email protected]
破解工具】peid0.94, OD1.1
【破解平台】winxp sp2
【软件名称】Floppy Zip Disk Rescue
【软件大小】450KB
【原版下载】http://www.ptshare.com/critical-seeker.html
------------------------------------------------------------------------
【软件简介】
Floppy Zip Disk Rescue is an easy-to-use tool to rescue corrupt file
from Floppy disk and ZIP disk or other peripheral devices,  It fast scans disk sectors,
rescues the damaged files and copies the correct data to hard disk as possible as it can.
The program is especially effective for corrupted digital multimedia files, audio, video,
image files, MPEG, AVI, RM, MP3, JPEG etc, and for damaged document and text files.
------------------------------------------------------------------------
【破解声明】仅供学习和交流,没有其他目的。本人菜鸟一个,失误之处敬请诸位大侠赐教!
------------------------------------------------------------------------
【破解过程】
首先peid 查壳显示Microsoft Visual C++ 7.0,无壳
OD载入,运行程序,输入信息:
用户名:fantasy
注册码:12345678(一定要8位,分析后发现)
字符插件查找错误提示:registration failed!
--------------------------------------------------------------------------------
双击来到

0041113A   >  6A 00         push    0
0041113C   .  6A 00         push    0
0041113E   .  68 E01E4400   push    00441EE0                         ;  registration failed!
---------------------------------------------------------------------------------------------------
往上看具体算法

00410E83   .  55            push    ebp                              ;  在这里下断
00410E84   .  56            push    esi                              ;  下面是软件注册码的算法
00410E85   .  57            push    edi
00410E86   .  BF 01000000   mov     edi, 1
00410E8B   .  57            push    edi
00410E8C   .  8BF1          mov     esi, ecx
00410E8E   .  E8 BFBD0100   call    0042CC52
00410E93   .  8B46 70       mov     eax, [esi+70]                    ;  把用户名放到eax中
00410E96   .  8B68 F4       mov     ebp, [eax-C]
00410E99   .  83FD 02       cmp     ebp, 2                           ;  把用户名 位数与2比较
00410E9C   .  7D 15         jge     short 00410EB3                   ;  大于2就跳 (用户名要大于2位)
00410E9E   .  6A 00         push    0
00410EA0   .  6A 00         push    0
00410EA2   .  68 3C1F4400   push    00441F3C                         ;  please input correct user name!
00410EA7   .  E8 CD5C0200   call    00436B79
00410EAC   .  5F            pop     edi
00410EAD   .  5E            pop     esi
00410EAE   .  5D            pop     ebp
00410EAF   .  83C4 0C       add     esp, 0C
00410EB2   .  C3            retn
00410EB3   >  8B4E 74       mov     ecx, [esi+74]                    ;  把 假码放到ecx中
00410EB6   .  8379 F4 08    cmp     dword ptr [ecx-C], 8             ;  把注册吗的位数 与8比较
00410EBA   .  7D 15         jge     short 00410ED1                   ;  大于8就跳 (注册吗要大于8位)
00410EBC   .  6A 00         push    0
00410EBE   .  6A 00         push    0
00410EC0   .  68 141F4400   push    00441F14                         ;  please input correct registration code!
00410EC5   .  E8 AF5C0200   call    00436B79
00410ECA   .  5F            pop     edi
00410ECB   .  5E            pop     esi
00410ECC   .  5D            pop     ebp
00410ECD   .  83C4 0C       add     esp, 0C
00410ED0   .  C3            retn
00410ED1   >  8B46 70       mov     eax, [esi+70]                    ;  把用户名放到eax中
00410ED4   .  8B48 F4       mov     ecx, [eax-C]                     ;  把注册吗放到ecx中
00410ED7   .  85C9          test    ecx, ecx
00410ED9   .  7D 0A         jge     short 00410EE5
00410EDB   .  68 57000780   push    80070057
00410EE0   .  E8 1B04FFFF   call    00401300
00410EE5   >  8A10          mov     dl, [eax]                        ;  把用户名第1个字符放到dl中
00410EE7   .  8B46 70       mov     eax, [esi+70]
00410EEA   .  3978 F4       cmp     [eax-C], edi                     ;  与1比较
00410EED   .  7D 0A         jge     short 00410EF9                   ;  大于就跳
00410EEF   .  68 57000780   push    80070057
00410EF4   .  E8 0704FFFF   call    00401300
00410EF9   >  8A40 01       mov     al, [eax+1]                      ;  把用户名第2个字符放到al中
00410EFC   .  884424 0E     mov     [esp+E], al
00410F00   .  8B46 70       mov     eax, [esi+70]
00410F03   .  8B48 F4       mov     ecx, [eax-C]
00410F06   .  85C9          test    ecx, ecx
00410F08   .  7D 0A         jge     short 00410F14
00410F0A   .  68 57000780   push    80070057
00410F0F   .  E8 EC03FFFF   call    00401300
00410F14   >  8B4E 70       mov     ecx, [esi+70]
00410F17   .  53            push    ebx
00410F18   .  8A18          mov     bl, [eax]                        ;  把用户名第1个字符放到bl中
00410F1A   .  3979 F4       cmp     [ecx-C], edi                     ;  与1比较
00410F1D   .  7D 0A         jge     short 00410F29                   ;  大于就跳
00410F1F   .  68 57000780   push    80070057
00410F24   .  E8 D703FFFF   call    00401300
00410F29   >  0FB6C2        movzx   eax, dl                          ;  把用户名第1个字符放到eax中
00410F2C   .  83C8 46       or      eax, 46                          ;  eax<-eax or 46
00410F2F   .  99            cdq                                      ;  edx 清0
00410F30   .  BF 0A000000   mov     edi, 0A                          ;  把0A放到edi中
00410F35   .  F7FF          idiv    edi                              ;  eax<-eax/0A
00410F37   .  0FB64424 12   movzx   eax, byte ptr [esp+12]           ;  把用户名第2个字符放到eax中
00410F3C   .  83C8 5A       or      eax, 5A                          ;  eax<-eax or 5A
00410F3F   .  885424 16     mov     [esp+16], dl                     
00410F43   .  99            cdq                                      ;  edx清0
00410F44   .  F7FF          idiv    edi                              ;  eax<-eax / 0A  
00410F46   .  0FB6C3        movzx   eax, bl                          ;  把用户名第1个字符放到eax中
00410F49   .  83C8 52       or      eax, 52                          ;  eax<-eax or 52
00410F4C   .  885424 12     mov     [esp+12], dl                     
00410F50   .  99            cdq
00410F51   .  F7FF          idiv    edi                              ;  eax<-eax /0A
00410F53   .  0FB641 01     movzx   eax, byte ptr [ecx+1]            ;  把用户名第2个字符放到eax中
00410F57   .  83C8 45       or      eax, 45                          ;  eax<-eax or 45
00410F5A   .  8BCF          mov     ecx, edi                         ;  把0A放到ecx中
00410F5C   .  885424 17     mov     [esp+17], dl                     ;  dl=8
00410F60   .  99            cdq                                      ;  edx清0
00410F61   .  F7F9          idiv    ecx                              ;  eax<-eax / ecx
00410F63   .  33C0          xor     eax, eax                         ;  eax 清0
00410F65   .  33C9          xor     ecx, ecx                         ;  ecx 清0
00410F67   .  85ED          test    ebp, ebp
00410F69   .  885424 18     mov     [esp+18], dl                     ;  dl=1
00410F6D   .  7E 20         jle     short 00410F8F
00410F6F   .  90            nop
00410F70   >  85C9          test    ecx, ecx
00410F72   .  0F8C D2000000 jl      0041104A                         ;  小于就跳
00410F78   .  8B7E 70       mov     edi, [esi+70]                    ;  把用户名放到edi中
00410F7B   .  3B4F F4       cmp     ecx, [edi-C]                     ;  ecx与 7(用户名个数)比较
00410F7E   .  0F8F C6000000 jg      0041104A                         ;  大于就跳
00410F84   .  0FB6140F      movzx   edx, byte ptr [edi+ecx]          ;  把用户名第1个字符放到edx中
00410F88   .  03C2          add     eax, edx                         ;  eax<-eax+edx
00410F8A   .  41            inc     ecx                              ;  ecx 加1(做记数器)
00410F8B   .  3BCD          cmp     ecx, ebp                         ;  1跟7比较 (循环条件)
00410F8D   .^ 7C E1         jl      short 00410F70                   ;  小于就跳
00410F8F   >  8B4E 74       mov     ecx, [esi+74]                    ;     把注册码放到ecx中
00410F92   .  8B51 F4       mov     edx, [ecx-C]                     ;     把注册吗的位数放到edx中
00410F95   .  85D2          test    edx, edx
00410F97   .  7D 0A         jge     short 00410FA3                   ;  大于就跳
00410F99   .  68 57000780   push    80070057
00410F9E   .  E8 5D03FFFF   call    00401300
00410FA3   >  8A11          mov     dl, [ecx]                        ;  把注册码第1位放到dl中
00410FA5   .  8B4E 74       mov     ecx, [esi+74]                    ;  把注册码放到ecx中
00410FA8   .  8379 F4 01    cmp     dword ptr [ecx-C], 1             ;  把注册码位数与1比较
00410FAC   .  885424 19     mov     [esp+19], dl
00410FB0   .  7D 0A         jge     short 00410FBC                   ;  大于就跳
00410FB2   .  68 57000780   push    80070057
00410FB7   .  E8 4403FFFF   call    00401300
00410FBC   >  8A49 01       mov     cl, [ecx+1]                      ;  把注册码第2位放到cl中
00410FBF   .  8B7E 74       mov     edi, [esi+74]                    ;  把注册码放到edi中
00410FC2   .  884C24 13     mov     [esp+13], cl
00410FC6   .  837F F4 02    cmp     dword ptr [edi-C], 2             ;  把注册码位数与2比较
00410FCA   .  7D 0A         jge     short 00410FD6                   ;  大于就跳
00410FCC   .  68 57000780   push    80070057
00410FD1   .  E8 2A03FFFF   call    00401300
00410FD6   >  8A4F 02       mov     cl, [edi+2]                      ;  把注册码第3位放到cl中
00410FD9   .  8B7E 74       mov     edi, [esi+74]                    ;  把注册码放到edi中
00410FDC   .  884C24 14     mov     [esp+14], cl
00410FE0   .  837F F4 03    cmp     dword ptr [edi-C], 3             ;  把注册码位数与3比较
00410FE4   .  7D 0A         jge     short 00410FF0                   ;  大于就跳
00410FE6   .  68 57000780   push    80070057
00410FEB   .  E8 1003FFFF   call    00401300
00410FF0   >  8A4F 03       mov     cl, [edi+3]                      ;  把注册码第4位放到cl中
00410FF3   .  8B7E 74       mov     edi, [esi+74]                    ;  把注册码放到edi中
00410FF6   .  884C24 15     mov     [esp+15], cl
00410FFA   .  837F F4 04    cmp     dword ptr [edi-C], 4             ;  把注册码位数与4比较
00410FFE   .  7D 0A         jge     short 0041100A                   ;  大于就跳
00411000   .  68 57000780   push    80070057
00411005   .  E8 F602FFFF   call    00401300
0041100A   >  8A4F 04       mov     cl, [edi+4]                      ;  把注册码第5位放到cl中
0041100D   .  8B7E 74       mov     edi, [esi+74]                    ;  把注册码放到edi中
00411010   .  837F F4 05    cmp     dword ptr [edi-C], 5             ;  把注册码位数与5比较
00411014   .  7D 0A         jge     short 00411020                   ;  大于就跳
00411016   .  68 57000780   push    80070057
0041101B   .  E8 E002FFFF   call    00401300
00411020   >  8A5F 05       mov     bl, [edi+5]                      ;  把注册码第6位放到bl中
00411023   .  8B7E 74       mov     edi, [esi+74]                    ;  把注册码放到edi中
00411026   .  885C24 1A     mov     [esp+1A], bl
0041102A   .  837F F4 06    cmp     dword ptr [edi-C], 6             ;  把注册码位数与6比较
0041102E   .  7D 0A         jge     short 0041103A                   ;  大于就跳
00411030   .  68 57000780   push    80070057
00411035   .  E8 C602FFFF   call    00401300
0041103A   >  8A5F 06       mov     bl, [edi+6]                      ;  把注册码第7位放到bl中
0041103D   .  8B7E 74       mov     edi, [esi+74]                    ;  把注册码放到edi中
00411040   .  885C24 1B     mov     [esp+1B], bl
00411044   .  837F F4 07    cmp     dword ptr [edi-C], 7             ;  把注册码位数与7比较
00411048   .  7D 0A         jge     short 00411054                   ;  大于就跳
0041104A   >  68 57000780   push    80070057
0041104F   .  E8 AC02FFFF   call    00401300
00411054   >  8A5F 07       mov     bl, [edi+7]                      ;  把注册码第8位放到bl中
00411057   .  0FB67C24 16   movzx   edi, byte ptr [esp+16]           ;  edi=2
0041105C   .  0FB6D2        movzx   edx, dl                          ;  把注册码第1位放到edx中
0041105F   .  83EA 30       sub     edx, 30                          ;  edx<-edx-30
00411062   .  3BFA          cmp     edi, edx                         ;  edi 与 edx 比较
00411064   .  75 48         jnz     short 004110AE                   ;  不相等就跳
00411066   .  0FB65424 13   movzx   edx, byte ptr [esp+13]
0041106B   .  0FB67C24 12   movzx   edi, byte ptr [esp+12]
00411070   .  83EA 30       sub     edx, 30
00411073   .  3BFA          cmp     edi, edx
00411075   .  75 37         jnz     short 004110AE
00411077   .  0FB65424 14   movzx   edx, byte ptr [esp+14]
0041107C   .  0FB67C24 17   movzx   edi, byte ptr [esp+17]
00411081   .  83EA 30       sub     edx, 30
00411084   .  3BFA          cmp     edi, edx
00411086   .  75 26         jnz     short 004110AE
00411088   .  0FB65424 15   movzx   edx, byte ptr [esp+15]
0041108D   .  0FB67C24 18   movzx   edi, byte ptr [esp+18]
00411092   .  83EA 30       sub     edx, 30
00411095   .  3BFA          cmp     edi, edx
00411097   .  75 15         jnz     short 004110AE
00411099   .  99            cdq
0041109A   .  BF 0A000000   mov     edi, 0A
0041109F   .  F7FF          idiv    edi
004110A1   .  0FB6C2        movzx   eax, dl
004110A4   .  0FB6D1        movzx   edx, cl
004110A7   .  83EA 30       sub     edx, 30
004110AA   .  3BC2          cmp     eax, edx
004110AC   .  74 36         je      short 004110E4
004110AE   >  807C24 19 39  cmp     byte ptr [esp+19], 39            ;  注册码第1位与39比较
004110B3   .  0F85 81000000 jnz     0041113A                         ;  不相等就跳 (跳就死了~~~)
004110B9   .  807C24 13 33  cmp     byte ptr [esp+13], 33            ;  注册码第2位与33比较
004110BE   .  75 7A         jnz     short 0041113A                   ;  不相等就跳 (跳就死了~~~)
004110C0   .  807C24 14 30  cmp     byte ptr [esp+14], 30            ;  注册码第3位与30比较
004110C5   .  75 73         jnz     short 0041113A                   ;  不相等就跳 (跳就死了~~~)
004110C7   .  807C24 15 31  cmp     byte ptr [esp+15], 31            ;  注册码第4位与31比较
004110CC   .  75 6C         jnz     short 0041113A                   ;  不相等就跳 (跳就死了~~~)
004110CE   .  B0 36         mov     al, 36                           ;  把36放到al 中
004110D0   .  3AC8          cmp     cl, al                           ;  注册码第5位与36比较(cl中是注册吗第5位)
004110D2   .  75 66         jnz     short 0041113A                   ;  不相等就跳 (跳就死了~~~)
004110D4   .  384424 1A     cmp     [esp+1A], al                     ;  注册码第6位与36比较
004110D8   .  75 60         jnz     short 0041113A                   ;  不相等就跳 (跳就死了~~~)
004110DA   .  384424 1B     cmp     [esp+1B], al                     ;  注册码第7位与36比较
004110DE   .  75 5A         jnz     short 0041113A                   ;  不相等就跳 (跳就死了~~~)
004110E0   .  3AD8          cmp     bl, al                           ;  注册码第8位与36比较(bl中是注册吗第8位)
004110E2   .  75 56         jnz     short 0041113A                   ;  不相等就跳 (跳就死了~~~)
004110E4   >  6A 00         push    0
004110E6   .  6A 00         push    0
004110E8   .  68 F81E4400   push    00441EF8                         ;  registration has succeeded!
004110ED   .  E8 875A0200   call    00436B79
004110F2   .  8B7E 70       mov     edi, [esi+70]
004110F5   .  E8 CE990200   call    0043AAC8
004110FA   .  8B40 04       mov     eax, [eax+4]
004110FD   .  57            push    edi                              ; /Arg3
004110FE   .  68 48104400   push    00441048                         ; |username
00411103   .  68 40104400   push    00441040                         ; |option
00411108   .  8BC8          mov     ecx, eax                         ; |
0041110A   .  E8 815B0200   call    00436C90                         ; \FZDR.00436C90
0041110F   .  8B7E 74       mov     edi, [esi+74]
00411112   .  E8 B1990200   call    0043AAC8
00411117   .  8B40 04       mov     eax, [eax+4]
0041111A   .  57            push    edi                              ; /Arg3
0041111B   .  68 2C104400   push    0044102C                         ; |registration_code
00411120   .  68 40104400   push    00441040                         ; |option
00411125   .  8BC8          mov     ecx, eax                         ; |
00411127   .  E8 645B0200   call    00436C90                         ; \FZDR.00436C90
0041112C   .  5B            pop     ebx
0041112D   .  5F            pop     edi
0041112E   .  8BCE          mov     ecx, esi
00411130   .  5E            pop     esi
00411131   .  5D            pop     ebp
00411132   .  83C4 0C       add     esp, 0C
00411135   .  E9 C4010200   jmp     004312FE
0041113A   >  6A 00         push    0
0041113C   .  6A 00         push    0
0041113E   .  68 E01E4400   push    00441EE0                         ;  registration failed!
00411143   .  E8 315A0200   call    00436B79
00411148   .  5B            pop     ebx
00411149   .  5F            pop     edi
0041114A   .  5E            pop     esi
0041114B   .  5D            pop     ebp
0041114C   .  83C4 0C       add     esp, 0C
0041114F   .  C3            retn


【破解总结】

这个软件的算法并不是太复杂,只是要注意用户名要>=2位,注册吗要>=8位
作者在前面把用户名一位一位的处理不知道有什么用,注册吗与用户名没有关系。
只要看下面就能算出注册吗
具体的

1,2,3,4,位必须为(39,33,30,31)十进制就是9301
5,6,7,8,位必须为36十进制就是6

用户名:fantasy
注册吗:93016666

另软件的注册信息放在
[HKEY_CURRENT_USER\Software\DigitByteStudio\FZDR\Option]
"username"="fantasy"
"registration_code"="93016666"

删了就可以在研究了~~~软件是4月2号的,应该算新的吧。
PYG19周年生日快乐!
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表