破解软件:Gif2swf V2.1版
下载网址:gz2.onlinedown.net
破解难度:易
破解工具:TRW1.22,PWdasm黄金版
软件说明:GIF2SWF是一个可以把gif文件转换Flash的swf文件的小工具,包括有WINDOWS及DOS模式两种版本,可以轻易转换大量的图形文件。
同以往一样,运行程序,任意填入用户名:ShenGe和注册码:12345678,下BPX HMEMCPY,点注册,?#@$%^!没反应,断不下来,厉害!再试GETDLGITEMTEXTA,GETWINDOWTEXTA,还是断不下来,见鬼!用PWdasm反汇编看看,幸运的是它没加壳,查找字串发现有"Congratulations",它由404197和4079D4及407A10这3处有关键跳转
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004079D4(C)
|
:004079DF 83FF01 cmp edi, 00000001
:004079E2 5F pop edi
:004079E3 0F85A5000000 jne 00407A8E
:004079E9 E842BDFFFF call 00403730
:004079EE 85C0 test eax, eax
:004079F0 0F8485000000 je 00407A7B
:004079F6 6A00 push 00000000
:004079F8 8BCB mov ecx, ebx
:004079FA C7056CC5410001000000 mov dword ptr [0041C56C], 00000001
* Reference To: MFC42.Ordinal:0A55, Ord:0A55h
|
:00407A04 E8A17A0000 Call 0040F4AA
:00407A09 A168C54100 mov eax, dword ptr [0041C568]
:00407A0E 85C0 test eax, eax
:00407A10 743A je 00407A4C <---关键跳转!
:00407A12 A1E03A4100 mov eax, dword ptr [00413AE0]
:00407A17 6A00 push 00000000
:00407A19 6A00 push 00000000
:00407A1B 6810010000 push 00000110
:00407A20 50 push eax
* Reference To: USER32.SendMessageA, Ord:0214h
|
:00407A21 FF1500044100 Call dword ptr [00410400]
:00407A27 6A40 push 00000040
* Possible StringData Ref from Data Obj ->"Congratulations"
|
:00407A29 6800374100 push 00413700
* Possible StringData Ref from Data Obj ->"GIF2SWF has been successfuly registered "
->"!"
|
:00407A2E 68D4364100 push 004136D4
:00407A33 6A00 push 00000000
我们再在TRW中下BPX 407A10,运行,@!#$%!~,还是没断下来,再仔细看看,发现在0167:407A10上面的4079F0处和4079E3处也有跳转,管它的,先试试!下BPX 4079E9,Good Luck!断下来了!小样儿,看我怎么治你!
......
0167:004079BF PUSH EDI
0167:004079C0 MOV ECX,ESI
0167:004079C2 MOV DWORD [ESP+18],FFFFFFFF
0167:004079CA CALL NEAR [EAX+C0]
0167:004079D0 TEST ESI,ESI
0167:004079D2 MOV EDI,EAX
0167:004079D4 JZ 004079DF
0167:004079D6 MOV EDX,[ESI]
0167:004079D8 PUSH BYTE +01
0167:004079DA MOV ECX,ESI
0167:004079DC CALL NEAR [EDX+04]
0167:004079DF CMP EDI,BYTE +01
0167:004079E2 POP EDI
0167:004079E3 JNZ NEAR 00407A8E
0167:004079E9 CALL 00403730 <---我们在此下断,关键的Call,跟进
0167:004079EE TEST EAX,EAX
0167:004079F0 JZ NEAR 00407A7B
0167:004079F6 PUSH BYTE +00
0167:004079F8 MOV ECX,EBX
0167:004079FA MOV DWORD [0041C56C],01
0167:00407A04 CALL MFC42!ord_00000A55
0167:00407A09 MOV EAX,[0041C568]
0167:00407A0E TEST EAX,EAX
0167:00407A10 JZ 00407A4C
0167:00407A12 MOV EAX,[00413AE0]
0167:00407A17 PUSH BYTE +00
0167:00407A19 PUSH BYTE +00
0167:00407A1B PUSH DWORD 0110
0167:00407A20 PUSH EAX
0167:00407A21 CALL USER32!SendMessageA
0167:00407A27 PUSH BYTE +40
0167:00407A29 PUSH DWORD 00413700
0167:00407A2E PUSH DWORD 004136D4
0167:00407A33 PUSH BYTE +00
0167:00407A35 CALL USER32!MessageBoxA <---OK!注册成功!
0167:00407A3B POP ESI
0167:00407A3C POP EBX
0167:00407A3D MOV ECX,[ESP+04]
0167:00407A41 MOV [FS:00],ECX
0167:00407A48 ADD ESP,BYTE +10
0167:00407A4B RET
0167:00407A4C PUSH BYTE +40
0167:00407A4E PUSH DWORD 00413700
0167:00407A53 PUSH DWORD 004136D4
0167:00407A58 PUSH BYTE +00
0167:00407A5A CALL USER32!MessageBoxA
0167:00407A60 PUSH BYTE +00
0167:00407A62 CALL 00403250
0167:00407A67 ADD ESP,BYTE +04
0167:00407A6A POP ESI
0167:00407A6B POP EBX
0167:00407A6C MOV ECX,[ESP+04]
0167:00407A70 MOV [FS:00],ECX
0167:00407A77 ADD ESP,BYTE +10
0167:00407A7A RET
0167:00407A7B PUSH BYTE +30
0167:00407A7D PUSH DWORD 004136C4
0167:00407A82 PUSH DWORD 00413678
0167:00407A87 MOV ECX,EBX
0167:00407A89 CALL MFC42!ord_00001080 <---Bad boy!注册出错!
0167:00407A8E MOV ECX,[ESP+0C]
0167:00407A92 POP ESI
0167:00407A93 POP EBX
0167:00407A94 MOV [FS:00],ECX
0167:00407A9B ADD ESP,BYTE +10
0167:00407A9E RET
跟进上面的那个关键Call,我们看到如下代码:
0167:00403730 PUSH BYTE -01
0167:00403732 PUSH DWORD 0040F9F8
0167:00403737 MOV EAX,[FS:00]
0167:0040373D PUSH EAX
0167:0040373E MOV [FS:00],ESP
0167:00403745 SUB ESP,BYTE +08
0167:00403748 PUSH ECX
0167:00403749 MOV ECX,ESP
0167:0040374B MOV [ESP+04],ESP
0167:0040374F PUSH DWORD 00413AD8
0167:00403754 CALL MFC42!ord_00000217
0167:00403759 PUSH ECX
0167:0040375A MOV DWORD [ESP+18],00
0167:00403762 MOV ECX,ESP
0167:00403764 MOV [ESP+0C],ESP
0167:00403768 PUSH DWORD 00413ADC
0167:0040376D CALL MFC42!ord_00000217
0167:00403772 MOV DWORD [ESP+18],FFFFFFFF
0167:0040377A CALL 004035B0 <---关键的Call,跟进
0167:0040377F ADD ESP,BYTE +08
0167:00403782 TEST EAX,EAX
0167:00403784 JNZ 004037CA <---关键跳转!
0167:00403786 MOV ECX,00413ADC
0167:0040378B CALL MFC42!ord_0000104B
0167:00403790 PUSH EAX
0167:00403791 PUSH DWORD 0041356C
0167:00403796 CALL 00403490
0167:0040379B ADD ESP,BYTE +08
0167:0040379E MOV ECX,00413AD8
0167:004037A3 CALL MFC42!ord_0000104B
0167:004037A8 PUSH EAX
0167:004037A9 PUSH DWORD 00413558
0167:004037AE CALL 00403490
0167:004037B3 ADD ESP,BYTE +08
0167:004037B6 MOV EAX,01 <---EAX=1,走到这可以收工了!
0167:004037BB MOV ECX,[ESP+08]
0167:004037BF MOV [FS:00],ECX
0167:004037C6 ADD ESP,BYTE +14
0167:004037C9 RET
0167:004037CA MOV ECX,[ESP+08]
0167:004037CE XOR EAX,EAX <---EAX=0,走到这就完了
0167:004037D0 MOV [FS:00],ECX
0167:004037D7 ADD ESP,BYTE +14
0167:004037DA RET
跟进上面的Call,来到如下代码:
0167:004035B0 PUSH BYTE -01
0167:004035B2 PUSH DWORD 0040F9E0
0167:004035B7 MOV EAX,[FS:00]
0167:004035BD PUSH EAX
0167:004035BE MOV [FS:00],ESP
0167:004035C5 SUB ESP,BYTE +68
0167:004035C8 PUSH EBX
0167:004035C9 PUSH ESI
0167:004035CA PUSH EDI
0167:004035CB LEA ECX,[ESP+84] <---[ECX]中为我们输入的用户名
0167:004035D2 MOV DWORD [ESP+7C],01
0167:004035DA CALL MFC42!ord_0000106C <---此Call将输入的用户名转换成大写字符
0167:004035DF LEA ECX,[ESP+84]
0167:004035E6 CALL MFC42!ord_0000104B <---取转换后的用户名
0167:004035EB LEA ECX,[ESP+88]
0167:004035F2 MOV ESI,EAX
0167:004035F4 CALL MFC42!ord_0000104B <---取输入的注册码
0167:004035F9 MOV EBX,EAX
0167:004035FB MOV EDI,ESI
0167:004035FD OR ECX,BYTE -01
0167:00403600 XOR EAX,EAX
0167:00403602 REPNE SCASB
0167:00403604 NOT ECX
0167:00403606 DEC ECX
0167:00403607 MOV [ESP+0C],EBX
0167:0040360B JZ NEAR 004036ED
0167:00403611 MOV EDI,EBX
0167:00403613 OR ECX,BYTE -01
0167:00403616 REPNE SCASB
0167:00403618 NOT ECX
0167:0040361A DEC ECX
0167:0040361B JZ NEAR 004036ED
0167:00403621 PUSH EBP
0167:00403622 MOV EDI,ESI
0167:00403624 OR ECX,BYTE -01
0167:00403627 XOR EBP,EBP
0167:00403629 REPNE SCASB
0167:0040362B NOT ECX
0167:0040362D DEC ECX
0167:0040362E CMP ECX,BYTE +20 <---比较用户名位数是否大于32,谁会用这么长的用户名!
0167:00403631 JNG 00403638
0167:00403633 MOV ECX,20
0167:00403638 XOR ESI,ESI <---ESI=0
0167:0040363A TEST ECX,ECX
0167:0040363C JNG 00403666
0167:0040363E MOV EAX,[ESP+88] <---取转换后的用户名到EAX中
0167:00403645 MOV BL,[ESI+EAX] <---按位取用户名的单个字符值到BL中
0167:00403648 MOV EAX,00163EF7 <---置EAX值为163EF7H
0167:0040364D MOVSX EDI,BL
0167:00403650 CDQ
0167:00403651 IDIV EDI
0167:00403653 MOVSX EDX,BL
0167:00403656 ADD EAX,ESI <---商与位数相加,注意第1位为0
0167:00403658 IMUL EAX,EDX <---再与字符值相乘
0167:0040365B ADD EBP,EAX <---结果累加到ESP中
0167:0040365D INC ESI
0167:0040365E CMP ESI,ECX <---是否取完所有字符
0167:00403660 JL 0040363E
0167:00403662 MOV EBX,[ESP+10] <---取输入的假注册码到EBX中
0167:00403666 ADD EBP,0085D9ED <---上面累加到EBP的值再加0085D9EDH,此时?EBP可看到真码
0167:0040366C LEA EAX,[ESP+14]
0167:00403670 PUSH EBP
0167:00403671 PUSH DWORD 00413554
0167:00403676 PUSH EAX
0167:00403677 CALL MSVCRT!sprintf <---十六进制转换成十进制,将EBP中值转换成十进制值
0167:0040367D ADD ESP,BYTE +0C
0167:00403680 MOV ESI,EBX <---EBX中为我们输入的假码
0167:00403682 LEA EAX,[ESP+14] <---取正确注册码到EAX中,下D EAX即可看到正确注册码
0167:00403686 POP EBP
0167:00403687 MOV DL,[EAX] <---按位取正确注册码
0167:00403689 MOV BL,[ESI] <---按位取输入的假码
0167:0040368B MOV CL,DL
0167:0040368D CMP DL,BL <---比较是否相等
0167:0040368F JNZ 004036AF
0167:00403691 TEST CL,CL <---判断是否取完
0167:00403693 JZ 004036AB
0167:00403695 MOV DL,[EAX+01] <---按位取正确注册码下一位
0167:00403698 MOV BL,[ESI+01] <---按位取输入的假码下一位
0167:0040369B MOV CL,DL
0167:0040369D CMP DL,BL
0167:0040369F JNZ 004036AF <---比较是否相等
0167:004036A1 ADD EAX,BYTE +02
0167:004036A4 ADD ESI,BYTE +02
0167:004036A7 TEST CL,CL <---判断是否取完
0167:004036A9 JNZ 00403687
0167:004036AB XOR ESI,ESI <---ESI=0
0167:004036AD JMP SHORT 004036B4
0167:004036AF SBB ESI,ESI <---ESI=0
0167:004036B1 SBB ESI,BYTE -01 <---ESI=1
0167:004036B4 LEA ECX,[ESP+84]
0167:004036BB MOV BYTE [ESP+7C],00
0167:004036C0 CALL MFC42!ord_00000320
0167:004036C5 LEA ECX,[ESP+88]
0167:004036CC MOV DWORD [ESP+7C],FFFFFFFF
0167:004036D4 CALL MFC42!ord_00000320
0167:004036D9 MOV EAX,ESI <---置EAX中的值用以控制跳转,它由ESI中的值决定
0167:004036DB POP EDI
0167:004036DC POP ESI
0167:004036DD POP EBX
0167:004036DE MOV ECX,[ESP+68]
0167:004036E2 MOV [FS:00],ECX
0167:004036E9 ADD ESP,BYTE +74
0167:004036EC RET
该程序注册成功后将注册信息保存在注册表的
“HKEY_LOCAL_MACHINE/Software/GIF2SWF”中
OK!收工!
我得到的注册码为:
用户名:ShenGe
注册码:17520444
如果是一切还能从前 把如果能再说一遍
我仍愿意再许下心愿 陪着你直到永远
相关视频
相关阅读 Mac访问Windows共享文件夹Windows 7正版系统验证方法windows 8.1系统版本号查看方法Windows 8.1系统电话激活时无法输入微软返回代码解决方法Windows 8如何调整屏幕分辨率windows8.1磁盘占用100%解决方法Mac双系统如何删除Boot Camp安装的Windows分区Apple教你如何在Mac 上运行 Windows
热门文章 去除winrar注册框方法
最新文章
比特币病毒怎么破解 比去除winrar注册框方法
华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据
人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程
查看所有0条评论>>