【破解作者】 大菜一号
【使用工具】 OD-ice,peid,w32
【软件名称】 windows魔法助手v3.02
【软件简介】
Windows魔法助手分别对文件处理、系统设置、系统维护、系统辅助这四个方面提供了较全面的帮助。
对文件进行更名,切割。加密,粉碎!
对系统启动,右键菜单,IE等一些方面进行个性化设置
对系统垃圾处理清理提供了较全面的帮助
对系统当前的工作状况进行管理!
(其实呢``说白了就是修改注册表的工具,不如用优化大师`呵。。
“我砍死你!”作者喊,)
【破解声明】
声明声明`只为学习而研究~~
说真的,这个软件有两个算法的bug!作者太不小心了~~~后面再分析bug,先看代码
本人觉得这个软件的破解有通用注册码,这样就不用写keygen了,比较适合新手`本一来想给大家搞个动画上来滴!录到一半,晕过去了~
而且体积也很大~放弃了~
毕竟对新手来说看代码有一定的难度!
这个软件很有趣,给大家传个无壳的``
看分析`
peid查看一下``嗯嗯`是有壳滴!偶给你扒个精光~~嘿嘿`
W32找字符串->“注册失败--您所输入的注册码有误?”-->004b5378
用OD载入后找004b5378,向上找,断在函数入口点->004b51b4
004B51B4 /. 55 push ebp
004B51B4 /. 55 push ebp
004B51B5 |. 8BEC mov ebp, esp
004B51B7 |. 33C9 xor ecx, ecx
004B51B9 |. 51 push ecx
004B51BA |. 51 push ecx
004B51BB |. 51 push ecx
004B51BC |. 51 push ecx
004B51BD |. 51 push ecx
004B51BE |. 51 push ecx
004B51BF |. 51 push ecx
004B51C0 |. 51 push ecx
004B51C1 |. 53 push ebx
004B51C2 |. 8BD8 mov ebx, eax
004B51C4 |. 33C0 xor eax, eax
004B51C6 |. 55 push ebp
004B51C7 |. 68 BF534B00 push 004B53BF
004B51CC |. 64:FF30 push dword ptr fs:[eax]
004B51CF |. 64:8920 mov dword ptr fs:[eax], esp
004B51D2 |. 8D55 F8 lea edx, dword ptr [ebp-8]
004B51D5 |. 8B83 0C030000 mov eax, dword ptr [ebx+30C]
004B51DB |. E8 4009F9FF call 00445B20
004B51E0 |. FF75 F8 push dword ptr [ebp-8]
004B51E3 |. 68 D4534B00 push 004B53D4
004B51E8 |. 8D55 F4 lea edx, dword ptr [ebp-C]
004B51EB |. 8B83 10030000 mov eax, dword ptr [ebx+310]
004B51F1 |. E8 2A09F9FF call 00445B20
004B51F6 |. FF75 F4 push dword ptr [ebp-C]
004B51F9 |. 68 D4534B00 push 004B53D4
004B51FE |. 8D55 F0 lea edx, dword ptr [ebp-10]
004B5201 |. 8B83 14030000 mov eax, dword ptr [ebx+314]
004B5207 |. E8 1409F9FF call 00445B20
004B520C |. FF75 F0 push dword ptr [ebp-10]
004B520F |. 68 D4534B00 push 004B53D4
004B5214 |. 8D55 EC lea edx, dword ptr [ebp-14]
004B5217 |. 8B83 18030000 mov eax, dword ptr [ebx+318]
004B521D |. E8 FE08F9FF call 00445B20
004B5222 |. FF75 EC push dword ptr [ebp-14]
004B5225 |. 68 D4534B00 push 004B53D4
004B522A |. 8D55 E8 lea edx, dword ptr [ebp-18]
004B522D |. 8B83 1C030000 mov eax, dword ptr [ebx+31C]
004B5233 |. E8 E808F9FF call 00445B20
004B5238 |. FF75 E8 push dword ptr [ebp-18]
004B523B |. 8D45 FC lea eax, dword ptr [ebp-4]
004B523E |. BA 09000000 mov edx, 9
004B5243 |. E8 C4FCF4FF call 00404F0C
004B5248 |. 8B45 FC mov eax, dword ptr [ebp-4]
004B524B |. E8 C00C0A00 call 00555F10-------------------------------------\
004B5250 |. 84C0 test al, al \->这个CALL很经典``跟进->算法CALL
004B5252 |. 0F84 20010000 je 004B5378--------------------------------------/
004B5258 |. B9 E0534B00 mov ecx, 004B53E0
算法call:
00555F10 $ 55 push ebp----------------->呼呼``跟进后在这~
N个代码``为节省看雪篇幅`偶就不列出
后面数字都为十六进制
直接看这里:
00555F6B . 8B55 FC mov edx, dword ptr [ebp-4]->取输入的code,
注:此code要为28位(如:KSJIE-SLOWI-12568-4568-45875)
00555F6E . E8 B9ECEAFF call 00404C2C
00555F73 . 8B45 F4 mov eax, dword ptr [ebp-C]
00555F76 . 0FB640 18 movzx eax, byte ptr [eax+18]-->取code的第18位(从0位算起``后不再说明)
00555F7A . 8B55 F4 mov edx, dword ptr [ebp-C]
00555F7D . 0FB652 1C movzx edx, byte ptr [edx+1C]-->取code的第1c位到edx
00555F81 . 2BC2 sub eax, edx---------------->第18位和第1c位的ascii相减
00555F83 . 99 cdq----------------------------->减后结果的字的符号位扩展,结果存到edx------------------(不明白可以去看看汇编)
00555F84 . 33C2 xor eax, edx---------------->扩展后结果与减后的结果异或
00555F86 . 2BC2 sub eax, edx---------------->异或后的结果再减去扩展后的结果
00555F88 . 8BD8 mov ebx, eax---------------->上面减后结果传到ebx
00555F8A . 83C3 30 add ebx, 30--------->ebx+30(即减后结果+30);
00555F8D . 83FB 39 cmp ebx, 39--------->ebx和39比较
00555F90 . 7E 08 jle short 00555F9A-->小于或等于就跳
00555F92 . 83FB 41 cmp ebx, 41----------->上面不跳的话,执行到这,和41比较
00555F95 . 7D 03 jge short 00555F9A---->大于或等于就跳
00555F97 . 83C3 07 add ebx, 7------------>上面不跳的话,就+7
00555F9A > 8D45 F4 lea eax, dword ptr [ebp-C]
00555F9D . E8 FAF0EAFF call 0040509C
00555FA2 . 8858 02 mov byte ptr [eax+2], bl----->把上面运算后的结果所对应的ascii字符传到code的第2位
00555FA5 . 8B45 F4 mov eax, dword ptr [ebp-C]
00555FA8 . 0FB640 12 movzx eax, byte ptr [eax+12]--->取code的第12位
00555FAC . 8B55 F4 mov edx, dword ptr [ebp-C]
00555FAF . 0FB652 16 movzx edx, byte ptr [edx+16]--->取code的第16位
00555FB3 . 2BC2 sub eax, edx----------------->相减
00555FB5 . 99 cdq------------------------------>符号扩展
00555FB6 . 33C2 xor eax, edx----------------->扩展后的结果与减后的结果异或
00555FB8 . 2BC2 sub eax, edx--------------->异或后的结果减去扩展后的结果
00555FBA . 8BD8 mov ebx, eax-------------->上面计算的结果传到ebx
00555FBC . 83C3 30 add ebx, 30--------------->ebx加30
00555FBF . 83FB 39 cmp ebx, 39--------------->和39比较
00555FC2 . 7E 08 jle short 00555FCC-------->小于或等于就跳
00555FC4 . 83FB 41 cmp ebx, 41--------------->上面不跳的话,执行到这,与41比较
00555FC7 . 7D 03 jge short 00555FCC-------->大于就跳
00555FC9 . 83C3 07 add ebx, 7---------------->上面不跳的话,执行到这,就加7
00555FCC > 8D45 F4 lea eax, dword ptr [ebp-C]
00555FCF . E8 C8F0EAFF call 0040509C
00555FD4 . 8858 08 mov byte ptr [eax+8], bl--->上面计算的结果所对应的ascii字符传到code的第8位
00555FD7 . 8B45 F4 mov eax, dword ptr [ebp-C]
00555FDA . 0FB640 0C movzx eax, byte ptr [eax+C]
00555FDE . 8B55 F4 mov edx, dword ptr [ebp-C]
00555FE1 . 0FB652 10 movzx edx, byte ptr [edx+10]
00555FE5 . 2BC2 sub eax, edx
00555FE7 . 99 cdq
00555FE8 . 33C2 xor eax, edx
00555FEA . 2BC2 sub eax, edx
00555FEC . 8BD8 mov ebx, eax
00555FEE . 83C3 30 add ebx, 30
00555FF1 . 83FB 39 cmp ebx, 39
00555FF4 . 7E 08 jle short 00555FFE
00555FF6 . 83FB 41 cmp ebx, 41
00555FF9 . 7D 03 jge short 00555FFE
00555FFB . 83C3 07 add ebx, 7
00555FFE > 8D45 F4 lea eax, dword ptr [ebp-C]
00556001 . E8 96F0EAFF call 0040509C
00556006 . 8858 0E mov byte ptr [eax+E], bl
00556009 . 8B45 F4 mov eax, dword ptr [ebp-C]
0055600C . 0FB640 06 movzx eax, byte ptr [eax+6]
00556010 . 8B55 F4 mov edx, dword ptr [ebp-C]
00556013 . 0FB652 0A movzx edx, byte ptr [edx+A]
00556017 . 2BC2 sub eax, edx
00556019 . 99 cdq
0055601A . 33C2 xor eax, edx
0055601C . 2BC2 sub eax, edx
0055601E . 8BD8 mov ebx, eax
00556020 . 83C3 30 add ebx, 30
00556023 . 83FB 39 cmp ebx, 39
00556026 . 7E 08 jle short 00556030
00556028 . 83FB 41 cmp ebx, 41
0055602B . 7D 03 jge short 00556030
0055602D . 83C3 07 add ebx, 7
00556030 > 8D45 F4 lea eax, dword ptr [ebp-C]
00556033 . E8 64F0EAFF call 0040509C
00556038 . 8858 14 mov byte ptr [eax+14], bl
0055603B . 8B45 F4 mov eax, dword ptr [ebp-C]
0055603E . 0FB600 movzx eax, byte ptr [eax]
00556041 . 8B55 F4 mov edx, dword ptr [ebp-C]
00556044 . 0FB652 04 movzx edx, byte ptr [edx+4]
00556048 . 2BC2 sub eax, edx
0055604A . 99 cdq
0055604B . 33C2 xor eax, edx
0055604D . 2BC2 sub eax, edx
0055604F . 8BD8 mov ebx, eax
00556051 . 83C3 30 add ebx, 30
00556054 . 83FB 39 cmp ebx, 39
00556057 . 7E 08 jle short 00556061
00556059 . 83FB 41 cmp ebx, 41
0055605C . 7D 03 jge short 00556061
0055605E . 83C3 07 add ebx, 7
00556061 > 8D45 F4 lea eax, dword ptr [ebp-C]
00556064 . E8 33F0EAFF call 0040509C
00556069 . 8858 1A mov byte ptr [eax+1A], bl
0055606C . 8B45 F4 mov eax, dword ptr [ebp-C]
0055606F . 0FB640 08 movzx eax, byte ptr [eax+8]
00556073 . 8B55 F4 mov edx, dword ptr [ebp-C]
00556076 . 0FB652 0A movzx edx, byte ptr [edx+A]
0055607A . 2BC2 sub eax, edx
0055607C . 99 cdq
0055607D . 33C2 xor eax, edx
0055607F . 2BC2 sub eax, edx
00556081 . 8BD8 mov ebx, eax
00556083 . 83C3 30 add ebx, 30
00556086 . 83FB 39 cmp ebx, 39
00556089 . 7E 08 jle short 00556093
0055608B . 83FB 41 cmp ebx, 41
0055608E . 7D 03 jge short 00556093
00556090 . 83C3 07 add ebx, 7
00556093 > 8D45 F4 lea eax, dword ptr [ebp-C]
00556096 . E8 01F0EAFF call 0040509C
0055609B . 8858 01 mov byte ptr [eax+1], bl
0055609E . 8B45 F4 mov eax, dword ptr [ebp-C]
005560A1 . 0FB640 14 movzx eax, byte ptr [eax+14]
005560A5 . 8B55 F4 mov edx, dword ptr [ebp-C]
005560A8 . 0FB652 16 movzx edx, byte ptr [edx+16]
005560AC . 2BC2 sub eax, edx
005560AE . 99 cdq
005560AF . 33C2 xor eax, edx
005560B1 . 2BC2 sub eax, edx
005560B3 . 8BD8 mov ebx, eax
005560B5 . 83C3 30 add ebx, 30
005560B8 . 83FB 39 cmp ebx, 39
005560BB . 7E 08 jle short 005560C5
005560BD . 83FB 41 cmp ebx, 41
005560C0 . 7D 03 jge short 005560C5
005560C2 . 83C3 07 add ebx, 7
005560C5 > 8D45 F4 lea eax, dword ptr [ebp-C]
005560C8 . E8 CFEFEAFF call 0040509C
005560CD . 8858 07 mov byte ptr [eax+7], bl
005560D0 . 8B45 F4 mov eax, dword ptr [ebp-C]
005560D3 . 0FB640 0E movzx eax, byte ptr [eax+E]
005560D7 . 8B55 F4 mov edx, dword ptr [ebp-C]
005560DA . 0FB652 10 movzx edx, byte ptr [edx+10]
005560DE . 2BC2 sub eax, edx
005560E0 . 99 cdq
005560E1 . 33C2 xor eax, edx
005560E3 . 2BC2 sub eax, edx
005560E5 . 8BD8 mov ebx, eax
005560E7 . 83C3 30 add ebx, 30
005560EA . 83FB 39 cmp ebx, 39
005560ED . 7E 08 jle short 005560F7
005560EF . 83FB 41 cmp ebx, 41
005560F2 . 7D 03 jge short 005560F7
005560F4 . 83C3 07 add ebx, 7
005560F7 > 8D45 F4 lea eax, dword ptr [ebp-C]
005560FA . E8 9DEFEAFF call 0040509C
005560FF . 8858 0D mov byte ptr [eax+D], bl
00556102 . 8B45 F4 mov eax, dword ptr [ebp-C]
00556105 . 0FB640 02 movzx eax, byte ptr [eax+2]
00556109 . 8B55 F4 mov edx, dword ptr [ebp-C]
0055610C . 0FB652 04 movzx edx, byte ptr [edx+4]
00556110 . 2BC2 sub eax, edx
00556112 . 99 cdq
00556113 . 33C2 xor eax, edx
00556115 . 2BC2 sub eax, edx
00556117 . 8BD8 mov ebx, eax
00556119 . 83C3 30 add ebx, 30
0055611C . 83FB 39 cmp ebx, 39
0055611F . 7E 08 jle short 00556129
00556121 . 83FB 41 cmp ebx, 41
00556124 . 7D 03 jge short 00556129
00556126 . 83C3 07 add ebx, 7
00556129 > 8D45 F4 lea eax, dword ptr [ebp-C]
0055612C . E8 6BEFEAFF call 0040509C
00556131 . 8858 13 mov byte ptr [eax+13], bl
00556134 . 8B45 F4 mov eax, dword ptr [ebp-C]
00556137 . 0FB640 1A movzx eax, byte ptr [eax+1A]
0055613B . 8B55 F4 mov edx, dword ptr [ebp-C]
0055613E . 0FB652 1C movzx edx, byte ptr [edx+1C]
00556142 . 2BC2 sub eax, edx
00556144 . 99 cdq
00556145 . 33C2 xor eax, edx
00556147 . 2BC2 sub eax, edx
00556149 . 8BD8 mov ebx, eax
0055614B . 83C3 30 add ebx, 30
0055614E . 83FB 39 cmp ebx, 39
00556151 . 7E 08 jle short 0055615B
00556153 . 83FB 41 cmp ebx, 41
00556156 . 7D 03 jge short 0055615B
00556158 . 83C3 07 add ebx, 7
0055615B > 8D45 F4 lea eax, dword ptr [ebp-C]
0055615E . E8 39EFEAFF call 0040509C
00556163 . 8858 19 mov byte ptr [eax+19], bl
00556166 . 8B45 F4 mov eax, dword ptr [ebp-C]
00556169 . 0FB640 13 movzx eax, byte ptr [eax+13]
0055616D . 8B55 F4 mov edx, dword ptr [ebp-C]
00556170 . 0FB652 12 movzx edx, byte ptr [edx+12]
00556174 . 2BC2 sub eax, edx
00556176 . 99 cdq
00556177 . 33C2 xor eax, edx
00556179 . 2BC2 sub eax, edx
0055617B . 8BD8 mov ebx, eax
0055617D . 83C3 30 add ebx, 30
00556180 . 83FB 39 cmp ebx, 39
00556183 . 7E 08 jle short 0055618D
00556185 . 83FB 41 cmp ebx, 41
00556188 . 7D 03 jge short 0055618D
0055618A . 83C3 07 add ebx, 7
0055618D > 8D45 F4 lea eax, dword ptr [ebp-C]
00556190 . E8 07EFEAFF call 0040509C
00556195 . 8858 03 mov byte ptr [eax+3], bl
00556198 . 8B45 F4 mov eax, dword ptr [ebp-C]
0055619B . 0FB640 18 movzx eax, byte ptr [eax+18]
0055619F . 8B55 F4 mov edx, dword ptr [ebp-C]
005561A2 . 0FB652 19 movzx edx, byte ptr [edx+19]
005561A6 . 2BC2 sub eax, edx
005561A8 . 99 cdq
005561A9 . 33C2 xor eax, edx
005561AB . 2BC2 sub eax, edx
005561AD . 8BD8 mov ebx, eax
005561AF . 83C3 30 add ebx, 30
005561B2 . 83FB 39 cmp ebx, 39
005561B5 . 7E 08 jle short 005561BF
005561B7 . 83FB 41 cmp ebx, 41
005561BA . 7D 03 jge short 005561BF
005561BC . 83C3 07 add ebx, 7
005561BF > 8D45 F4 lea eax, dword ptr [ebp-C]
005561C2 . E8 D5EEEAFF call 0040509C
005561C7 . 8858 09 mov byte ptr [eax+9], bl
005561CA . 8B45 F4 mov eax, dword ptr [ebp-C]
005561CD . 0FB640 06 movzx eax, byte ptr [eax+6]
005561D1 . 8B55 F4 mov edx, dword ptr [ebp-C]
005561D4 . 0FB652 07 movzx edx, byte ptr [edx+7]
005561D8 . 2BC2 sub eax, edx
005561DA . 99 cdq
005561DB . 33C2 xor eax, edx
005561DD . 2BC2 sub eax, edx
005561DF . 8BD8 mov ebx, eax
005561E1 . 83C3 30 add ebx, 30
005561E4 . 83FB 39 cmp ebx, 39
005561E7 . 7E 08 jle short 005561F1
005561E9 . 83FB 41 cmp ebx, 41
005561EC . 7D 03 jge short 005561F1
005561EE . 83C3 07 add ebx, 7
005561F1 > 8D45 F4 lea eax, dword ptr [ebp-C]
005561F4 . E8 A3EEEAFF call 0040509C
005561F9 . 8858 0F mov byte ptr [eax+F], bl
005561FC . 8B45 F4 mov eax, dword ptr [ebp-C]
005561FF . 0FB640 0C movzx eax, byte ptr [eax+C]
00556203 . 8B55 F4 mov edx, dword ptr [ebp-C]
00556206 . 0FB652 0D movzx edx, byte ptr [edx+D]
0055620A . 2BC2 sub eax, edx
0055620C . 99 cdq
0055620D . 33C2 xor eax, edx
0055620F . 2BC2 sub eax, edx
00556211 . 8BD8 mov ebx, eax
00556213 . 83C3 30 add ebx, 30
00556216 . 83FB 39 cmp ebx, 39
00556219 . 7E 08 jle short 00556223
0055621B . 83FB 41 cmp ebx, 41
0055621E . 7D 03 jge short 00556223
00556220 . 83C3 07 add ebx, 7
00556223 > 8D45 F4 lea eax, dword ptr [ebp-C]
00556226 . E8 71EEEAFF call 0040509C
0055622B . 8858 15 mov byte ptr [eax+15], bl
0055622E . 8B45 F4 mov eax, dword ptr [ebp-C]
00556231 . 0FB600 movzx eax, byte ptr [eax]
00556234 . 8B55 F4 mov edx, dword ptr [ebp-C]
00556237 . 0FB652 01 movzx edx, byte ptr [edx+1]
0055623B . 2BC2 sub eax, edx
0055623D . 99 cdq
0055623E . 33C2 xor eax, edx
00556240 . 2BC2 sub eax, edx
00556242 . 8BD8 mov ebx, eax
00556244 . 83C3 30 add ebx, 30
00556247 . 83FB 39 cmp ebx, 39
0055624A . 7E 08 jle short 00556254
0055624C . 83FB 41 cmp ebx, 41
0055624F . 7D 03 jge short 00556254
00556251 . 83C3 07 add ebx, 7
00556254 > 8D45 F4 lea eax, dword ptr [ebp-C]
00556257 . E8 40EEEAFF call 0040509C
0055625C . 8858 1B mov byte ptr [eax+1B], bl
0055625F . 8B45 F4 mov eax, dword ptr [ebp-C]
00556262 . 8B55 FC mov edx, dword ptr [ebp-4]
00556265 . E8 26EDEAFF call 00404F90-----------------------------------
0055626A . 75 04 jnz short 00556270-----------------------------(这个call,对比用的!)上面算完之后执行到这对比
0055626C . C645 FB 01 mov byte ptr [ebp-5], 1
00556270 > 33C0 xor eax, eax
00556272 . 5A pop edx
00556273 . 59 pop ecx
00556274 . 59 pop ecx
00556275 . 64:8910 mov dword ptr fs:[eax], edx
00556278 . EB 0A jmp short 00556284
0055627A .^ E9 6DE0EAFF jmp 004042EC
0055627F . E8 D0E3EAFF call 00404654
00556284 > 33C0 xor eax, eax
00556286 . 5A pop edx
00556287 . 59 pop ecx
00556288 . 59 pop ecx
00556289 . 64:8910 mov dword ptr fs:[eax], edx
0055628C . 68 AE625500 push 005562AE
00556291 > 8D45 F0 lea eax, dword ptr [ebp-10]
00556294 . BA 02000000 mov edx, 2
00556299 . E8 1AE9EAFF call 00404BB8
0055629E . 8D45 FC lea eax, dword ptr [ebp-4]
005562A1 . E8 EEE8EAFF call 00404B94
005562A6 . C3 retn
到这为止,,所有算法完成!!实在太多`偶上面那一堆就不写注释了。都是以此类推推推推推推.......推出来!不过每次取的位置不一样,ascii字符传回去的位置也不一样~~~
对比call:
节省篇幅`就只看这吧!
00404FB9 |> /8B0E /mov ecx, dword ptr [esi]-->这句,把算出的新code的前四位送到ecx,就是十六进制3430585A
('4','0','X','Z')
ZX04Z-XV00X-CC02C-VZ00V-BB02B
^^^^->就是这个`为啥倒存?内存嘛
00404FBB |. |8B1F |mov ebx, dword ptr [edi]-->这句,取原code的前四位,那就是5A5A5A5A('Z','Z','Z','Z')
00404FBD |. |39D9 |cmp ecx, ebx-------------->比较
00404FBF |. |75 58 |jnz short 00405019-------->不等就跳`
00404FC1 |. |4A |dec edx |
00404FC2 |. |74 15 |je short 00404FD9 |
00404FC4 |. |8B4E 04 |mov ecx, dword ptr [esi+4] |
00404FC7 |. |8B5F 04 |mov ebx, dword ptr [edi+4] |
00404FCA |. |39D9 |cmp ecx, ebx |
00404FCC |. |75 4B |jnz short 00405019 |
00404FCE |. |83C6 08 |add esi, 8 |
00404FD1 |. |83C7 08 |add edi, 8 |
00404FD4 |. |4A |dec edx |
00404FD5 |.^\75 E2 \jnz short 00404FB9 |
--------------------------------------------------------- |
00405019 |> \5A pop edx ^跳到这里,下面又进行比对
0040501A |. 38D9 cmp cl, bl------------------->比较cl和bl,也就是上面新code前四位的第一位和原code前四位的第一位
0040501C 75 10 jnz short 0040502E----------->不等就跳咯``跳就没得玩咯,,不过这里不跳(5A=5A)西西```
0040501E |. 38FD cmp ch, bh------------------->又比较第二位
00405020 75 0C jnz short 0040502E----------->不等就跳``跳也玩完!,5555,偶们这里要跳了
00405022 |. C1E9 10 shr ecx, 10------------------>看下这里,我们执行到上一代码,要跳过这里`不过为了分析`把上面nop
掉~就可以执行到这了~~~偶已经备了一份~!呵
这句ecx右移10位(16进制)
00405025 |. C1EB 10 shr ebx, 10------------------>这里ebx也右移10位,主要是为了下面比较
00405028 |. 38D9 cmp cl, bl------------------->前面比较了前两位,右移之后就可以比较第三位了
0040502A 75 02 jnz short 0040502E----------->不等就跳`
0040502C |. 38FD cmp ch, bh------------------->上一代码如果相等`就再比较第四位
0040502E |> 5F pop edi
0040502F |. 5E pop esi
00405030 |. 5B pop ebx
00405031 \. C3 retn
前面谈到这个软件有两个算法的超大"bug",嗯嗯``说出来作者别砍偶`汗
NO.1--> 仔细看这个软件,填注册码时不用写name,说明不是根据name算出来的!在调试的时候也没发现说调用函数去获取磁盘标号系统时间 什么的..
再看看算法``西西`
算法: 输入的code经过一系列算法得到一组新code,对比所输入code和新code的前四位,相等则成功
输入code:zzzzz-xxxxx-ccccc-vvvvv-bbbbb
算出的code:ZX04Z-XV00X-CC02C-VZ00V-BB02B ---->经过对比前四位,不等``出错,此注册号就通用
就是这样``所以说-->每个正确的注册码都是通用的!
(作者采用这种保护方式`唉`至少要再加个运算参数嘛!大意啦!但是这给偶们这堆穷鬼提供方便也不错)
NO.2--> 偶突然发现滴``,西西``送大家一个超级靓号: "00000-00000-00000-00000-00000"-> 哈哈``感谢注册``
为啥这样也行``没看上面代码分析的朋友肯定以为偶爆破之后用“全0”注册成功`呵,,其实不然不然~
大家看看``如果全部都是‘0’的话,无论它算法取的是哪位,它都是‘0’,两个‘0’在算,算来算去都是‘0’,呵对比当然也通过;
既然这个软件的号码是通用的``写注册机也没啥意义!况且还有全零"00000-00000-00000-00000-00000";
不过知道算法了!有兴趣滴或正在学编程滴兄弟可以写看看`
当然`爆破也是超超超级简单``找到出错信息后马上就能看到是哪个跳转在作怪``je->jnz; 万事OK!
偶试过两个版本``算法有所不同!不过保护方式还是一样~~~‘全0'一样可以用!
最后,前面说了此软件的这么多不好!嗯嗯``恶梦连连~汗!这里也谈谈此保护方式`,虽然每个注册码都是通用的`,也就是自已输入的code都能保证(差不多大概………(省略37598个字)……可能)是错的!当然除了'全0',那样那些有钱人只有掏腰包``呵呵`~
此软件好像有很多好玩的地方,偶没多大去研究了,最近这个vc++学得偶头疼`
它的注册信息保存在-HKEY_LOCAL_MACHINE\SOFTWARE\GZNSoft,右边键值删了就又可以研究啦!
最后问个汇编菜菜问题,,就是这个句子``偶总是搞不懂!
repe scas byte es:[ebx];---->这个样子的句子!偶在调试的时候总是碰到像这样的`就不知道该干啥了~~倒!汇编烂得很呐!能看懂代码(肯定有鬼`)汗~~~
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)