语音报时 2.1 Build 040521 注册算法
【破文标题】语音报时 2.1 Build 040521注册算法【破文作者】XXNB
【作者邮箱】
【作者主页】http://free.ys168.com/?binbinbin7456
【破解工具】OD
【破解平台】xpsp2
【软件名称】语音报时 2.1 Build 040521
【软件大小】
【原版下载】http://www.newhua.com/soft/7980.htm
【保护方式】机器码
【软件简介】1.即时语音报时。2.整点、半点语音报时。3.可选择特定时间一次、每年每月每天、某年每月每天、每年每月某天、每年某月每
天等八种组合选择。自行动作包括:语音报时、播放音乐、执行程序、文字提醒、关机等。(未注册版可设定3组定时动作,注册版可设定40组
定时动作)。
【破解声明】向大侠们学习!!!只为学习!请尊重作者的劳动成功!
------------------------------------------------------------------------
【破解过程】
刚刚看了个“音乐报时”,于是想到了“语音报时”。华军上一找,找到这个,是易语言写的。虽然是N久前的东西,但是还是分析了下,共享
出来了。 字符串查找“已注册”很容易定位。
0044678B 55 push ebp
0044678C 8BEC mov ebp, esp
0044678E 81EC 30000000 sub esp, 30
00446794 C745 FC 0000000>mov dword ptr , 0
0044679B C745 F8 0000000>mov dword ptr , 0
004467A2 C745 F4 0000000>mov dword ptr , 0
004467A9 C745 F0 0000000>mov dword ptr , 0
004467B0 C745 EC 0000000>mov dword ptr , 0
004467B7 68 00000000 push 0
004467BC BB C4060000 mov ebx, 6C4
004467C1 E8 D8E20000 call 00454A9E
004467C6 83C4 04 add esp, 4 ; 这里eax的10进制就是机器码了
004467C9 68 01030080 push 80000301
004467CE 6A 00 push 0
004467D0 50 push eax
004467D1 68 01000000 push 1
004467D6 BB 68010000 mov ebx, 168
004467DB E8 BEE20000 call 00454A9E
004467E0 83C4 10 add esp, 10
004467E3 8945 E4 mov dword ptr , eax ; 机器码出现了
004467E6 8B5D FC mov ebx, dword ptr
004467E9 85DB test ebx, ebx
004467EB 74 09 je short 004467F6
004467ED 53 push ebx
004467EE E8 B1E20000 call 00454AA4
004467F3 83C4 04 add esp, 4
004467F6 8B45 E4 mov eax, dword ptr
004467F9 8945 FC mov dword ptr , eax
004467FC 68 04000080 push 80000004
00446801 6A 00 push 0
00446803 8B45 FC mov eax, dword ptr
00446806 85C0 test eax, eax
00446808 75 05 jnz short 0044680F
0044680A B8 BF314000 mov eax, 004031BF
0044680F 50 push eax
00446810 68 01000000 push 1
00446815 BB 30010000 mov ebx, 130
0044681A E8 7FE20000 call 00454A9E ; 得到机器码的位数
0044681F 83C4 10 add esp, 10
00446822 8945 F8 mov dword ptr , eax
00446825 C745 F4 0000000>mov dword ptr , 0
0044682C 8B45 F8 mov eax, dword ptr
0044682F 33C9 xor ecx, ecx
00446831 50 push eax
00446832 8D45 F0 lea eax, dword ptr
00446835 8BD8 mov ebx, eax
00446837 58 pop eax
00446838 41 inc ecx ; 循环开始。这里是计数器
00446839 51 push ecx
0044683A 53 push ebx
0044683B 890B mov dword ptr , ecx
0044683D 50 push eax
0044683E 3BC8 cmp ecx, eax ; 计数器比较
00446840 0F8F 67000000 jg 004468AD
00446846 68 01030080 push 80000301
0044684B 6A 00 push 0
0044684D FF75 F0 push dword ptr
00446850 68 04000080 push 80000004
00446855 6A 00 push 0
00446857 8B45 FC mov eax, dword ptr
0044685A 85C0 test eax, eax
0044685C 75 05 jnz short 00446863
0044685E B8 BF314000 mov eax, 004031BF
00446863 50 push eax
00446864 68 02000000 push 2
00446869 BB 44010000 mov ebx, 144
0044686E E8 2BE20000 call 00454A9E ; 逐个取机器码ascii码值,16进制
00446873 83C4 1C add esp, 1C
00446876 8945 E0 mov dword ptr , eax
00446879 DB45 E0 fild dword ptr ; 转成实数运算。当然要取10进制
0044687C DD5D E0 fstp qword ptr
0044687F DD45 E0 fld qword ptr
00446882 DB45 F0 fild dword ptr
00446885 DD5D E0 fstp qword ptr
00446888 DC4D E0 fmul qword ptr ; 乘以自己的下标
0044688B DD5D E0 fstp qword ptr
0044688E DB45 F4 fild dword ptr
00446891 DD5D D8 fstp qword ptr
00446894 DD45 D8 fld qword ptr
00446897 DC45 E0 fadd qword ptr ; 累加在这里
0044689A DD5D D8 fstp qword ptr
0044689D DD45 D8 fld qword ptr
004468A0 E8 5BFDFFFF call 00446600
004468A5 8945 F4 mov dword ptr , eax ; 存储结果在【ebp-C】,最终结果就在这里面了
004468A8 58 pop eax
004468A9 5B pop ebx
004468AA 59 pop ecx
004468AB^ EB 8B jmp short 00446838 ; 循环回去
004468AD 83C4 0C add esp, 0C
004468B0 68 04000080 push 80000004
004468B5 6A 00 push 0
004468B7 8B45 FC mov eax, dword ptr ; 机器码到eax
004468BA 85C0 test eax, eax
004468BC 75 05 jnz short 004468C3
004468BE B8 BF314000 mov eax, 004031BF
004468C3 50 push eax
004468C4 68 01000000 push 1
004468C9 BB 64010000 mov ebx, 164
004468CE E8 CBE10000 call 00454A9E ; 又这个call
004468D3 83C4 10 add esp, 10
004468D6 8945 E4 mov dword ptr , eax
004468D9 8955 E8 mov dword ptr , edx
004468DC DD45 E4 fld qword ptr ; 这是机器码
004468DF DB45 F4 fild dword ptr ; 上面那个循环的结果转实数,又要算了
004468E2 DD5D DC fstp qword ptr
004468E5 DC4D DC fmul qword ptr ; 机器码*循环运算结果
004468E8 DD5D DC fstp qword ptr ; 这乘的结果的10进制就是真码了。
004468EB 68 01060080 push 80000601
004468F0 FF75 E0 push dword ptr
004468F3 FF75 DC push dword ptr ; 结果入栈
004468F6 68 01000000 push 1
004468FB BB 5C000000 mov ebx, 5C
00446900 E8 99E10000 call 00454A9E ; 这个call
00446905 83C4 10 add esp, 10
00446908 68 01060080 push 80000601
0044690D 52 push edx
0044690E 50 push eax
0044690F 68 01000000 push 1
00446914 BB 68010000 mov ebx, 168
00446919 E8 80E10000 call 00454A9E ; 又是这个call。这个简直就是万能call了
0044691E 83C4 10 add esp, 10
00446921 8945 D0 mov dword ptr , eax ; (ASCII "3886617169428")
00446924 8B5D EC mov ebx, dword ptr
00446927 85DB test ebx, ebx
00446929 74 09 je short 00446934
0044692B 53 push ebx
0044692C E8 73E10000 call 00454AA4
00446931 83C4 04 add esp, 4
00446934 8B45 D0 mov eax, dword ptr
00446937 8945 EC mov dword ptr , eax
0044693A 68 00000000 push 0
0044693F BB 04010000 mov ebx, 104
00446944 E8 55E10000 call 00454A9E
00446949 83C4 04 add esp, 4
0044694C 8945 E8 mov dword ptr , eax
0044694F 68 C0314000 push 004031C0 ; \Item.ini
00446954 FF75 E8 push dword ptr
00446957 B9 02000000 mov ecx, 2
0044695C E8 31FDFFFF call 00446692
00446961 83C4 08 add esp, 8
00446964 8945 E4 mov dword ptr , eax
00446967 8B5D E8 mov ebx, dword ptr
0044696A 85DB test ebx, ebx
0044696C 74 09 je short 00446977
0044696E 53 push ebx
0044696F E8 30E10000 call 00454AA4
00446974 83C4 04 add esp, 4
00446977 6A 00 push 0
00446979 6A 00 push 0
0044697B 6A 00 push 0
0044697D 68 04000080 push 80000004
00446982 6A 00 push 0
00446984 68 CA314000 push 004031CA ; code
00446989 68 04000080 push 80000004
0044698E 6A 00 push 0
00446990 68 CF314000 push 004031CF ; System
00446995 68 04000080 push 80000004
0044699A 6A 00 push 0
0044699C 8B45 E4 mov eax, dword ptr
0044699F 85C0 test eax, eax
004469A1 75 05 jnz short 004469A8
004469A3 B8 BF314000 mov eax, 004031BF
004469A8 50 push eax
004469A9 68 04000000 push 4
004469AE BB C8080000 mov ebx, 8C8
004469B3 E8 E6E00000 call 00454A9E ; 取出Item.ini里面的,我们输入的注册码
004469B8 83C4 34 add esp, 34
004469BB 8945 E0 mov dword ptr , eax ; 我们输入的假码
004469BE 8B5D E4 mov ebx, dword ptr
004469C1 85DB test ebx, ebx
004469C3 74 09 je short 004469CE
004469C5 53 push ebx
004469C6 E8 D9E00000 call 00454AA4
004469CB 83C4 04 add esp, 4
004469CE 8B45 EC mov eax, dword ptr
004469D1 50 push eax ; 真码入栈
004469D2 FF75 E0 push dword ptr ; 假码入栈
004469D5 E8 14FDFFFF call 004466EE ; 看就知道是比较函数
004469DA 83C4 08 add esp, 8
004469DD 83F8 00 cmp eax, 0
004469E0 B8 00000000 mov eax, 0
004469E5 0F94C0 sete al
004469E8 8945 DC mov dword ptr , eax
004469EB 8B5D E0 mov ebx, dword ptr
004469EE 85DB test ebx, ebx
004469F0 74 09 je short 004469FB
004469F2 53 push ebx
004469F3 E8 ACE00000 call 00454AA4
004469F8 83C4 04 add esp, 4
004469FB 837D DC 00 cmp dword ptr , 0
004469FF 0F84 49000000 je 00446A4E ; 关键跳
00446A05 C705 800C9D00 3>mov dword ptr , 3C
00446A0F 6A 00 push 0
00446A11 68 D6314000 push 004031D6 ; 已注册
00446A16 6A FF push -1
00446A18 6A 00 push 0
00446A1A 68 06000126 push 26010006
00446A1F 68 01000152 push 52010001
00446A24 E8 93E00000 call 00454ABC
------------------------------------------------------------------------
【破解总结】
------------------------------------------------------------------------
1、算法很简单,取得机器码。循环取机器码的Ascii码值10进制×相应下标。累加在【ebp-C】(具体看代码)。然后累加的结果×机器码。结
果转成10进制就是真注册码了。
太简单,注册机都懒得写了 我看我是学不会算法了.......
支持你楼主!!!!!!!!!!!!1 学习中……支持!!!! 我的我练一下,谢谢.
页:
[1]