【破文标题】 Flash Saver Maker未完成的破解
【破文作者】 YILIAOCAO
【使用工具】 olldbg
【破解平台】 WinXP
【软件名称】 Flash Saver Maker 1.68版(实际是1.62版)
【下载地址】 http://www.skycn.com/soft/6322.html或http://count.skycn.com/softdownload.php?id=6322&url=http://gdfs.driversky.com/down/flashchs.exe
【软件简介】 Flash Saver Maker 制作屏幕保护的步骤简单之极,只要添加您所需要的Flash 文件(扩展名为.swf或者.exe均可)就行!如果对flash中原有的音乐不满意,可以
将其屏蔽掉,再加入其他的音乐文件(类型包括Wave、MIDI和Mp3),调整好文件播放的先后顺序,最后退出时保存一下设置。这样,您的Flash屏幕保护就完成了。此外,还可以制
作带安装的屏幕保护程序,发送给您的亲人和朋友。
【软件大小】1893 KB
【软件语言】简体中文
【应用平台】Win9x/NT/2000/XP
【破解目的】 玩玩。。。
因为想用单位网页上的FLASH动画作屏保,所以在网上找找。发现这个东东。安装后打开看到有使用时间限制。不觉得如何好用。还比不上e族百变屏保等等。一时好奇,想看看注
册后的使用效果如何。所以用来试试。
【破解声明】谨以此文献给和我一样的菜菜鸟!
--------------------------------------------------------------------------------
[破解过程]
安装后得到SaverLaunch.exe。用OD打开,运行,显示“进程已终止”(--我这里已过了试用期)。同时弹出要求注册窗口,点“确定”后出现注册窗口。
用OD的“附加”查找,找到
“未命名的窗口, 条目 41
进程=00000ADC
名称=flashsaver
窗口=Flash Saver Maker
路径=C:\WINDOWS\system32\flashsaver.scr
”
点“附加”进入到flashsaver模块。运行,弹出要求注册窗口,点“确定”后出现注册窗口。
=========================================
因为程序与使用时间有关,所以可以从时间方面去考虑相关思路。
但最后决定从信息入手。
所以OD中输入bpx messageBoxA,在窗口中输入用户名“cyl”及注册码“a123a",点“确定”后断下:
004A7628 |. E8 4306F6FF CALL <JMP.&user32.MessageBoxA> ; \MessageBoxA --断下的地方。
004A762D |> 33C0 XOR EAX,EAX
004A762F |. 5A POP EDX
004A7630 |. 59 POP ECX
004A7631 |. 59 POP ECX
004A7632 |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
004A7635 |. 68 5C764A00 PUSH flashsav.004A765C
004A763A |> 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-20]
004A763D |. BA 02000000 MOV EDX,2
004A7642 |. E8 45C8F5FF CALL flashsav.00403E8C
004A7647 |. 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18]
004A764A |. BA 04000000 MOV EDX,4
004A764F |. E8 38C8F5FF CALL flashsav.00403E8C
004A7654 \. C3 RETN
004A7655 .^ E9 22C2F5FF JMP flashsav.0040387C
004A765A .^ EB DE JMP SHORT flashsav.004A763A
004A765C . 8BE5 MOV ESP,EBP
004A765E . 5D POP EBP
004A765F . C3 RETN
断下后,在堆栈中已显示:
0012FB94 000B0556 |hOwner = 000B0556 ('Flash Saver Maker',class='TRegisterForm')
0012FB98 00EBE750 |Text = "注册码错误"
0012FB9C 00470F80 |Title = "Flash Saver Maker"
0012FBA0 00000040 \Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
0012FBA4 0012FD98 指向下一个 SEH 记录的指针
0012FBA8 004A7655 SE处理程序
0012FBAC 0012FBD0
0012FBB0 00EBE750
0012FBB4 00000000
0012FBB8 00000000
0012FBBC 00000000
0012FBC0 00E92E20 ASCII "cyl"
0012FBC4 00EA53B0 ASCII "a123a"
=================================
晕。说明假码已经被识破了。
======================================
重新开始。
这次用Ctrl+F8。断下:
004C4300 |. E8 6B39F4FF CALL <JMP.&user32.MessageBoxA> ; \MessageBoxA
004C4305 |. 83F8 02 CMP EAX,2
004C4308 |. 0F84 B4000000 JE flashsav.004C43C2
004C430E |. 33C9 XOR ECX,ECX
004C4310 |. B2 01 MOV DL,1
004C4312 |. A1 70724A00 MOV EAX,DWORD PTR DS:[4A7270]
004C4317 |. E8 7464F8FF CALL flashsav.0044A790
004C431C |. 8B15 287C4C00 MOV EDX,DWORD PTR DS:[4C7C28] ; flashsav.004CF928
004C4322 |. 8902 MOV DWORD PTR DS:[EDX],EAX
004C4324 |. A1 287C4C00 MOV EAX,DWORD PTR DS:[4C7C28]
004C4329 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
004C432B |. 8B10 MOV EDX,DWORD PTR DS:[EAX]
004C432D |. FF92 D8000000 CALL DWORD PTR DS:[EDX+D8] ; (初始 cpu 选择)
004C4333 |. 48 DEC EAX
004C4334 |. 0F85 88000000 JNZ flashsav.004C43C2
004C433A |. A1 287C4C00 MOV EAX,DWORD PTR DS:[4C7C28]
004C433F |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
004C4341 |. E8 D6EDF3FF CALL flashsav.0040311C
004C4346 |> BA 68444C00 MOV EDX,flashsav.004C4468 ; :
004C434B |. A1 E0F94C00 MOV EAX,DWORD PTR DS:[4CF9E0]
往上看一看。呵,好东东出来了:
004C426D |. B9 88444C00 MOV ECX,flashsav.004C4488 ; language.ini
004C4272 |. E8 BDFEF3FF CALL flashsav.00404134
004C4277 |. 8B4D D0 MOV ECX,DWORD PTR SS:[EBP-30]
004C427A |. B2 01 MOV DL,1
004C427C |. A1 942A4500 MOV EAX,DWORD PTR DS:[452A94]
004C4281 |. E8 5EE9F8FF CALL flashsav.00452BE4
004C4286 |. A3 ECF94C00 MOV DWORD PTR DS:[4CF9EC],EAX
004C428B |. 68 A0444C00 PUSH flashsav.004C44A0 ; flash saver maker trial version has expired.\n\n\n\ndo you want to register flash
saver maker now?
004C4290 |. 8D45 CC LEA EAX,DWORD PTR SS:[EBP-34]
004C4293 |. 50 PUSH EAX
004C4294 |. B9 08454C00 MOV ECX,flashsav.004C4508 ; uregstring
004C4299 |. BA 1C454C00 MOV EDX,flashsav.004C451C ; other
004C429E |. A1 ECF94C00 MOV EAX,DWORD PTR DS:[4CF9EC]
004C42A3 |. 8B18 MOV EBX,DWORD PTR DS:[EAX]
004C42A5 |. FF13 CALL DWORD PTR DS:[EBX]
004C42A7 |. 8B55 CC MOV EDX,DWORD PTR SS:[EBP-34]
004C42AA |. B8 DCF94C00 MOV EAX,flashsav.004CF9DC
004C42AF |. E8 08FCF3FF CALL flashsav.00403EBC
004C42B4 |. 68 2C454C00 PUSH flashsav.004C452C ; unregistered version
004C42B9 |. 8D45 C8 LEA EAX,DWORD PTR SS:[EBP-38]
004C42BC |. 50 PUSH EAX
004C42BD |. B9 4C454C00 MOV ECX,flashsav.004C454C ; uregtitle
004C42C2 |. BA 1C454C00 MOV EDX,flashsav.004C451C ; other
004C42C7 |. A1 ECF94C00 MOV EAX,DWORD PTR DS:[4CF9EC]
004C42CC |. 8B18 MOV EBX,DWORD PTR DS:[EAX]
004C42CE |. FF13 CALL DWORD PTR DS:[EBX]
004C42D0 |. 8B55 C8 MOV EDX,DWORD PTR SS:[EBP-38]
004C42D3 |. B8 D8F94C00 MOV EAX,flashsav.004CF9D8
004C42D8 |. E8 DFFBF3FF CALL flashsav.00403EBC
004C42DD |. 833D D4F94C00>CMP DWORD PTR DS:[4CF9D4],-1
004C42E4 |. 75 60 JNZ SHORT flashsav.004C4346 ; 这里避开试用结束提示窗口
004C42E6 |. 6A 21 PUSH 21
004C42E8 |. A1 D8F94C00 MOV EAX,DWORD PTR DS:[4CF9D8]
004C42ED |. E8 BAFFF3FF CALL flashsav.004042AC
004C42F2 |. 50 PUSH EAX
004C42F3 |. A1 DCF94C00 MOV EAX,DWORD PTR DS:[4CF9DC]
004C42F8 |. E8 AFFFF3FF CALL flashsav.004042AC
004C42FD |. 50 PUSH EAX ; |Text
004C42FE |. 6A 00 PUSH 0 ; |hOwner = NULL
===================================================
在004C42E4有个跳转,到004C4346。在004C42DD处下断。
并先试试把004C42E4处改为JMP。
呵,程序出来了。不象刚才因过了试用期,而老是先弹出要求注册窗口了。
GOOD。
===================================================
此时显示线程000027已终止。
点程序的“注册”,输入假码,没被断下。显示注册码错误。
呵,原来真是另起线程。
====================================================
关闭程序。用OD打开C:\WINDOWS\system32\flashsaver.scr。
运行,还是断下在
004C42DD |. 833D D4F94C00>CMP DWORD PTR DS:[4CF9D4],-1
004C42E4 75 60 JNZ SHORT flashsav.004C4346 ; 这里避开试用结束提示窗口
运行至注册窗口。输入假码。然后OD中输入bpx messageBoxA。点“确定”后断下在
004A7628 |. E8 4306F6FF CALL <JMP.&user32.MessageBoxA> ; \MessageBoxA --断下的地方。(同上文。)
往上看一看。
004A756E |. E8 719FFCFF CALL flashsav.004714E4 ; 估计为关键CALL?
004A7573 |. 84C0 TEST AL,AL
004A7575 |. 74 7A JE SHORT flashsav.004A75F1 ; 跳则为注册错误的提示
004A7577 |. 8D55 EC LEA EDX,DWORD PTR SS:[EBP-14]
004A757A |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004A757D |. 8B80 E8020000 MOV EAX,DWORD PTR DS:[EAX+2E8]
004A7583 |. E8 A8B0F8FF CALL flashsav.00432630
004A7588 |. 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]
004A758B |. 50 PUSH EAX
004A758C |. 8D55 E8 LEA EDX,DWORD PTR SS:[EBP-18]
004A758F |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004A7592 |. 8B80 E4020000 MOV EAX,DWORD PTR DS:[EAX+2E4]
004A7598 |. E8 93B0F8FF CALL flashsav.00432630
004A759D |. 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18]
004A75A0 |. 5A POP EDX
004A75A1 |. E8 EE9DFCFF CALL flashsav.00471394
004A75A6 |. 6A 40 PUSH 40
004A75A8 |. A1 107B4C00 MOV EAX,DWORD PTR DS:[4C7B10]
004A75AD |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
004A75AF |. E8 F8CCF5FF CALL flashsav.004042AC
004A75B4 |. 50 PUSH EAX
004A75B5 |. 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C]
004A75B8 |. BA 68764A00 MOV EDX,flashsav.004A7668 ; registerform.str_0
004A75BD |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004A75C0 |. 8B80 00030000 MOV EAX,DWORD PTR DS:[EAX+300]
004A75C6 |. E8 E1F5FFFF CALL flashsav.004A6BAC
004A75CB |. 8B45 E4 MOV EAX,DWORD PTR SS:[EBP-1C]
004A75CE |. E8 D9CCF5FF CALL flashsav.004042AC
004A75D3 |. 50 PUSH EAX
004A75D4 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004A75D7 |. E8 9813F9FF CALL flashsav.00438974
004A75DC |. 50 PUSH EAX ; |hOwner
004A75DD |. E8 8E06F6FF CALL <JMP.&user32.MessageBoxA> ; \MessageBoxA
004A75E2 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004A75E5 |. C780 34020000>MOV DWORD PTR DS:[EAX+234],1
004A75EF |. EB 3C JMP SHORT flashsav.004A762D
004A75F1 |> 6A 40 PUSH 40
004A75F3 |. A1 107B4C00 MOV EAX,DWORD PTR DS:[4C7B10]
004A75F8 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
004A75FA |. E8 ADCCF5FF CALL flashsav.004042AC ; (初始 cpu 选择)
004A75FF |. 50 PUSH EAX
004A7600 |. 8D4D E0 LEA ECX,DWORD PTR SS:[EBP-20]
004A7603 |. BA 84764A00 MOV EDX,flashsav.004A7684 ; registerform.str_1
004A7608 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004A760B |. 8B80 00030000 MOV EAX,DWORD PTR DS:[EAX+300]
004A7611 |. E8 96F5FFFF CALL flashsav.004A6BAC
004A7616 |. 8B45 E0 MOV EAX,DWORD PTR SS:[EBP-20]
004A7619 |. E8 8ECCF5FF CALL flashsav.004042AC
004A761E |. 50 PUSH EAX
004A761F |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004A7622 |. E8 4D13F9FF CALL flashsav.00438974
004A7627 |. 50 PUSH EAX ; |hOwner
004A7628 |. E8 4306F6FF CALL <JMP.&user32.MessageBoxA> ; \MessageBoxA
=========================================================
在(初始 cpu 选择)上面004A75F1为004A7575的跳转。
是不是有情况?
在004A756E下个断试试。
同时改为004A7575 /75 7A JNZ SHORT flashsav.004A75F1 ; 跳则为注册错误的提示
=====================================================
断下后,运行时出现:
跳转未实现
004A75F1=flashsav.004A75F1
好。一路F8下去看看。一路不断地出现用户名和注册码的假码。
看来有戏了。
至004A75DD |. E8 8E06F6FF CALL <JMP.&user32.MessageBoxA> ; \MessageBoxA
堆栈中已显示:
0012F628 13BA05A0 |hOwner = 13BA05A0 ('Flash Saver Maker',class='TRegisterForm')
0012F62C 00ED1B14 |Text = "注册成功,感谢您的注册"
0012F630 00470F80 |Title = "Flash Saver Maker"
0012F634 00000040 \Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
0012F638 0012F82C 指向下一个 SEH 记录的指针
0012F63C 004A7655 SE处理程序
0012F640 0012F664
0012F644 00000000
0012F648 00ED1B14
0012F64C 00E9A06C ASCII "cyl"
0012F650 00E9A098 ASCII "a123a"
0012F654 00EC6A6C ASCII "cyl"
0012F658 00ED6DFC ASCII "a123a"
====================================================
^_^
就是这东东了!
===============================================
再F8则弹出注册成功的窗口。
复制,另存。替换C:\WINDOWS\system32\flashsaver.scr。
重新运行。则弹出过期窗口,在注册窗口中甚至不输入任何字符,一样的注册成功。
关闭OD。
打开原来的程序SaverLaunch.exe,与上面一样,可以注册成功。
但在设置屏保时,仍然显示未注册版本。
================================================
以上的PJ,还只是成功了一小半。只是去除了有效期过了,不能使用的限制。
具体暴破,还没找到关键之处。估计有注册标志。
================================================
心得:
1、试了另起线程的对付办法。
2、对bpx messageBoxA有更多一点的体会。
3、了解了一点点TEST AL,AL这类的东东。---呵,汇编对我来说,还比E文要难得多。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)