月光迷你钟 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 ;这里就是真假码比较了
------------------------------------------------------------------------
【破解总结】
这个算法就只是对机器码的运算,比如取字符,连接字符串。然后是实数的运算,比如加减乘除。仅此而已。大家都来跟跟吧。
VB程序啊
哎,想找VB的程序有时也不好找,一会DOWN下来,分析一下 经典的VB算法,收藏起来学习一下。 不错,谢谢分享 学习,收藏!!支持!!!! 谢谢啦..很不错啊.. 收藏,了,仔细研究 :L偶找不关键点啊:L 3KS,学习ING~````` 向楼主学习了 vb知道的很少