首页
社区
课程
招聘
[原创]Flash Saver Maker未完成的破解---献给菜菜鸟
发表于: 2006-4-17 00:39 5141

[原创]Flash Saver Maker未完成的破解---献给菜菜鸟

2006-4-17 00:39
5141
【破文标题】 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期)

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 196
活跃值: (135)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
2
支持..
2006-4-17 11:47
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
先收藏了

以后再看
支持一下
2006-4-17 13:01
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这个太简单了吧。多努力
2006-4-17 13:40
0
雪    币: 234
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
004A7518  /.  55            push    ebp                              ;  点击注册
004A7519  |.  8BEC          mov     ebp, esp
004A751B  |.  33C9          xor     ecx, ecx
004A751D  |.  51            push    ecx
004A751E  |.  51            push    ecx
004A751F  |.  51            push    ecx
004A7520  |.  51            push    ecx
004A7521  |.  51            push    ecx
004A7522  |.  51            push    ecx
004A7523  |.  51            push    ecx
004A7524  |.  51            push    ecx
004A7525  |.  8955 F8       mov     [ebp-8], edx
004A7528  |.  8945 FC       mov     [ebp-4], eax
004A752B  |.  33C0          xor     eax, eax
004A752D  |.  55            push    ebp
004A752E  |.  68 55764A00   push    004A7655
004A7533  |.  64:FF30       push    dword ptr fs:[eax]
004A7536  |.  64:8920       mov     fs:[eax], esp
004A7539  |.  8B45 FC       mov     eax, [ebp-4]
004A753C  |.  33D2          xor     edx, edx
004A753E  |.  8990 34020000 mov     [eax+234], edx                   ;  TRegisterForm.ModalResult : TModalResult
004A7544  |.  8D55 F4       lea     edx, [ebp-C]
004A7547  |.  8B45 FC       mov     eax, [ebp-4]
004A754A  |.  8B80 E8020000 mov     eax, [eax+2E8]                   ;  TRegisterForm.Edit2 : TEdit
004A7550  |.  E8 DBB0F8FF   call    00432630                         ;  TControl.GetText(TControl):TCaption;
004A7555  |.  8B45 F4       mov     eax, [ebp-C]
004A7558  |.  50            push    eax
004A7559  |.  8D55 F0       lea     edx, [ebp-10]
004A755C  |.  8B45 FC       mov     eax, [ebp-4]
004A755F  |.  8B80 E4020000 mov     eax, [eax+2E4]                   ;  TRegisterForm.Edit1 : TEdit
004A7565  |.  E8 C6B0F8FF   call    00432630                         ;  TControl.GetText(TControl):TCaption;
004A756A  |.  8B45 F0       mov     eax, [ebp-10]
004A756D  |.  5A            pop     edx
004A756E  |.  E8 719FFCFF   call    004714E4                         ;  注册码分析调用
004A7573  |.  84C0          test    al, al
004A7575  |.  74 7A         je      short 004A75F1                   ;  爆破点
004A7577  |.  8D55 EC       lea     edx, [ebp-14]
004A757A  |.  8B45 FC       mov     eax, [ebp-4]
004A757D  |.  8B80 E8020000 mov     eax, [eax+2E8]                   ;  TRegisterForm.Edit2 : TEdit
004A7583  |.  E8 A8B0F8FF   call    00432630                         ;  TControl.GetText(TControl):TCaption;
004A7588  |.  8B45 EC       mov     eax, [ebp-14]
004A758B  |.  50            push    eax
004A758C  |.  8D55 E8       lea     edx, [ebp-18]
004A758F  |.  8B45 FC       mov     eax, [ebp-4]
004A7592  |.  8B80 E4020000 mov     eax, [eax+2E4]                   ;  TRegisterForm.Edit1 : TEdit
004A7598  |.  E8 93B0F8FF   call    00432630                         ;  TControl.GetText(TControl):TCaption;
004A759D  |.  8B45 E8       mov     eax, [ebp-18]
004A75A0  |.  5A            pop     edx
004A75A1  |.  E8 EE9DFCFF   call    00471394                         ;  用户名注册码saver动作
004A75A6  |.  6A 40         push    40
004A75A8  |.  A1 107B4C00   mov     eax, [4C7B10]
004A75AD  |.  8B00          mov     eax, [eax]
004A75AF  |.  E8 F8CCF5FF   call    004042AC                         ;  @LStrToPChar;
004A75B4  |.  50            push    eax
004A75B5  |.  8D4D E4       lea     ecx, [ebp-1C]
004A75B8  |.  BA 68764A00   mov     edx, 004A7668                    ;  ASCII "RegisterForm.str_0"
004A75BD  |.  8B45 FC       mov     eax, [ebp-4]
004A75C0  |.  8B80 00030000 mov     eax, [eax+300]                   ;  TRegisterForm.BwMultiLan1 : TBwMultiLan
004A75C6  |.  E8 E1F5FFFF   call    004A6BAC
004A75CB  |.  8B45 E4       mov     eax, [ebp-1C]
004A75CE  |.  E8 D9CCF5FF   call    004042AC                         ;  @LStrToPChar;
004A75D3  |.  50            push    eax
004A75D4  |.  8B45 FC       mov     eax, [ebp-4]
004A75D7  |.  E8 9813F9FF   call    00438974                         ;  TWinControl.GetHandle(TWinControl):HWND;
004A75DC  |.  50            push    eax                              ; |hOwner
004A75DD  |.  E8 8E06F6FF   call    <jmp.&user32.MessageBoxA>        ; \MessageBoxA
004A75E2  |.  8B45 FC       mov     eax, [ebp-4]                     ;  以上调用注册成功窗口
004A75E5  |.  C780 34020000>mov     dword ptr [eax+234], 1           ;  TRegisterForm.ModalResult : TModalResult
004A75EF  |.  EB 3C         jmp     short 004A762D
004A75F1  |>  6A 40         push    40
004A75F3  |.  A1 107B4C00   mov     eax, [4C7B10]
004A75F8  |.  8B00          mov     eax, [eax]
004A75FA  |.  E8 ADCCF5FF   call    004042AC                         ;  @LStrToPChar;
004A75FF  |.  50            push    eax
004A7600  |.  8D4D E0       lea     ecx, [ebp-20]
004A7603  |.  BA 84764A00   mov     edx, 004A7684                    ;  ASCII "RegisterForm.str_1"
004A7608  |.  8B45 FC       mov     eax, [ebp-4]
004A760B  |.  8B80 00030000 mov     eax, [eax+300]                   ;  TRegisterForm.BwMultiLan1 : TBwMultiLan
004A7611  |.  E8 96F5FFFF   call    004A6BAC
004A7616  |.  8B45 E0       mov     eax, [ebp-20]
004A7619  |.  E8 8ECCF5FF   call    004042AC                         ;  @LStrToPChar;
004A761E  |.  50            push    eax
004A761F  |.  8B45 FC       mov     eax, [ebp-4]
004A7622  |.  E8 4D13F9FF   call    00438974                         ;  TWinControl.GetHandle(TWinControl):HWND;
004A7627  |.  50            push    eax                              ; |hOwner
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     fs:[eax], edx
004A7635  |.  68 5C764A00   push    004A765C
004A763A  |>  8D45 E0       lea     eax, [ebp-20]
004A763D  |.  BA 02000000   mov     edx, 2
004A7642  |.  E8 45C8F5FF   call    00403E8C                         ;  @LStrArrayClr;
004A7647  |.  8D45 E8       lea     eax, [ebp-18]
004A764A  |.  BA 04000000   mov     edx, 4
004A764F  |.  E8 38C8F5FF   call    00403E8C                         ;  @LStrArrayClr;
004A7654  \.  C3            retn

004714E4   $  55            push    ebp
004714E5   .  8BEC          mov     ebp, esp
004714E7   .  83C4 E8       add     esp, -18
004714EA   .  33C9          xor     ecx, ecx
004714EC   .  894D F4       mov     [ebp-C], ecx
004714EF   .  894D F0       mov     [ebp-10], ecx
004714F2   .  8955 FC       mov     [ebp-4], edx
004714F5   .  8945 E8       mov     [ebp-18], eax
004714F8   .  8B45 E8       mov     eax, [ebp-18]
004714FB   .  E8 9C2DF9FF   call    0040429C                         ;  @LStrAddRef;
00471500   .  8B45 FC       mov     eax, [ebp-4]
00471503   .  E8 942DF9FF   call    0040429C                         ;  @LStrAddRef;
00471508   .  33C0          xor     eax, eax
0047150A   .  55            push    ebp
0047150B   .  68 F9154700   push    004715F9                         ;  string
00471510   .  64:FF30       push    dword ptr fs:[eax]
00471513   .  64:8920       mov     fs:[eax], esp
00471516   .  C645 FB 00    mov     byte ptr [ebp-5], 0
0047151A   .  8B45 FC       mov     eax, [ebp-4]
0047151D   .  E8 C62BF9FF   call    004040E8                         ;  @LStrLen:Integer;
00471522   .  83F8 10       cmp     eax, 10                          ;  注册码长度与0x10对比
00471525   .  0F85 A3000000 jnz     004715CE                         ;  不等就over
0047152B   .  B2 01         mov     dl, 1
0047152D   .  A1 A0094700   mov     eax, [4709A0]
00471532   .  E8 BDF4FFFF   call    004709F4                         ;  @Class/@TObject.Create/TBase64
00471537   .  8945 EC       mov     [ebp-14], eax
0047153A   .  33C0          xor     eax, eax
0047153C   .  55            push    ebp
0047153D   .  68 C7154700   push    004715C7
00471542   .  64:FF30       push    dword ptr fs:[eax]
00471545   .  64:8920       mov     fs:[eax], esp
00471548   .  8D45 F4       lea     eax, [ebp-C]
0047154B   .  8B55 FC       mov     edx, [ebp-4]
0047154E   .  E8 AD29F9FF   call    00403F00                         ;  @LStrLAsg;
00471553   .  8D45 F0       lea     eax, [ebp-10]
00471556   .  E8 0D29F9FF   call    00403E68                         ;  @LStrClr(String;String);
0047155B   .  8D4D F0       lea     ecx, [ebp-10]
0047155E   .  8B55 F4       mov     edx, [ebp-C]
00471561   .  8B45 EC       mov     eax, [ebp-14]
00471564   .  E8 F3F7FFFF   call    00470D5C                         ;  注册码解密分析调用
00471569   .  8B55 F0       mov     edx, [ebp-10]                    ;  解密码入edx
0047156C   .  B8 10164700   mov     eax, 00471610                    ;  0x46入eax='F'
00471571   .  E8 5E2EF9FF   call    004043D4                         ;  @LStrPos;
00471576   .  85C0          test    eax, eax
00471578   .  74 37         je      short 004715B1                   ;  如果eax=0则over
0047157A   .  8B55 F0       mov     edx, [ebp-10]
0047157D   .  B8 1C164700   mov     eax, 0047161C                    ;  0x53入eax='S'
00471582   .  E8 4D2EF9FF   call    004043D4                         ;  @LStrPos;
00471587   .  85C0          test    eax, eax
00471589   .  74 26         je      short 004715B1
0047158B   .  8B55 F0       mov     edx, [ebp-10]
0047158E   .  B8 28164700   mov     eax, 00471628                    ;  0x5a入eax='Z'
00471593   .  E8 3C2EF9FF   call    004043D4                         ;  @LStrPos;
00471598   .  85C0          test    eax, eax
0047159A   .  74 15         je      short 004715B1
0047159C   .  8B55 F0       mov     edx, [ebp-10]
0047159F   .  B8 34164700   mov     eax, 00471634                    ;  0x4c入eax='L'
004715A4   .  E8 2B2EF9FF   call    004043D4                         ;  @LStrPos;
004715A9   .  85C0          test    eax, eax
004715AB   .  74 04         je      short 004715B1
004715AD   .  C645 FB 01    mov     byte ptr [ebp-5], 1
004715B1   >  33C0          xor     eax, eax
004715B3   .  5A            pop     edx
004715B4   .  59            pop     ecx
004715B5   .  59            pop     ecx
004715B6   .  64:8910       mov     fs:[eax], edx
004715B9   .  68 CE154700   push    004715CE
004715BE   >  8B45 EC       mov     eax, [ebp-14]
004715C1   .  E8 561BF9FF   call    0040311C                         ;  TObject.Free(TObject);
004715C6   .  C3            retn

00470D5C  /$  55            push    ebp
00470D5D  |.  8BEC          mov     ebp, esp
00470D5F  |.  83C4 E0       add     esp, -20
00470D62  |.  53            push    ebx
00470D63  |.  56            push    esi
00470D64  |.  57            push    edi
00470D65  |.  33DB          xor     ebx, ebx
00470D67  |.  895D E0       mov     [ebp-20], ebx
00470D6A  |.  895D E4       mov     [ebp-1C], ebx
00470D6D  |.  895D E8       mov     [ebp-18], ebx
00470D70  |.  895D EC       mov     [ebp-14], ebx
00470D73  |.  8BF9          mov     edi, ecx
00470D75  |.  8955 F8       mov     [ebp-8], edx
00470D78  |.  8945 FC       mov     [ebp-4], eax
00470D7B  |.  8B45 F8       mov     eax, [ebp-8]
00470D7E  |.  E8 1935F9FF   call    0040429C                         ;  @LStrAddRef;
00470D83  |.  33C0          xor     eax, eax
00470D85  |.  55            push    ebp
00470D86  |.  68 2D0F4700   push    00470F2D                         ;  string
00470D8B  |.  64:FF30       push    dword ptr fs:[eax]
00470D8E  |.  64:8920       mov     fs:[eax], esp
00470D91  |.  837D F8 00    cmp     dword ptr [ebp-8], 0
00470D95  |.  75 07         jnz     short 00470D9E
00470D97  |.  33DB          xor     ebx, ebx
00470D99  |.  E9 6C010000   jmp     00470F0A
00470D9E  |>  8BC7          mov     eax, edi
00470DA0  |.  E8 C330F9FF   call    00403E68                         ;  @LStrClr(String;String);
00470DA5  |.  8B45 FC       mov     eax, [ebp-4]
00470DA8  |.  8078 04 00    cmp     byte ptr [eax+4], 0
00470DAC  |.  74 19         je      short 00470DC7
00470DAE  |.  8D4D EC       lea     ecx, [ebp-14]
00470DB1  |.  8B55 F8       mov     edx, [ebp-8]
00470DB4  |.  8B45 FC       mov     eax, [ebp-4]
00470DB7  |.  E8 F0FEFFFF   call    00470CAC                         ;  字符串move
00470DBC  |.  8B55 EC       mov     edx, [ebp-14]
00470DBF  |.  8D45 F8       lea     eax, [ebp-8]
00470DC2  |.  E8 3931F9FF   call    00403F00                         ;  @LStrLAsg;
00470DC7  |>  8B45 F8       mov     eax, [ebp-8]
00470DCA  |.  E8 1933F9FF   call    004040E8                         ;  @LStrLen:Integer;
00470DCF  |.  8945 F4       mov     [ebp-C], eax
00470DD2  |.  8B45 F4       mov     eax, [ebp-C]
00470DD5  |.  25 03000080   and     eax, 80000003
00470DDA  |.  79 05         jns     short 00470DE1
00470DDC  |.  48            dec     eax
00470DDD  |.  83C8 FC       or      eax, FFFFFFFC
00470DE0  |.  40            inc     eax
00470DE1  |>  85C0          test    eax, eax
00470DE3  |.  74 07         je      short 00470DEC
00470DE5  |.  B3 03         mov     bl, 3
00470DE7  |.  E9 1E010000   jmp     00470F0A
00470DEC  |>  33F6          xor     esi, esi
00470DEE  |>  46            /inc     esi                             ;  此循环解密注册码
00470DEF  |.  8B45 F8       |mov     eax, [ebp-8]
00470DF2  |.  8A5C30 FF     |mov     bl, [eax+esi-1]                 ;  注册码第1位入bl
00470DF6  |.  8D4D F3       |lea     ecx, [ebp-D]
00470DF9  |.  8BD3          |mov     edx, ebx                        ;  第1位asctohex入edx
00470DFB  |.  8B45 FC       |mov     eax, [ebp-4]
00470DFE  |.  E8 49FCFFFF   |call    00470A4C                        ;  base64表查询得到结果A
00470E03  |.  84C0          |test    al, al
00470E05  |.  75 07         |jnz     short 00470E0E
00470E07  |.  B3 02         |mov     bl, 2
00470E09  |.  E9 FC000000   |jmp     00470F0A
00470E0E  |>  46            |inc     esi
00470E0F  |.  8B45 F8       |mov     eax, [ebp-8]
00470E12  |.  8A5C30 FF     |mov     bl, [eax+esi-1]                 ;  注册码第2位入bl
00470E16  |.  8D4D F2       |lea     ecx, [ebp-E]
00470E19  |.  8BD3          |mov     edx, ebx                        ;  第2位asctohex入edx
00470E1B  |.  8B45 FC       |mov     eax, [ebp-4]
00470E1E  |.  E8 29FCFFFF   |call    00470A4C                        ;  base64表查询得到结果B
00470E23  |.  84C0          |test    al, al
00470E25  |.  75 07         |jnz     short 00470E2E
00470E27  |.  B3 02         |mov     bl, 2
00470E29  |.  E9 DC000000   |jmp     00470F0A
00470E2E  |>  8A5D F3       |mov     bl, [ebp-D]                     ;  A入bl
00470E31  |.  C1E3 02       |shl     ebx, 2                          ;  ebx shl 2=ebx X 0x4
00470E34  |.  33C0          |xor     eax, eax
00470E36  |.  8A45 F2       |mov     al, [ebp-E]                     ;  B入al
00470E39  |.  C1E8 04       |shr     eax, 4                          ;  eax shr 4=ebx / 0x10
00470E3C  |.  02D8          |add     bl, al                          ;  bl+al
00470E3E  |.  8D45 E8       |lea     eax, [ebp-18]
00470E41  |.  8BD3          |mov     edx, ebx
00470E43  |.  E8 C831F9FF   |call    00404010                        ;  @LStrFromChar(String;String;Char);
00470E48  |.  8B55 E8       |mov     edx, [ebp-18]
00470E4B  |.  8BC7          |mov     eax, edi
00470E4D  |.  E8 9E32F9FF   |call    004040F0                        ;  @LStrCat;
00470E52  |.  46            |inc     esi
00470E53  |.  8B45 F8       |mov     eax, [ebp-8]
00470E56  |.  8A5C30 FF     |mov     bl, [eax+esi-1]                 ;  注册码第3位入bl
00470E5A  |.  80FB 24       |cmp     bl, 24
00470E5D  |.  75 1F         |jnz     short 00470E7E
00470E5F  |.  8B45 F4       |mov     eax, [ebp-C]
00470E62  |.  48            |dec     eax
00470E63  |.  3BF0          |cmp     esi, eax
00470E65  |.  74 07         |je      short 00470E6E
00470E67  |.  B3 04         |mov     bl, 4
00470E69  |.  E9 9C000000   |jmp     00470F0A
00470E6E  |>  8B45 F8       |mov     eax, [ebp-8]
00470E71  |.  803C30 24     |cmp     byte ptr [eax+esi], 24
00470E75  |.  74 40         |je      short 00470EB7
00470E77  |.  B3 05         |mov     bl, 5
00470E79  |.  E9 8C000000   |jmp     00470F0A
00470E7E  |>  8D4D F3       |lea     ecx, [ebp-D]
00470E81  |.  8BD3          |mov     edx, ebx
00470E83  |.  8B45 FC       |mov     eax, [ebp-4]
00470E86  |.  E8 C1FBFFFF   |call    00470A4C                        ;  base64表查询得到结果C
00470E8B  |.  84C0          |test    al, al
00470E8D  |.  75 04         |jnz     short 00470E93
00470E8F  |.  B3 02         |mov     bl, 2
00470E91  |.  EB 77         |jmp     short 00470F0A
00470E93  |>  8A5D F2       |mov     bl, [ebp-E]                     ;  B入bl
00470E96  |.  C1E3 04       |shl     ebx, 4                          ;  ebx shl 4=ebx X 0x10
00470E99  |.  33C0          |xor     eax, eax
00470E9B  |.  8A45 F3       |mov     al, [ebp-D]                     ;  C入al
00470E9E  |.  C1E8 02       |shr     eax, 2                          ;  eax shr 2=eax / 0x4
00470EA1  |.  02D8          |add     bl, al                          ;  bl+al
00470EA3  |.  8D45 E4       |lea     eax, [ebp-1C]
00470EA6  |.  8BD3          |mov     edx, ebx
00470EA8  |.  E8 6331F9FF   |call    00404010                        ;  @LStrFromChar(String;String;Char);
00470EAD  |.  8B55 E4       |mov     edx, [ebp-1C]
00470EB0  |.  8BC7          |mov     eax, edi
00470EB2  |.  E8 3932F9FF   |call    004040F0                        ;  @LStrCat;
00470EB7  |>  46            |inc     esi
00470EB8  |.  8B45 F8       |mov     eax, [ebp-8]
00470EBB  |.  8A5C30 FF     |mov     bl, [eax+esi-1]                 ;  注册码第4位入bl
00470EBF  |.  80FB 24       |cmp     bl, 24
00470EC2  |.  75 09         |jnz     short 00470ECD
00470EC4  |.  3B75 F4       |cmp     esi, [ebp-C]
00470EC7  |.  74 36         |je      short 00470EFF
00470EC9  |.  B3 04         |mov     bl, 4
00470ECB  |.  EB 3D         |jmp     short 00470F0A
00470ECD  |>  8D4D F2       |lea     ecx, [ebp-E]
00470ED0  |.  8BD3          |mov     edx, ebx
00470ED2  |.  8B45 FC       |mov     eax, [ebp-4]
00470ED5  |.  E8 72FBFFFF   |call    00470A4C                        ;  base64表查询得到结果D
00470EDA  |.  84C0          |test    al, al
00470EDC  |.  75 04         |jnz     short 00470EE2
00470EDE  |.  B3 02         |mov     bl, 2
00470EE0  |.  EB 28         |jmp     short 00470F0A
00470EE2  |>  8A5D F3       |mov     bl, [ebp-D]                     ;  C入bl
00470EE5  |.  C1E3 06       |shl     ebx, 6                          ;  ebx shl 6=ebx X 0x40
00470EE8  |.  025D F2       |add     bl, [ebp-E]                     ;  bl+D
00470EEB  |.  8D45 E0       |lea     eax, [ebp-20]
00470EEE  |.  8BD3          |mov     edx, ebx
00470EF0  |.  E8 1B31F9FF   |call    00404010                        ;  @LStrFromChar(String;String;Char);
00470EF5  |.  8B55 E0       |mov     edx, [ebp-20]
00470EF8  |.  8BC7          |mov     eax, edi
00470EFA  |.  E8 F131F9FF   |call    004040F0                        ;  @LStrCat;
00470EFF  |>  3B75 F4       |cmp     esi, [ebp-C]
00470F02  |.^ 0F8C E6FEFFFF \jl      00470DEE
00470F08  |.  33DB          xor     ebx, ebx
00470F0A  |>  33C0          xor     eax, eax
00470F0C  |.  5A            pop     edx
00470F0D  |.  59            pop     ecx
00470F0E  |.  59            pop     ecx
00470F0F  |.  64:8910       mov     fs:[eax], edx
00470F12  |.  68 340F4700   push    00470F34
00470F17  |>  8D45 E0       lea     eax, [ebp-20]
00470F1A  |.  BA 04000000   mov     edx, 4
00470F1F  |.  E8 682FF9FF   call    00403E8C
00470F24  |.  8D45 F8       lea     eax, [ebp-8]
00470F27  |.  E8 3C2FF9FF   call    00403E68
00470F2C  \.  C3            retn
综合一下:
注册码必需为16位,
base64表:
@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
首次循环esi=1
注册码第1,2位asctohex查询base64表得到结果A,B;
(A X 0x4)+(B / 0x10);hextostr
注册码第3位asctohex查询base64表得到结果C;
(B X 0x10)+(C / 0x4);hextostr
注册码第4位asctohex查询base64表得到结果D;
(C X 0x40)+D;hextostr
得到第一组解密码M1;

第二次循环esi=esi+4,每次循环位数+4
注册码第5,6位asctohex查询base64表得到结果A,B;
(A shl 2)+(B shl 4);
注册码第7位asctohex查询base64表得到结果C;
(B shl 4)+(C shl 2);
注册码第8位asctohex查询base64表得到结果D;
(C shl 6)+D;
得到第二组解密码M2;

第三次循环
注册码第9,10位asctohex查询base64表得到结果A,B;
(A shl 2)+(B shl 4);
注册码第11位asctohex查询base64表得到结果C;
(B shl 4)+(C shl 2);
注册码第12位asctohex查询base64表得到结果D;
(C shl 6)+D;
得到第三组解密码M3;

第四次循环
注册码第13,14位asctohex查询base64表得到结果A,B;
(A shl 2)+(B shl 4);
注册码第15位asctohex查询base64表得到结果C;
(B shl 4)+(C shl 2);
注册码第16位asctohex查询base64表得到结果D;
(C shl 6)+D;
得到第四组解密码M4;

最后进行加密字符串(12位)与字符串特征码(FSZL)依次扫描以及比较
ascII码30-39,41-5A,61-7A
FSZL对应46 53 5A 4C
假定注册码第4,8,12,16位查询base64表得出结果D(假设D=01)+(C X 0x40)依次=FSZL,每四位一组的前两位先不管;
第一组;46=6+(1 X 0x40), 那么第三位=B,第四位=G
第二组;53=13+(1 X 0x40),那么第七位=B,第八位=T
第三组;5A=1A+(1 X 0x40),那么第十一位=B,第十二位=a
第四组;4C=C+(1 X 0x40), 那么第十五位=B,第十六位=M
假设注册码为:00BG00BT00Ba00BM
得到解密码:xxxFXXXSXXXZXXXL
注册成功.
随机还有N种,只要解密码种包含FSZL即可.自己去算吧.
2006-4-17 14:44
0
游客
登录 | 注册 方可回帖
返回
//