- UID
- 22350
注册时间2006-10-1
阅读权限30
最后登录1970-1-1
龙战于野
TA的每日心情 | 奋斗 2017-6-11 12:16 |
---|
签到天数: 10 天 [LV.3]偶尔看看II
|
【破文标题】月光迷你钟 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 14 sub esp, 14
0049CD76 . 68 A6264>push <jmp.&MSVBVM60.__vbaExceptHandle>; SE 处理程序安装
0049CD7B . 64:A1 00>mov eax, dword ptr fs:[0]
0049CD81 . 50 push eax
0049CD82 . 64:8925 >mov dword ptr fs:[0], esp
0049CD89 . 81EC BC0>sub esp, 3BC
0049CD8F . 53 push ebx
0049CD90 . 56 push esi
0049CD91 . 57 push edi
0049CD92 . 8965 EC mov dword ptr [ebp-14], esp
0049CD95 . C745 F0 >mov dword ptr [ebp-10], 004019A0
0049CD9C . 8B75 08 mov esi, dword ptr [ebp+8]
0049CD9F . 8BC6 mov eax, esi
0049CDA1 . 83E0 01 and eax, 1
(中间省略很多代码。都是对机器码字符串的操作,包括取字符,倒转字符串,连接字符串等等。)
下面的注释有点乱,首先要知道我的机器码是:124757971。然后,如果你有空的话自己跟跟就很容易知道了的。
0049D925 > \8B85 58F>mov eax, dword ptr [ebp-A8] ; 把机器码字符串到过来
0049D92B . 8985 98F>mov dword ptr [ebp-368], eax ; 我的机器码是“124757971”
0049D931 . 33C0 xor eax, eax ; 倒过来就是"179757421"
0049D933 . 8985 58F>mov dword ptr [ebp-A8], eax
0049D939 . 8B8D 50F>mov ecx, dword ptr [ebp-B0]
0049D93F . 898D 94F>mov dword ptr [ebp-36C], ecx ; 取出“421”
0049D945 . 8985 50F>mov dword ptr [ebp-B0], eax
0049D94B . 8B95 4CF>mov edx, dword ptr [ebp-B4] ; 剩下的“1797574”
0049D951 . 8995 90F>mov dword ptr [ebp-370], edx
0049D957 . 8985 4CF>mov dword ptr [ebp-B4], eax
0049D95D . 8B8D 48F>mov ecx, dword ptr [ebp-B8] ; “21”
0049D963 . 898D 8CF>mov dword ptr [ebp-374], ecx
0049D969 . 8985 48F>mov dword ptr [ebp-B8], eax
0049D96F . 8B95 44F>mov edx, dword ptr [ebp-BC]
0049D975 . 8995 88F>mov dword ptr [ebp-378], edx
0049D97B . 8985 44F>mov dword ptr [ebp-BC], eax
0049D981 . 8B8D 40F>mov ecx, dword ptr [ebp-C0] ; "711"
0049D987 . 898D 84F>mov dword ptr [ebp-37C], ecx
0049D98D . 8985 40F>mov dword ptr [ebp-C0], eax
0049D993 . 8B55 D4 mov edx, dword ptr [ebp-2C] ; 假码到edx
0049D996 . 52 push edx
0049D997 . FF15 341>call dword ptr [<&MSVBVM60.__vbaR8Str>; MSVBVM60.__vbaR8Str
0049D99D . DD9D 7CF>fstp qword ptr [ebp-384] ; 假码转成实数。
0049D9A3 . 8B95 8CF>mov edx, dword ptr [ebp-374] ; “21”
0049D9A9 . 8D8D 78F>lea ecx, dword ptr [ebp-88]
0049D9AF . FFD7 call edi
0049D9B1 . 50 push eax
0049D9B2 . 8B95 88F>mov edx, dword ptr [ebp-378]
0049D9B8 . 8D8D 74F>lea ecx, dword ptr [ebp-8C]
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 [ebp-90]
0049D9CF . FFD7 call edi
0049D9D1 . 50 push eax
0049D9D2 . FF15 341>call dword ptr [<&MSVBVM60.__vbaR8Str>; MSVBVM60.__vbaR8Str
0049D9D8 . DD9D 74F>fstp qword ptr [ebp-38C] ; 211
0049D9DE . 8B95 94F>mov edx, dword ptr [ebp-36C] ; “421”
0049D9E4 . 8D4D 94 lea ecx, dword ptr [ebp-6C]
0049D9E7 . FFD7 call edi
0049D9E9 . 50 push eax
0049D9EA . 8B95 90F>mov edx, dword ptr [ebp-370] ; “1797574”
0049D9F0 . 8D4D 90 lea ecx, dword ptr [ebp-70]
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 8C lea ecx, dword ptr [ebp-74]
0049DA01 . FFD7 call edi
0049DA03 . 50 push eax
0049DA04 . FF15 341>call dword ptr [<&MSVBVM60.__vbaR8Str>; MSVBVM60.__vbaR8Str
0049DA0A . DC8D 74F>fmul qword ptr [ebp-38C] ; 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 [ebp-394] ; 上面相乘的结果888689288114
0049DA26 . 8B95 98F>mov edx, dword ptr [ebp-368] ; “179757421”机器码倒转
0049DA2C . 8D4D BC lea ecx, dword ptr [ebp-44]
0049DA2F . FFD7 call edi
0049DA31 . 50 push eax
0049DA32 . FF15 341>call dword ptr [<&MSVBVM60.__vbaR8Str>; MSVBVM60.__vbaR8Str
0049DA38 . DD9D 64F>fstp qword ptr [ebp-39C] ; 转成实数得179757421
0049DA3E . 8B45 B8 mov eax, dword ptr [ebp-48] ; 机器码"124757971"
0049DA41 . 50 push eax
0049DA42 . FF15 341>call dword ptr [<&MSVBVM60.__vbaR8Str>; MSVBVM60.__vbaR8Str
0049DA48 . DC85 64F>fadd qword ptr [ebp-39C] ; 179757421+124757971
0049DA4E . DFE0 fstsw ax
0049DA50 . A8 0D test al, 0D
0049DA52 . 0F85 F40>jnz 0049E84C
0049DA58 . DD9D 5CF>fstp qword ptr [ebp-3A4] ; 加的结果st=304515392.00000000000
0049DA5E . 8D8D 8CF>lea ecx, dword ptr [ebp-174]
0049DA64 . 51 push ecx
0049DA65 . FF15 CC1>call dword ptr [<&MSVBVM60.__vbaR8Err>; MSVBVM60.__vbaR8ErrVar
0049DA6B . DC85 5CF>fadd qword ptr [ebp-3A4] ; 2475797+304515392
0049DA71 . DFE0 fstsw ax
0049DA73 . A8 0D test al, 0D
0049DA75 . 0F85 D10>jnz 0049E84C
0049DA7B . DD9D 54F>fstp qword ptr [ebp-3AC] ; 加的结果st=306991189.00000000000
0049DA81 . 8D95 6CF>lea edx, dword ptr [ebp-194]
0049DA87 . 52 push edx
0049DA88 . FF15 CC1>call dword ptr [<&MSVBVM60.__vbaR8Err>; MSVBVM60.__vbaR8ErrVar
0049DA8E . DC8D 54F>fmul qword ptr [ebp-3AC] ; *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 [ebp-3B4] ; 乘的结果st=5.4951422831000000000e+10
0049DAAA . 8D85 DCF>lea eax, dword ptr [ebp-124]
0049DAB0 . 50 push eax
0049DAB1 . FF15 CC1>call dword ptr [<&MSVBVM60.__vbaR8Err>; MSVBVM60.__vbaR8ErrVar
0049DAB7 . DD9D 44F>fstp qword ptr [ebp-3BC] ; 1247
0049DABD . 8B4D D0 mov ecx, dword ptr [ebp-30]
0049DAC0 . 51 push ecx
0049DAC1 . FF15 341>call dword ptr [<&MSVBVM60.__vbaR8Str>; MSVBVM60.__vbaR8Str
0049DAC7 . DC85 44F>fadd qword ptr [ebp-3BC] ; 机器码124757971+1247
0049DACD . DFE0 fstsw ax
0049DACF . A8 0D test al, 0D
0049DAD1 . 0F85 750>jnz 0049E84C
0049DAD7 . DD9D 3CF>fstp qword ptr [ebp-3C4] ; 加的结果st=124759218.00000000000
0049DADD . 8D95 BCF>lea edx, dword ptr [ebp-144]
0049DAE3 . 52 push edx
0049DAE4 . FF15 CC1>call dword ptr [<&MSVBVM60.__vbaR8Err>; MSVBVM60.__vbaR8ErrVar
0049DAEA . DC8D 3CF>fmul qword ptr [ebp-3C4] ; *971
0049DAF0 . DFE0 fstsw ax
0049DAF2 . A8 0D test al, 0D
0049DAF4 . 0F85 520>jnz 0049E84C
0049DAFA . DD9D 34F>fstp qword ptr [ebp-3CC] ; 乘的结果st=1.2114120067800000000e+11
0049DB00 . 8B45 C4 mov eax, dword ptr [ebp-3C]
0049DB03 . 50 push eax
0049DB04 . FF15 341>call dword ptr [<&MSVBVM60.__vbaR8Str>; MSVBVM60.__vbaR8Str
0049DB0A . 833D 00E>cmp dword ptr [52E000], 0
0049DB11 . 75 08 jnz short 0049DB1B
0049DB13 . DCBD 34F>fdivr qword ptr [ebp-3CC] ; 整除st=124757971.00000000000/121141200678
0049DB19 . EB 11 jmp short 0049DB2C
0049DB1B > FFB5 38F>push dword ptr [ebp-3C8]
0049DB21 . FFB5 34F>push dword ptr [ebp-3CC]
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 [ebp-3B4] ; 取整数部分+54951422831
0049DB42 . DC85 6CF>fadd qword ptr [ebp-394] ; 又再加888689288114
0049DB48 . DFE0 fstsw ax
0049DB4A . A8 0D test al, 0D
0049DB4C . 0F85 FA0>jnz 0049E84C
0049DB52 . DD9D 2CF>fstp qword ptr [ebp-3D4] ; 两次加后的结果st=9.4364071191600000000e+11
0049DB58 . 8B95 84F>mov edx, dword ptr [ebp-37C]
0049DB5E . 8D8D 5CF>lea ecx, dword ptr [ebp-A4]
0049DB64 . FFD7 call edi
0049DB66 . 50 push eax
0049DB67 . FF15 341>call dword ptr [<&MSVBVM60.__vbaR8Str>; MSVBVM60.__vbaR8Str
0049DB6D . 833D 00E>cmp dword ptr [52E000], 0
0049DB74 . 75 08 jnz short 0049DB7E
0049DB76 . DCBD 2CF>fdivr qword ptr [ebp-3D4] ; 整除711
0049DB7C . EB 11 jmp short 0049DB8F ; 除以711后取整数部分就是注册码了。
0049DB7E > FFB5 30F>push dword ptr [ebp-3D0]
0049DB84 . FFB5 2CF>push dword ptr [ebp-3D4]
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 [ebp-384] ; 这里就是真假码比较了
------------------------------------------------------------------------
【破解总结】
这个算法就只是对机器码的运算,比如取字符,连接字符串。然后是实数的运算,比如加减乘除。仅此而已。大家都来跟跟吧。 |
评分
-
查看全部评分
|