- UID
- 9910
注册时间2006-3-22
阅读权限20
最后登录1970-1-1
以武会友
该用户从未签到
|
【破文标题】申请加入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号的,应该算新的吧。 |
|