binbinbin 发表于 2006-12-8 20:35:03

月光迷你钟 6.2 算法分析

【破文标题】月光迷你钟 6.2算法分析
【破文作者】XXNB
【作者邮箱】
【作者主页】http://free.ys168.com/?binbinbin7456
【破解工具】OD
【破解平台】xpsp2
【软件名称】月光迷你钟 6.2
【软件大小】2107KB
【原版下载】http://www.newhua.com/soft/44524.htm
【保护方式】
【软件简介】定时提醒、定时关机、万年历、农历查询、网络校时、真人语音报时、快速启动程序、世界时间查询一个都不能少,月光迷你钟

可通过网络校准时间,免去手工校对时间的烦恼;可按每日、每周、每月、每年、临时等方式设多个提醒任务,在您需要的时间提醒您;具有

数字石英钟和图形时钟双重界面,图形时钟还有多款界面皮肤可供选择;具有定时关机功能,可按每日、每周、每月、每年、临时等方式设定

多个定时关机任务,限制时间使用;具备真人语音报时、文字提示、农历查询、节日提醒、打印万年历和开关光驱、进行时间计算和调用系统

计算器和记事本等多种功能;支持界面透明度调整,支持鼠标穿透功能,不必担心它会妨碍您的其他工作;有QQ样式的隐藏功能;支持热键功

能,可以设置热键快速运行多种任务,包括一键真人语音报时;能快速分类调用可执行文件,还一个清洁的桌面给您;还可查看计算机使用时

间;软件小巧,功能强大,占用资源极少,是您不可多得的桌面工具。
【破解声明】向大侠们学习!!!只为学习!请尊重作者的劳动成功!
------------------------------------------------------------------------
【破解过程】

用VB专用的几个断点都能断下,我用的是“__vbastrmove”,然后可以找到注册程序处理的地方:



0049CD70   > \55       push    ebp
0049CD71   .8BEC   mov   ebp, esp
0049CD73   .83EC 14sub   esp, 14
0049CD76   .68 A6264>push    <jmp.&MSVBVM60.__vbaExceptHandle>;SE 处理程序安装
0049CD7B   .64:A1 00>mov   eax, dword ptr fs:
0049CD81   .50       push    eax
0049CD82   .64:8925 >mov   dword ptr fs:, esp
0049CD89   .81EC BC0>sub   esp, 3BC
0049CD8F   .53       push    ebx
0049CD90   .56       push    esi
0049CD91   .57       push    edi
0049CD92   .8965 ECmov   dword ptr , esp
0049CD95   .C745 F0 >mov   dword ptr , 004019A0
0049CD9C   .8B75 08mov   esi, dword ptr
0049CD9F   .8BC6   mov   eax, esi
0049CDA1   .83E0 01and   eax, 1

(中间省略很多代码。都是对机器码字符串的操作,包括取字符,倒转字符串,连接字符串等等。)

下面的注释有点乱,首先要知道我的机器码是:124757971。然后,如果你有空的话自己跟跟就很容易知道了的。


0049D925   > \8B85 58F>mov   eax, dword ptr           ;把机器码字符串到过来
0049D92B   .8985 98F>mov   dword ptr , eax         ;我的机器码是“124757971”
0049D931   .33C0   xor   eax, eax                         ;倒过来就是"179757421"
0049D933   .8985 58F>mov   dword ptr , eax
0049D939   .8B8D 50F>mov   ecx, dword ptr
0049D93F   .898D 94F>mov   dword ptr , ecx         ;取出“421”
0049D945   .8985 50F>mov   dword ptr , eax
0049D94B   .8B95 4CF>mov   edx, dword ptr           ;剩下的“1797574”
0049D951   .8995 90F>mov   dword ptr , edx
0049D957   .8985 4CF>mov   dword ptr , eax
0049D95D   .8B8D 48F>mov   ecx, dword ptr           ;“21”
0049D963   .898D 8CF>mov   dword ptr , ecx
0049D969   .8985 48F>mov   dword ptr , eax
0049D96F   .8B95 44F>mov   edx, dword ptr
0049D975   .8995 88F>mov   dword ptr , edx
0049D97B   .8985 44F>mov   dword ptr , eax
0049D981   .8B8D 40F>mov   ecx, dword ptr           ;"711"
0049D987   .898D 84F>mov   dword ptr , ecx
0049D98D   .8985 40F>mov   dword ptr , eax
0049D993   .8B55 D4mov   edx, dword ptr           ;假码到edx
0049D996   .52       push    edx
0049D997   .FF15 341>call    dword ptr [<&MSVBVM60.__vbaR8Str>;MSVBVM60.__vbaR8Str
0049D99D   .DD9D 7CF>fstp    qword ptr             ;假码转成实数。
0049D9A3   .8B95 8CF>mov   edx, dword ptr          ;“21”
0049D9A9   .8D8D 78F>lea   ecx, dword ptr
0049D9AF   .FFD7   call    edi
0049D9B1   .50       push    eax
0049D9B2   .8B95 88F>mov   edx, dword ptr
0049D9B8   .8D8D 74F>lea   ecx, dword ptr
0049D9BE   .FFD7   call    edi                              ;这里call edi相当于 strmove(字符串移动)
0049D9C0   .50       push    eax
0049D9C1   .FF15 6C1>call    dword ptr [<&MSVBVM60.__vbaStrCa>;MSVBVM60.__vbaStrCat
0049D9C7   .8BD0   mov   edx, eax                         ;连接字符串,这里得到“211”
0049D9C9   .8D8D 70F>lea   ecx, dword ptr
0049D9CF   .FFD7   call    edi
0049D9D1   .50       push    eax
0049D9D2   .FF15 341>call    dword ptr [<&MSVBVM60.__vbaR8Str>;MSVBVM60.__vbaR8Str
0049D9D8   .DD9D 74F>fstp    qword ptr             ;211
0049D9DE   .8B95 94F>mov   edx, dword ptr          ;“421”
0049D9E4   .8D4D 94lea   ecx, dword ptr
0049D9E7   .FFD7   call    edi
0049D9E9   .50       push    eax
0049D9EA   .8B95 90F>mov   edx, dword ptr          ;“1797574”
0049D9F0   .8D4D 90lea   ecx, dword ptr
0049D9F3   .FFD7   call    edi
0049D9F5   .50       push    eax
0049D9F6   .FF15 6C1>call    dword ptr [<&MSVBVM60.__vbaStrCa>;MSVBVM60.__vbaStrCat
0049D9FC   .8BD0   mov   edx, eax                         ;字符串连接得到"4211797574"
0049D9FE   .8D4D 8Clea   ecx, dword ptr
0049DA01   .FFD7   call    edi
0049DA03   .50       push    eax
0049DA04   .FF15 341>call    dword ptr [<&MSVBVM60.__vbaR8Str>;MSVBVM60.__vbaR8Str
0049DA0A   .DC8D 74F>fmul    qword ptr             ;4211797574*211
0049DA10   .DFE0   fstsw   ax
0049DA12   .A8 0D    test    al, 0D
0049DA14   .0F85 320>jnz   0049E84C
0049DA1A   .FF15 FC1>call    dword ptr [<&MSVBVM60.__vbaFPInt>;MSVBVM60.__vbaFPInt
0049DA20   .DD9D 6CF>fstp    qword ptr             ;上面相乘的结果888689288114
0049DA26   .8B95 98F>mov   edx, dword ptr          ;“179757421”机器码倒转
0049DA2C   .8D4D BClea   ecx, dword ptr
0049DA2F   .FFD7   call    edi
0049DA31   .50       push    eax
0049DA32   .FF15 341>call    dword ptr [<&MSVBVM60.__vbaR8Str>;MSVBVM60.__vbaR8Str
0049DA38   .DD9D 64F>fstp    qword ptr             ;转成实数得179757421
0049DA3E   .8B45 B8mov   eax, dword ptr           ;机器码"124757971"
0049DA41   .50       push    eax
0049DA42   .FF15 341>call    dword ptr [<&MSVBVM60.__vbaR8Str>;MSVBVM60.__vbaR8Str
0049DA48   .DC85 64F>fadd    qword ptr             ;179757421+124757971
0049DA4E   .DFE0   fstsw   ax
0049DA50   .A8 0D    test    al, 0D
0049DA52   .0F85 F40>jnz   0049E84C
0049DA58   .DD9D 5CF>fstp    qword ptr             ;加的结果st=304515392.00000000000
0049DA5E   .8D8D 8CF>lea   ecx, dword ptr
0049DA64   .51       push    ecx
0049DA65   .FF15 CC1>call    dword ptr [<&MSVBVM60.__vbaR8Err>;MSVBVM60.__vbaR8ErrVar
0049DA6B   .DC85 5CF>fadd    qword ptr             ;2475797+304515392
0049DA71   .DFE0   fstsw   ax
0049DA73   .A8 0D    test    al, 0D
0049DA75   .0F85 D10>jnz   0049E84C
0049DA7B   .DD9D 54F>fstp    qword ptr             ;加的结果st=306991189.00000000000
0049DA81   .8D95 6CF>lea   edx, dword ptr
0049DA87   .52       push    edx
0049DA88   .FF15 CC1>call    dword ptr [<&MSVBVM60.__vbaR8Err>;MSVBVM60.__vbaR8ErrVar
0049DA8E   .DC8D 54F>fmul    qword ptr             ;*179
0049DA94   .DFE0   fstsw   ax
0049DA96   .A8 0D    test    al, 0D
0049DA98   .0F85 AE0>jnz   0049E84C
0049DA9E   .FF15 FC1>call    dword ptr [<&MSVBVM60.__vbaFPInt>;MSVBVM60.__vbaFPInt
0049DAA4   .DD9D 4CF>fstp    qword ptr             ;乘的结果st=5.4951422831000000000e+10
0049DAAA   .8D85 DCF>lea   eax, dword ptr
0049DAB0   .50       push    eax
0049DAB1   .FF15 CC1>call    dword ptr [<&MSVBVM60.__vbaR8Err>;MSVBVM60.__vbaR8ErrVar
0049DAB7   .DD9D 44F>fstp    qword ptr             ;1247
0049DABD   .8B4D D0mov   ecx, dword ptr
0049DAC0   .51       push    ecx
0049DAC1   .FF15 341>call    dword ptr [<&MSVBVM60.__vbaR8Str>;MSVBVM60.__vbaR8Str
0049DAC7   .DC85 44F>fadd    qword ptr             ;机器码124757971+1247
0049DACD   .DFE0   fstsw   ax
0049DACF   .A8 0D    test    al, 0D
0049DAD1   .0F85 750>jnz   0049E84C
0049DAD7   .DD9D 3CF>fstp    qword ptr             ;加的结果st=124759218.00000000000
0049DADD   .8D95 BCF>lea   edx, dword ptr
0049DAE3   .52       push    edx
0049DAE4   .FF15 CC1>call    dword ptr [<&MSVBVM60.__vbaR8Err>;MSVBVM60.__vbaR8ErrVar
0049DAEA   .DC8D 3CF>fmul    qword ptr             ;*971
0049DAF0   .DFE0   fstsw   ax
0049DAF2   .A8 0D    test    al, 0D
0049DAF4   .0F85 520>jnz   0049E84C
0049DAFA   .DD9D 34F>fstp    qword ptr             ;乘的结果st=1.2114120067800000000e+11
0049DB00   .8B45 C4mov   eax, dword ptr
0049DB03   .50       push    eax
0049DB04   .FF15 341>call    dword ptr [<&MSVBVM60.__vbaR8Str>;MSVBVM60.__vbaR8Str
0049DB0A   .833D 00E>cmp   dword ptr , 0
0049DB11   .75 08    jnz   short 0049DB1B
0049DB13   .DCBD 34F>fdivr   qword ptr             ;整除st=124757971.00000000000/121141200678
0049DB19   .EB 11    jmp   short 0049DB2C
0049DB1B   >FFB5 38F>push    dword ptr
0049DB21   .FFB5 34F>push    dword ptr
0049DB27   .E8 B64BF>call    <jmp.&MSVBVM60._adj_fdivr_m64>
0049DB2C   >DFE0   fstsw   ax
0049DB2E   .A8 0D    test    al, 0D
0049DB30   .0F85 160>jnz   0049E84C
0049DB36   .FF15 FC1>call    dword ptr [<&MSVBVM60.__vbaFPInt>;MSVBVM60.__vbaFPInt
0049DB3C   .DC85 4CF>fadd    qword ptr             ;取整数部分+54951422831
0049DB42   .DC85 6CF>fadd    qword ptr             ;又再加888689288114
0049DB48   .DFE0   fstsw   ax
0049DB4A   .A8 0D    test    al, 0D
0049DB4C   .0F85 FA0>jnz   0049E84C
0049DB52   .DD9D 2CF>fstp    qword ptr             ;两次加后的结果st=9.4364071191600000000e+11
0049DB58   .8B95 84F>mov   edx, dword ptr
0049DB5E   .8D8D 5CF>lea   ecx, dword ptr
0049DB64   .FFD7   call    edi
0049DB66   .50       push    eax
0049DB67   .FF15 341>call    dword ptr [<&MSVBVM60.__vbaR8Str>;MSVBVM60.__vbaR8Str
0049DB6D   .833D 00E>cmp   dword ptr , 0
0049DB74   .75 08    jnz   short 0049DB7E
0049DB76   .DCBD 2CF>fdivr   qword ptr             ;整除711
0049DB7C   .EB 11    jmp   short 0049DB8F                   ;除以711后取整数部分就是注册码了。
0049DB7E   >FFB5 30F>push    dword ptr
0049DB84   .FFB5 2CF>push    dword ptr
0049DB8A   .E8 534BF>call    <jmp.&MSVBVM60._adj_fdivr_m64>
0049DB8F   >DFE0   fstsw   ax
0049DB91   .A8 0D    test    al, 0D
0049DB93   .0F85 B30>jnz   0049E84C
0049DB99   .FF15 FC1>call    dword ptr [<&MSVBVM60.__vbaFPInt>;MSVBVM60.__vbaFPInt
0049DB9F   .FF15 F81>call    dword ptr [<&MSVBVM60.__vbaFpR8>>;MSVBVM60.__vbaFpR8
0049DBA5   .DC9D 7CF>fcomp   qword ptr             ;这里就是真假码比较了


------------------------------------------------------------------------
【破解总结】

这个算法就只是对机器码的运算,比如取字符,连接字符串。然后是实数的运算,比如加减乘除。仅此而已。大家都来跟跟吧。

wyh1983 发表于 2006-12-10 22:08:07

VB程序啊

哎,想找VB的程序有时也不好找,一会DOWN下来,分析一下

yunfeng 发表于 2006-12-11 08:56:28

经典的VB算法,收藏起来学习一下。

yzslly 发表于 2006-12-11 12:06:54

不错,谢谢分享

ZHOU2X 发表于 2006-12-11 15:34:26

学习,收藏!!支持!!!!

internetzwm 发表于 2006-12-13 17:57:30

谢谢啦..很不错啊..

西木 发表于 2006-12-14 11:30:42

收藏,了,仔细研究

网游难民 发表于 2006-12-30 21:49:01

:L
偶找不关键点啊:L

musoft 发表于 2006-12-31 16:23:04

3KS,学习ING~`````

logical 发表于 2007-1-7 18:21:08

向楼主学习了 vb知道的很少
页: [1] 2 3
查看完整版本: 月光迷你钟 6.2 算法分析