【破解作者】 农夫

【破解工具】 Olldbg1.10 、Peid0.93

【破解平台】 win2000 sp4 

【软件名称】 轻松网页特效1.2

【下载页面】 http://www.skycn.com/soft/21840.html

【软件大小】 2531 KB

【软件介绍】 这是一款功能强大的网页制作辅助软件。特效多达数百种。软件的界面美观新颖精致,使用简单方便,极易上手。
        支持背景音乐播放,击键音效和退出音效,是同类软件中特效数目和功能最齐全的网页特效软件之一!是建设网站设计网页的首选。


【破解声明】 仅供学习和交流,没有其他目的。失误之处敬请诸位大侠赐教!

【破解过程】

    PEiD0.93查壳,显示为Microsoft Visual Basic 5.0 / 6.0,没有加壳。
运行主程序,输入用户名和注册码,注册,程序会单出重新启动校验的提示。
用OllyDbg加载主程序,根据VB程序的特点下断点:bp rtcMsgBox,F9运行,断下,
按Ctrl+F9程序弹出提示对话框,确定,程序返回到0086D16B处:


0086D165 . FF15 60104000 call dword ptr ds:[<&MSVBVM60.#595>] ; MSVBVM60.rtcMsgBox
0086D16B . 8D95 48FFFFFF lea edx,dword ptr ss:[ebp-B8]
0086D171 . 8D85 58FFFFFF lea eax,dword ptr ss:[ebp-A8]
0086D177 . 52 push edx
0086D178 . 8D8D 68FFFFFF lea ecx,dword ptr ss:[ebp-98]
0086D17E . 50 push eax
0086D17F . 8D95 78FFFFFF lea edx,dword ptr ss:[ebp-88]


    往上找一直到本段程序的入口处,得下面的程序段,在0086CA7D处下断点。
重新运行程序,输入用户名:abcdefghij,注册码:1234567890,注册,断下。


0086CA7D . 50            push eax
0086CA7E . 8D45 98       lea eax,dword ptr ss:[ebp-68]
0086CA81 . 50            push eax
0086CA82 . FF15 58104000 call dword ptr ds:[<&MSVBVM60.__vbaObjSet>] ; MSVBVM60.__vbaObjSet
0086CA88 . 8BF8          mov edi,eax
0086CA8A . 8D55 E8       lea edx,dword ptr ss:[ebp-18]
0086CA8D . 52            push edx
0086CA8E . 57            push  edi
0086CA8F . 8B0F          mov ecx,dword ptr ds:[edi]
0086CA91 . FF91 A0000000 call dword ptr ds:[ecx+A0]
0086CA97 . 3BC6          cmp eax,esi
0086CA99 . DBE2          fclex
0086CA9B . 7D 12         jge short EasyAnge.0086CAAF
0086CA9D . 68 A0000000   push 0A0
0086CAA2 . 68 3C6D4000   push EasyAnge.00406D3C
0086CAA7 . 57            push edi
0086CAA8 . 50            push eax
0086CAA9 . FF15 48104000 call dword ptr ds:[<&MSVBVM60.__vbaHresultCh>; MSVBVM60.__vbaHresultCheckObj
0086CAAF > 8B03          mov eax,dword ptr ds:[ebx]
0086CAB1 . 53            push ebx
0086CAB2 . FF90 10030000 call dword ptr ds:[eax+310]
0086CAB8 . 8D4D 94       lea ecx,dword ptr ss:[ebp-6C]
0086CABB . 50            push eax
0086CABC . 51            push ecx
0086CABD . FF15 58104000 call dword ptr ds:[<&MSVBVM60.__vbaObjSet>]  ; MSVBVM60.__vbaObjSet
0086CAC3 . 8BF8          mov edi,eax
0086CAC5 . 8D45 E0       lea eax,dword ptr ss:[ebp-20]
0086CAC8 . 50            push eax
0086CAC9 . 57            push edi
0086CACA . 8B17          mov edx,dword ptr ds:[edi]
0086CACC . FF92 A0000000 call dword ptr ds:[edx+A0]
0086CAD2 . 3BC6          cmp eax,esi
0086CAD4 . DBE2          fclex
0086CAD6 . 7D 12         jge short EasyAnge.0086CAEA
0086CAD8 . 68 A0000000   push 0A0
0086CADD . 68 3C6D4000   push EasyAnge.00406D3C
0086CAE2 . 57            push edi
0086CAE3 . 50            push eax
0086CAE4 . FF15 48104000 call dword ptr ds:[<&MSVBVM60.__vbaHresultCh>; MSVBVM60.__vbaHresultCheckObj
0086CAEA > 8B4D E0       mov ecx,dword ptr ss:[ebp-20]                 ;ECX为存放输入的用户名首地址
0086CAED . 51            push ecx
0086CAEE . FF15 74114000 call dword ptr ds:[<&MSVBVM60.#581>]         ; MSVBVM60.rtcR8ValFromBstr
0086CAF4 . 8B13          mov edx,dword ptr ds:[ebx]
0086CAF6 . 53            push ebx
0086CAF7 . DD9D 00FFFFFF fstp qword ptr ss:[ebp-100]
0086CAFD . FF92 18030000 call dword ptr ds:[edx+318]
0086CB03 . 50            push eax
0086CB04 . 8D45 90       lea eax,dword ptr ss:[ebp-70]
0086CB07 . 50            push eax
0086CB08 . FF15 58104000 call dword ptr ds:[<&MSVBVM60.__vbaObjSet>] ; MSVBVM60.__vbaObjSet
0086CB0E . 8BF8          mov edi,eax
0086CB10 . 8D55 CC       lea edx,dword ptr ss:[ebp-34]
0086CB13 . 52            push edx
0086CB14 . 57            push edi
0086CB15 . 8B0F          mov ecx,dword ptr ds:[edi]
0086CB17 . FF51 50       call dword ptr ds:[ecx+50]
0086CB1A . 3BC6          cmp eax,esi
0086CB1C . DBE2          fclex
0086CB1E . 7D 0F         jge short EasyAnge.0086CB2F
0086CB20 . 6A 50         push 50
0086CB22 . 68 4C684000   push EasyAnge.0040684C
0086CB27 . 57            push edi
0086CB28 . 50            push eax
0086CB29 . FF15 48104000 call dword ptr ds:[<&MSVBVM60.__vbaHresultCh>; MSVBVM60.__vbaHresultCheckObj
0086CB2F > 8B03          mov eax,dword ptr ds:[ebx]
0086CB31 . 53            push ebx
0086CB32 . FF90 18030000 call dword ptr ds:[eax+318]
0086CB38 . 8D4D 8C       lea ecx,dword ptr ss:[ebp-74]
0086CB3B . 50            push eax
0086CB3C . 51            push ecx
0086CB3D . FF15 58104000 call dword ptr ds:[<&MSVBVM60.__vbaObjSet>] ; MSVBVM60.__vbaObjSet
0086CB43 . 8BF8          mov edi,eax
0086CB45 . 8D45 BC       lea eax,dword ptr ss:[ebp-44]
0086CB48 . 50            push eax
0086CB49 . 57            push edi
0086CB4A . 8B17          mov edx,dword ptr ds:[edi]
0086CB4C . FF52 50       call dword ptr ds:[edx+50]
0086CB4F . 3BC6          cmp eax,esi
0086CB51 . DBE2          fclex
0086CB53 . 7D 0F         jge short EasyAnge.0086CB64
0086CB55 . 6A 50         push 50
0086CB57 . 68 4C684000   push EasyAnge.0040684C
0086CB5C . 57            push edi
0086CB5D . 50            push eax
0086CB5E . FF15 48104000 call dword ptr ds:[<&MSVBVM60.__vbaHresultCh>; MSVBVM60.__vbaHresultCheckObj
0086CB64 > 8B4D BC       mov ecx,dword ptr ss:[ebp-44]                ;ECX为存放机器码的首地址
0086CB67 . 51            push ecx
0086CB68 . FF15 74114000 call dword ptr ds:[<&MSVBVM60.#581>]         ; MSVBVM60.rtcR8ValFromBstr
0086CB6E . 8B13          mov edx,dword ptr ds:[ebx]
0086CB70 . 53            push ebx
0086CB71 . DD9D F8FEFFFF fstp qword ptr ss:[ebp-108]
0086CB77 . FF92 18030000 call dword ptr ds:[edx+318]
0086CB7D . 50            push eax
0086CB7E . 8D45 88       lea eax,dword ptr ss:[ebp-78]
0086CB81 . 50            push eax
0086CB82 . FF15 58104000 call dword ptr ds:[<&MSVBVM60.__vbaObjSet>]  ; MSVBVM60.__vbaObjSet
0086CB88 . 8BF8          mov edi,eax
0086CB8A . 8D55 A8       lea edx,dword ptr ss:[ebp-58]
0086CB8D . 52            push edx
0086CB8E . 57            push edi
0086CB8F . 8B0F          mov ecx,dword ptr ds:[edi]
0086CB91 . FF51 50       call dword ptr ds:[ecx+50]
0086CB94 . 3BC6          cmp eax,esi
0086CB96 . DBE2          fclex
0086CB98 . 7D 0F         jge short EasyAnge.0086CBA9
0086CB9A . 6A 50         push 50
0086CB9C . 68 4C684000   push EasyAnge.0040684C
0086CBA1 . 57            push edi
0086CBA2 . 50            push eax
0086CBA3 . FF15 48104000 call dword ptr ds:[<&MSVBVM60.__vbaHresultCh>; MSVBVM60.__vbaHresultCheckObj
0086CBA9 > 8B45 E8       mov eax,dword ptr ss:[ebp-18]                ;EAX为存放用户名的首地址
0086CBAC . 6A 06         push 6
0086CBAE . 68 787B4000   push EasyAnge.00407B78                       ; UNICODE "Q8"
0086CBB3 . 50            push eax
0086CBB4 . FF15 20104000 call dword ptr ds:[<&MSVBVM60.__vbaLenBstr>] ; MSVBVM60.__vbaLenBstr
0086CBBA . 50            push eax                                     ;取用户名长度“0A”于EAX
0086CBBB . FF15 10104000 call dword ptr ds:[<&MSVBVM60.__vbaStrI4>]   ; MSVBVM60.__vbaStrI4 将用户名长度转换成十制数“10”
0086CBC1 . 8B35 54114000 mov esi,dword ptr ds:[<&MSVBVM60.__vbaStrMov>; MSVBVM60.__vbaStrMove
0086CBC7 . 8BD0          mov edx,eax                                  ;转换成的十制数放于EDX
0086CBC9 . 8D4D E4       lea ecx,dword ptr ss:[ebp-1C]
0086CBCC . FFD6          call esi                                     ; <&MSVBVM60.__vbaStrMove> 将长度转存
0086CBCE . 8B3D 40104000 mov edi,dword ptr ds:[<&MSVBVM60.__vbaStrCat>; MSVBVM60.__vbaStrCat
0086CBD4 . 50            push eax
0086CBD5 . FFD7          call edi                                    ; <&MSVBVM60.__vbaStrCat> 将“Q8”和长度“10”相接成“Q810”
0086CBD7 . 8BD0          mov edx,eax ;EDX=“Q8”+“10”
0086CBD9 . 8D4D DC       lea ecx,dword ptr ss:[ebp-24]
0086CBDC . FFD6          call esi                                     ;将“Q810”转存
0086CBDE . 8B8D 04FFFFFF mov ecx,dword ptr ss:[ebp-FC]
0086CBE4 . 8B95 00FFFFFF mov edx,dword ptr ss:[ebp-100]
0086CBEA . 50            push eax
0086CBEB . 51            push ecx
0086CBEC . 52            push edx
0086CBED . FF15 B4104000 call dword ptr ds:[<&MSVBVM60.__vbaStrR8>]   ; MSVBVM60.__vbaStrR8
0086CBF3 . 8BD0          mov edx,eax
0086CBF5 . 8D4D D8       lea ecx,dword ptr ss:[ebp-28]
0086CBF8 . FFD6          call esi
0086CBFA . 50            push eax
0086CBFB . FFD7          call edi                                     ;将“Q810”后加一个“0”,成“Q8100”
0086CBFD . 8BD0          mov edx,eax                                  ;EDX=“Q810”+“0”
0086CBFF . 8D4D D4       lea ecx,dword ptr ss:[ebp-2C]
0086CC02 . FFD6          call esi                                     ;将“Q8100”转存
0086CC04 . 50            push eax
0086CC05 . 68 847B4000   push EasyAnge.00407B84                       ; UNICODE "e4h9kt"
0086CC0A . FFD7          call edi                                     ;将“Q8100”和“e4h9kt”相接成“Q8100e4h9kt”
0086CC0C . 8BD0          mov edx,eax                                  ;EDX=“Q8100”+“e4h9kt”
0086CC0E . 8D4D D0       lea ecx,dword ptr ss:[ebp-30]
0086CC11 . FFD6          call esi
0086CC13 . 50            push eax
0086CC14 . FF15 44114000 call dword ptr ds:[<&MSVBVM60.#616>]         ; MSVBVM60.rtcLeftCharBstr 取“Q8100e4h9kt”左边的6个字符
0086CC1A . 8BD0          mov edx,eax                                  ;EDX=“Q8100e4h9kt”左6=“Q8100e”
0086CC1C . 8D4D C8       lea ecx,dword ptr ss:[ebp-38]
0086CC1F . FFD6          call esi                                     ;将“Q8100e”转存
0086CC21 . 50            push eax
0086CC22 . 8B45 CC       mov eax,dword ptr ss:[ebp-34]                ;取机器码于EAX
0086CC25 . 6A 02         push 2
0086CC27 . 50            push eax
0086CC28 . FF15 44114000 call dword ptr ds:[<&MSVBVM60.#616>]         ; MSVBVM60.rtcLeftCharBstr 取机器码“254416109”左边2个字符
0086CC2E . 8BD0          mov edx,eax                                  ;EDX=“254416109”左2=“25”
0086CC30 . 8D4D C4       lea ecx,dword ptr ss:[ebp-3C]
0086CC33 . FFD6          call esi                                     ;将“25”转存
0086CC35 . 50            push eax
0086CC36 . FFD7          call edi                                     ;将“Q8100e”和“25”相接成“Q8100e25”
0086CC38 . 8BD0          mov edx,eax                                  ;EDX=“Q8100e”+“25”
0086CC3A . 8D4D C0       lea ecx,dword ptr ss:[ebp-40]
0086CC3D . FFD6          call esi                                     ;将“Q8100e25”转存
0086CC3F . 50            push eax
0086CC40 . 68 987B4000   push EasyAnge.00407B98                       ; UNICODE "pk"
0086CC45 . FFD7          call edi                                     ;将“Q8100e25”和“pk”相接成“Q8100e25pk”
0086CC47 . 8BD0          mov edx,eax                                  ;EDX=“Q8100e25”+“pk”
0086CC49 . 8D4D B4       lea ecx,dword ptr ss:[ebp-4C]
0086CC4C . FFD6          call esi                                     ;将“Q8100e25pk”转存
0086CC4E . DD85 F8FEFFFF fld qword ptr ss:[ebp-108]                   ;st(0)=254416109.00000000(机器码)
0086CC54 . DC0D 90214000 fmul qword ptr ds:[402190]                   ;st(0)*DS:[402190](3.00000000)=763248327.00000000
0086CC5A . 50            push eax
0086CC5B . 6A 02         push 2
0086CC5D . 83EC 08       sub esp,8
0086CC60 . DFE0          fstsw ax                                     ;AX=机器状态字
0086CC62 . A8 0D         test al,0D                                   ;检测CRO的PE、EM和TS标志位
0086CC64 . 0F85 F9050000 jnz EasyAnge.0086D263
0086CC6A . DD1C24        fstp qword ptr ss:[esp]                      ;SS:[ESP]=st(0)
0086CC6D . FF15 B4104000 call dword ptr ds:[<&MSVBVM60.__vbaStrR8>]   ; MSVBVM60.__vbaStrR8 将“763248327.00000000”处理成“763248327”
0086CC73 . 8BD0          mov edx,eax                                  ;EDX=“763248327”
0086CC75 . 8D4D B8       lea ecx,dword ptr ss:[ebp-48]
0086CC78 . FFD6          call esi                                     ;将“763248327”转存
0086CC7A . 50            push eax
0086CC7B . FF15 44114000 call dword ptr ds:[<&MSVBVM60.#616>]         ; MSVBVM60.rtcLeftCharBstr 取“763248327”左边2个字符
0086CC81 . 8BD0          mov edx,eax                                  ;EDX=“76”
0086CC83 . 8D4D B0       lea ecx,dword ptr ss:[ebp-50]
0086CC86 . FFD6          call esi                                     ;将“76”转存
0086CC88 . 50            push eax
0086CC89 . FFD7          call edi                                     ;将“Q8100e25pk”和“76”相接成“Q8100e25pk76”
0086CC8B . 8BD0          mov edx,eax                                  ;EDX=“Q8100e25pk”+“76”
0086CC8D . 8D4D AC       lea ecx,dword ptr ss:[ebp-54]
0086CC90 . FFD6          call esi                                     ;将“Q8100e25pk76”转存
0086CC92 . 50            push eax
0086CC93 . 68 A47B4000   push EasyAnge.00407BA4                       ; UNICODE "6g"
0086CC98 . FFD7          call edi                                     ;将“Q8100e25pk76”和“6g”相接成“Q8100e25pk766g”
0086CC9A . 8BD0          mov edx,eax                                  ;EDX=Q8100e25pk76”+“6g”
0086CC9C . 8D4D A4       lea ecx,dword ptr ss:[ebp-5C]
0086CC9F . FFD6          call esi                                     ;将“Q8100e25pk766g”转存
0086CCA1 . 8B4D A8       mov ecx,dword ptr ss:[ebp-58]
0086CCA4 . 50            push eax
0086CCA5 . 6A 02         push 2
0086CCA7 . 51            push ecx
0086CCA8 . FF15 50114000 call dword ptr ds:[<&MSVBVM60.#618>]         ; MSVBVM60.rtcRightCharBstr 取机器码"254416109"右边2个字符
0086CCAE . 8BD0          mov edx,eax                                  ;EDX="09"
0086CCB0 . 8D4D A0       lea ecx,dword ptr ss:[ebp-60]
0086CCB3 . FFD6          call esi                                     ;将“09”转存
0086CCB5 . 50            push eax
0086CCB6 . FFD7          call edi                                     ;将“Q8100e25pk766g”和“09”相接成“Q8100e25pk766g09”
0086CCB8 . 8BD0          mov edx,eax                                  ;EDX=“Q8100e25pk766g”+"09"
0086CCBA . 8D4D 9C       lea ecx,dword ptr ss:[ebp-64]
0086CCBD . FFD6          call esi                                     ;将“Q8100e25pk766g09”转存
0086CCBF . 50            push eax
0086CCC0 . 68 B07B4000   push EasyAnge.00407BB0                       ; UNICODE "fe"
0086CCC5 . FFD7          call edi                                     ;将“Q8100e25pk766g09”和"fe"相接成“Q8100e25pk766g09fe”
0086CCC7 . 8BD0          mov edx,eax
0086CCC9 . B9 50108700   mov ecx,EasyAnge.00871050
0086CCCE . FFD6          call esi                                     ;将“Q8100e25pk766g09fe”转存


    到此注册码解码完成,我的注册码就是“Q8100e25pk766g09fe”。
下面是写注册表程序段,检测输入的注册码如果正确则写入注册表,
否则退出。


0086CF3E > \8B13         mov edx,dword ptr ds:[ebx]
0086CF40 . 53            push ebx
0086CF41 . FF92 14030000 call dword ptr ds:[edx+314]
0086CF47 . 50            push eax
0086CF48 . 8D45 98       lea eax,dword ptr ss:[ebp-68]
0086CF4B . 50            push eax
0086CF4C . FFD7          call edi
0086CF4E . 8BF0          mov esi,eax
0086CF50 . 8D55 E8       lea edx,dword ptr ss:[ebp-18]
0086CF53 . 52            push edx
0086CF54 . 56            push esi
0086CF55 . 8B0E          mov ecx,dword ptr ds:[esi]
0086CF57 . FF91 A0000000 call dword ptr ds:[ecx+A0]
0086CF5D . 85C0          test eax,eax
0086CF5F . DBE2          fclex
0086CF61 . 7D 12         jge short EasyAnge.0086CF75
0086CF63 . 68 A0000000   push 0A0
0086CF68 . 68 3C6D4000   push EasyAnge.00406D3C
0086CF6D . 56            push esi
0086CF6E . 50            push eax
0086CF6F . FF15 48104000 call dword ptr ds:[<&MSVBVM60.__vbaHresultCh>; MSVBVM60.__vbaHresultCheckObj
0086CF75 > 8B45 E8       mov eax,dword ptr ss:[ebp-18]                ;EAX为存放假注册码的首地址
0086CF78 . 50            push eax
0086CF79 . 68 086D4000   push EasyAnge.00406D08
0086CF7E . FF15 94104000 call dword ptr ds:[<&MSVBVM60.__vbaStrCmp>]  ; MSVBVM60.__vbaStrCmp
0086CF84 . 8BF0          mov esi,eax
0086CF86 . 8D4D E8       lea ecx,dword ptr ss:[ebp-18]
0086CF89 . F7DE          neg esi
0086CF8B . 1BF6          sbb esi,esi
0086CF8D . F7DE          neg esi
0086CF8F . F7DE          neg esi
0086CF91 . FF15 6C114000 call dword ptr ds:[<&MSVBVM60.__vbaFreeStr>] ; MSVBVM60.__vbaFreeStr
0086CF97 . 8D4D 98       lea ecx,dword ptr ss:[ebp-68]
0086CF9A . FF15 70114000 call dword ptr ds:[<&MSVBVM60.__vbaFreeObj>] ; MSVBVM60.__vbaFreeObj
0086CFA0 . 66:85F6       test si,si
0086CFA3 . 0F84 E9010000 je EasyAnge.0086D192
0086CFA9 . 8B0B          mov ecx,dword ptr ds:[ebx]
0086CFAB . 53            push ebx
0086CFAC . FF91 14030000 call dword ptr ds:[ecx+314]
0086CFB2 . 8D55 98       lea edx,dword ptr ss:[ebp-68]
0086CFB5 . 50            push eax
0086CFB6 . 52            push edx
0086CFB7 . FFD7          call edi
0086CFB9 . 8BF0          mov esi,eax
0086CFBB . 8D4D E8       lea ecx,dword ptr ss:[ebp-18]
0086CFBE . 51            push ecx
0086CFBF . 56            push esi
0086CFC0 . 8B06          mov eax,dword ptr ds:[esi]
0086CFC2 . FF90 A0000000 call dword ptr ds:[eax+A0]
0086CFC8 . 85C0          test eax,eax
0086CFCA . DBE2          fclex
0086CFCC . 7D 12         jge short EasyAnge.0086CFE0
0086CFCE . 68 A0000000   push 0A0
0086CFD3 . 68 3C6D4000   push EasyAnge.00406D3C
0086CFD8 . 56            push esi
0086CFD9 . 50            push eax
0086CFDA . FF15 48104000 call dword ptr ds:[<&MSVBVM60.__vbaHresultCh>; MSVBVM60.__vbaHresultCheckObj
0086CFE0 > 8B55 E8       mov edx,dword ptr ss:[ebp-18]                ;EAX为存放假注册码的首地址
0086CFE3 . A1 50108700   mov eax,dword ptr ds:[871050]                ;EAX为存放真注册码的首地址
0086CFE8 . 52            push edx
0086CFE9 . 50            push eax
0086CFEA . FF15 94104000 call dword ptr ds:[<&MSVBVM60.__vbaStrCmp>]  ; MSVBVM60.__vbaStrCmp 真假注册码进行比较
0086CFF0 . 8BF0          mov esi,eax
0086CFF2 . 8D4D          E8 lea ecx,dword ptr ss:[ebp-18]
0086CFF5 . F7DE          neg esi
0086CFF7 . 1BF6          sbb esi,esi
0086CFF9 . 46            inc esi
0086CFFA . F7DE          neg esi
0086CFFC . FF15 6C114000 call dword ptr ds:[<&MSVBVM60.__vbaFreeStr>] ; MSVBVM60.__vbaFreeStr
0086D002 . 8D4D 98       lea ecx,dword ptr ss:[ebp-68]
0086D005 . FF15 70114000 call dword ptr ds:[<&MSVBVM60.__vbaFreeObj>] ; MSVBVM60.__vbaFreeObj
0086D00B . 66:85F6       test si,si
0086D00E . 0F84 CA000000 je EasyAnge.0086D0DE                         ;真假注册码不相等
0086D014 . 8B0D 50108700 mov ecx,dword ptr ds:[871050]                ;相等,则将注册码写入注册表
0086D01A . 51            push ecx
0086D01B . 68 F46C4000   push EasyAnge.00406CF4                       ; UNICODE "defult"
0086D020 . 68 DC6C4000   push EasyAnge.00406CDC                       ; UNICODE "settings"
0086D025 . 68 C46C4000   push EasyAnge.00406CC4                       ; UNICODE "EasyAngel"
0086D02A . FF15 04104000 call dword ptr ds:[<&MSVBVM60.#690>]         ; MSVBVM60.rtcSaveSetting
0086D030 . 8B35 34114000 mov esi,dword ptr ds:[<&MSVBVM60.__vbaVarDup>; MSVBVM60.__vbaVarDup
0086D036 . B9 0A000000   mov ecx,0A
0086D03B . B8 04000280   mov eax,80020004
0086D040 . 898D 48FFFFFF mov dword ptr ss:[ebp-B8],ecx
0086D046 . 898D 58FFFFFF mov dword ptr ss:[ebp-A8],ecx
0086D04C . BF 08000000   mov edi,8
0086D051 . 8D95 28FFFFFF lea edx,dword ptr ss:[ebp-D8]
0086D057 . 8D8D 68FFFFFF lea ecx,dword ptr ss:[ebp-98]
0086D05D . 8985 50FFFFFF mov dword ptr ss:[ebp-B0],eax
0086D063 . 8985 60FFFFFF mov dword ptr ss:[ebp-A0],eax
0086D069 . C785 30FFFFFF 3>mov dword ptr ss:[ebp-D0],EasyAnge.00406D34
0086D073 . 89BD 28FFFFFF mov dword ptr ss:[ebp-D8],edi
0086D079 . FFD6          call esi                                    ; <&MSVBVM60.__vbaVarDup>
0086D07B . 8D95 38FFFFFF lea edx,dword ptr ss:[ebp-C8]
0086D081 . 8D8D 78FFFFFF lea ecx,dword ptr ss:[ebp-88]
0086D087 . C785 40FFFFFF 0>mov dword ptr ss:[ebp-C0],EasyAnge.00407C04
0086D091 . 89BD 38FFFFFF mov dword ptr ss:[ebp-C8],edi
0086D097 . FFD6          call esi
0086D099 . 8D95 48FFFFFF lea edx,dword ptr ss:[ebp-B8]
0086D09F . 8D85 58FFFFFF lea eax,dword ptr ss:[ebp-A8]
0086D0A5 . 52            push edx
0086D0A6 . 8D8D 68FFFFFF lea ecx,dword ptr ss:[ebp-98]
0086D0AC . 50            push eax
0086D0AD . 51            push ecx
0086D0AE . 8D95 78FFFFFF lea edx,dword ptr ss:[ebp-88]
0086D0B4 . 6A 40         push 40
0086D0B6 . 52            push edx
0086D0B7 . FF15 60104000 call dword ptr ds:[<&MSVBVM60.#595>]       ; MSVBVM60.rtcMsgBox
0086D0BD . 8D85 48FFFFFF lea eax,dword ptr ss:[ebp-B8]
0086D0C3 . 8D8D 58FFFFFF lea ecx,dword ptr ss:[ebp-A8]
0086D0C9 . 50            push eax
0086D0CA . 8D95 68FFFFFF lea edx,dword ptr ss:[ebp-98]
0086D0D0 . 51            push ecx
0086D0D1 . 8D85 78FFFFFF lea eax,dword ptr ss:[ebp-88]
0086D0D7 . 52            push edx
0086D0D8 . 50            push eax
0086D0D9 . E9 A9000000   jmp EasyAnge.0086D187



【破解总结】

    算法很简单,只是将一些字符串进行连接,唯有一处的计算是将机器ID乘以3,再积转换成字符串,
然后取其左2位。注册码与用户名字符本身没关系,只取其位数作字符串来用。最后得出的注册码如果
正确则写如注册表中:HKEY_CURRENT_USER\Software\VB and VBA Program Settings\EasyAngel\settings\defult

注册码的表达式:
(“Q8”+用户名长度+“0”+“e4h9kt”)左6位+机器ID左2位+“pk”+(机器ID*3)左2位+“6g”+机器ID右2位+“fe”


    我查看了一下其1.1版本的算法也是一样,于是就写了一个1.x的注册机,不知能否通用,请各位帮忙测试。呵呵。

  • 标 题: 答复
  • 作 者:china
  • 时 间:2005-02-17 22:49

跟着学习一遍,努力学习,天天朝上!

procedure TForm1.suiButton1Click(Sender: TObject);
var
  a, c: integer;
  id, temp, temp1, sn: string;
begin
  if (edt1.Text = '') or (edt2.Text = '') then
  begin
    Application.MessageBox('请输入ID号和用户名!', '注意', MB_OK +
      MB_ICONINFORMATION);

    Exit;
  end else
  begin
    id := edt1.text;
    a := Length(edt2.Text);
    c := Length(id);
    temp1 := IntToStr(StrToInt(id) * 3);
    temp := 'Q8' + inttostr(a) + '0' + 'e4h9kt';
    sn := temp[1] + temp[2] + temp[3] + temp[4] + temp[5] + temp[6] + id[1] + id[2] 
      + 'pk' + temp1[1] + temp1[2] + '6g' + id[c - 1] + id[c] + 'fe';
    edt3.Text := sn;
  end;
end;