第一篇:
【文章标题】: Hide Files and Folders V2.1 算法分析
【文章作者】: [DCG]PeerLessSoul
【作者邮箱】: PeerLessSoul@Gmail.com
【作者主页】: http://114989149.qzone.qq.com
【作者QQ号】: 114989149
【软件名称】: Hide Files and Folders V2.1
【软件大小】: 737K
【下载地址】: www.download.com
【保护方式】: 注册码验证
【使用工具】: Peid,Ollyice,dede
【作者声明】: 本人小菜,请大侠们不要见笑……
-------------------------------------------------------------------------------------------------
Peid开始查壳……Borland Delphi 6.0 - 7.0 直接进入软件观看注册错误信息提示……窗口提示错误!
使用 dede载入程序分析……参看过程……找到UEnterReg单元,然后看右边有个按钮单击事件……双击这个事件……
然后记录下开始的地址段!我这里是004A10F1,dede可以关了~进入ollyice,载入主程序文件然后,ctrl+g 输入刚才找到哪个地址!然后下断……F9运行程序……点击注册,程序被断下,但是我们还没有输入任何伪码!被断在这里!
-------------------------------------------------------------------------------------------------
004A10F0 /$ 55 push ebp ;我们就被断在这里……往下看!
004A10F1 |. 8BEC mov ebp, esp
004A10F3 |. 6A 00 push 0
004A10F5 |. 53 push ebx
004A10F6 |. 56 push esi
004A10F7 |. 8BF2 mov esi, edx
004A10F9 |. 8BD8 mov ebx, eax
004A10FB |. 33C0 xor eax, eax
004A10FD |. 55 push ebp
004A10FE |. 68 6F114A00 push 004A116F
004A1103 |. 64:FF30 push dword ptr fs:[eax]
004A1106 |. 64:8920 mov fs:[eax], esp
004A1109 |. 8D45 FC lea eax, [ebp-4]
004A110C |. 8BCE mov ecx, esi
004A110E |. 8BD3 mov edx, ebx
004A1110 |. E8 C3FEFFFF call 004A0FD8
004A1115 |. 84C0 test al, al
004A1117 |. 74 40 je short 004A1159
004A1119 |. 8B45 FC mov eax, [ebp-4]
004A111C |. E8 0BF5FFFF call 004A062C ;关键CAll,我们下断在这里!
004A1121 |. 84C0 test al, al
004A1123 |. 74 1F je short 004A1144 ;关键je
004A1125 |. 8B45 FC mov eax, [ebp-4]
004A1128 |. E8 6BF8FFFF call 004A0998
004A112D |. 6A 00 push 0 ; /Arg1 = 00000000
004A112F |. 66:8B0D 7C114>mov cx, [4A117C] ; |
004A1136 |. B2 02 mov dl, 2 ; |
004A1138 |. B8 88114A00 mov eax, 004A1188 ; |ASCII "The registration code is correct.",CR," Thank you."
004A113D |. E8 8E10F9FF call 004321D0 ; \HFF.004321D0
004A1142 |. EB 15 jmp short 004A1159
004A1144 |> 6A 00 push 0 ; /Arg1 = 00000000
004A1146 |. 66:8B0D 7C114>mov cx, [4A117C] ; |
004A114D |. B2 01 mov dl, 1 ; |
004A114F |. B8 C0114A00 mov eax, 004A11C0 ; |ASCII "The registration code is incorrect."
004A1154 |. E8 7710F9FF call 004321D0 ; \HFF.004321D0
004A1159 |> 33C0 xor eax, eax
004A115B |. 5A pop edx
004A115C |. 59 pop ecx
004A115D |. 59 pop ecx
004A115E |. 64:8910 mov fs:[eax], edx
004A1161 |. 68 76114A00 push 004A1176
004A1166 |> 8D45 FC lea eax, [ebp-4]
004A1169 |. E8 2A35F6FF call 00404698
004A116E \. C3 retn
----------------------------------------------------------------------------------------------------------------------------
发现我们被断早了~往下看……004A1138 有注册成功的字样……上面又有个je,应该是关键跳。我们就想让哪个Je不跳我们就能注册成功……
那就看这个je是如何实现的……往上走……有个Call这个就是关键Call!取消全部断点,在004A111C下断……然后F7进入……
----------------------------------------------------------------------------------------------------------------------------
004A062C /$ 55 push ebp ;我们到这里……一下要慢慢走一下!注意观察Ollyice各个窗口的变化!
004A062D |. 8BEC mov ebp, esp
004A062F |. 83C4 F0 add esp, -10
004A0632 |. 53 push ebx
004A0633 |. 56 push esi
004A0634 |. 57 push edi
004A0635 |. 33D2 xor edx, edx
004A0637 |. 8955 F4 mov [ebp-C], edx
004A063A |. 8955 F0 mov [ebp-10], edx
004A063D |. 8945 FC mov [ebp-4], eax
004A0640 |. 8B45 FC mov eax, [ebp-4]
004A0643 |. E8 0045F6FF call 00404B48
004A0648 |. 33C0 xor eax, eax
004A064A |. 55 push ebp
004A064B |. 68 35074A00 push 004A0735
004A0650 |. 64:FF30 push dword ptr fs:[eax]
004A0653 |. 64:8920 mov fs:[eax], esp
004A0656 |. 33DB xor ebx, ebx
004A0658 |. E8 87F8FFFF call 0049FEE4
004A065D |. 8B45 FC mov eax, [ebp-4]
004A0660 |. E8 F342F6FF call 00404958
004A0665 |. 83F8 10 cmp eax, 10 ; 注册码长度同16比较!不同就失败
004A0668 |. 0F85 A4000000 jnz 004A0712
004A066E |. 8D45 F4 lea eax, [ebp-C]
004A0671 |. 50 push eax
004A0672 |. B9 08000000 mov ecx, 8
004A0677 |. BA 01000000 mov edx, 1
004A067C |. 8B45 FC mov eax, [ebp-4]
004A067F |. E8 3445F6FF call 00404BB8
004A0684 |. 8D45 F0 lea eax, [ebp-10]
004A0687 |. 50 push eax
004A0688 |. B9 08000000 mov ecx, 8
004A068D |. BA 09000000 mov edx, 9
004A0692 |. 8B45 FC mov eax, [ebp-4]
004A0695 |. E8 1E45F6FF call 00404BB8
004A069A |. 8D55 F8 lea edx, [ebp-8]
004A069D |. 8B45 F4 mov eax, [ebp-C]
004A06A0 |. E8 BB2BF6FF call 00403260
004A06A5 |. 837D F8 00 cmp dword ptr [ebp-8], 0
004A06A9 |. 75 67 jnz short 004A0712 ;004A06A0哪个Call计算前十位是否有字母,有这里jnz实现,注册失败!
004A06AB |. 8D55 F8 lea edx, [ebp-8]
004A06AE |. 8B45 F0 mov eax, [ebp-10]
004A06B1 |. E8 AA2BF6FF call 00403260
004A06B6 |. 837D F8 00 cmp dword ptr [ebp-8], 0
004A06BA |. 75 56 jnz short 004A0712 ;004A06B1哪个Call计算后六位是否有字母,有这里jnz实现,注册失败!
004A06BC |. BE 30000000 mov esi, 30
004A06C1 |> 33C0 /xor eax, eax
004A06C3 |. 8945 F8 |mov [ebp-8], eax
004A06C6 |. 8B45 FC |mov eax, [ebp-4]
004A06C9 |. E8 8A42F6FF |call 00404958
004A06CE |. 85C0 |test eax, eax
004A06D0 |. 7E 17 |jle short 004A06E9
004A06D2 |. BA 01000000 |mov edx, 1
004A06D7 |> 8BCE |/mov ecx, esi
004A06D9 |. 8B7D FC ||mov edi, [ebp-4]
004A06DC |. 3A4C17 FF ||cmp cl, [edi+edx-1]
004A06E0 |. 75 03 ||jnz short 004A06E5
004A06E2 |. FF45 F8 ||inc dword ptr [ebp-8]
004A06E5 |> 42 ||inc edx
004A06E6 |. 48 ||dec eax
004A06E7 |.^ 75 EE |\jnz short 004A06D7
004A06E9 |> 837D F8 05 |cmp dword ptr [ebp-8], 5
004A06ED |. 7E 09 |jle short 004A06F8
004A06EF |. C745 F8 FFFFF>|mov dword ptr [ebp-8], -1
004A06F6 |. EB 06 |jmp short 004A06FE
004A06F8 |> 46 |inc esi
004A06F9 |. 83FE 3A |cmp esi, 3A
004A06FC |.^ 75 C3 \jnz short 004A06C1
004A06FE |> 837D F8 00 cmp dword ptr [ebp-8], 0
004A0702 |. 7C 0E jl short 004A0712
004A0704 |. 8B45 FC mov eax, [ebp-4]
004A0707 |. E8 B0FDFFFF call 004A04BC ; 这个Call也是比较可疑我们进去……
004A070C |. 84C0 test al, al
004A070E |. 74 02 je short 004A0712
004A0710 |. B3 01 mov bl, 1
004A0712 |> 33C0 xor eax, eax
004A0714 |. 5A pop edx
004A0715 |. 59 pop ecx
004A0716 |. 59 pop ecx
004A0717 |. 64:8910 mov fs:[eax], edx
004A071A |. 68 3C074A00 push 004A073C
004A071F |> 8D45 F0 lea eax, [ebp-10]
004A0722 |. BA 02000000 mov edx, 2
004A0727 |. E8 903FF6FF call 004046BC
004A072C |. 8D45 FC lea eax, [ebp-4]
004A072F |. E8 643FF6FF call 00404698
004A0734 \. C3 retn
-----------------------------------------------------------------------------------------------------------------------------
我们进入004A04BC 这个Call,到这里!f8慢慢走一遍……
004A04BC /$ 55 push ebp
004A04BD |. 8BEC mov ebp, esp
004A04BF |. B9 06000000 mov ecx, 6
004A04C4 |> 6A 00 /push 0
004A04C6 |. 6A 00 |push 0
004A04C8 |. 49 |dec ecx
004A04C9 |.^ 75 F9 \jnz short 004A04C4
004A04CB |. 53 push ebx
004A04CC |. 56 push esi
004A04CD |. 8BD8 mov ebx, eax
004A04CF |. 33C0 xor eax, eax
004A04D1 |. 55 push ebp
004A04D2 |. 68 1A064A00 push 004A061A
004A04D7 |. 64:FF30 push dword ptr fs:[eax]
004A04DA |. 64:8920 mov fs:[eax], esp
004A04DD |. 8D45 FC lea eax, [ebp-4]
004A04E0 |. 8A13 mov dl, [ebx]
004A04E2 |. E8 9943F6FF call 00404880
004A04E7 |. 8B45 FC mov eax, [ebp-4]
004A04EA |. E8 BD89F6FF call 00408EAC
004A04EF |. 8BF0 mov esi, eax
004A04F1 |. 8D45 F8 lea eax, [ebp-8]
004A04F4 |. 8A53 01 mov dl, [ebx+1] ; 取出第2位
004A04F7 |. E8 8443F6FF call 00404880
004A04FC |. 8B45 F8 mov eax, [ebp-8]
004A04FF |. E8 A889F6FF call 00408EAC
004A0504 |. 03F0 add esi, eax ; 第1位+第2位
004A0506 |. 8D45 F4 lea eax, [ebp-C]
004A0509 |. 8A53 02 mov dl, [ebx+2] ;取出第3位
004A050C |. E8 6F43F6FF call 00404880
004A0511 |. 8B45 F4 mov eax, [ebp-C]
004A0514 |. E8 9389F6FF call 00408EAC
004A0519 |. 03F0 add esi, eax ; 上面的再加上第3位
004A051B |. 8D45 F0 lea eax, [ebp-10]
004A051E |. 8A53 03 mov dl, [ebx+3] ;取出第4位
004A0521 |. E8 5A43F6FF call 00404880
004A0526 |. 8B45 F0 mov eax, [ebp-10]
004A0529 |. E8 7E89F6FF call 00408EAC
004A052E |. 03F0 add esi, eax ; 上面+第4位
004A0530 |. A1 9C164B00 mov eax, [4B169C]
004A0535 |. 3B30 cmp esi, [eax] ; 上面结果同16比较
004A0537 0F85 BA000000 jnz 004A05F7 ; 不等于22就跳走!注册失败!
004A053D |. 8D45 EC lea eax, [ebp-14]
004A0540 |. 8A53 04 mov dl, [ebx+4] ; 取第5位
004A0543 |. E8 3843F6FF call 00404880
004A0548 |. 8B45 EC mov eax, [ebp-14]
004A054B |. E8 5C89F6FF call 00408EAC
004A0550 |. 8BF0 mov esi, eax
004A0552 |. 8D45 E8 lea eax, [ebp-18]
004A0555 |. 8A53 07 mov dl, [ebx+7] ; 取第8位
004A0558 |. E8 2343F6FF call 00404880
004A055D |. 8B45 E8 mov eax, [ebp-18]
004A0560 |. E8 4789F6FF call 00408EAC
004A0565 |. 03F0 add esi, eax ; 第5位+第8位
004A0567 |. 8D45 E4 lea eax, [ebp-1C]
004A056A |. 8A53 0A mov dl, [ebx+A] ; 取第11位
004A056D |. E8 0E43F6FF call 00404880
004A0572 |. 8B45 E4 mov eax, [ebp-1C]
004A0575 |. E8 3289F6FF call 00408EAC
004A057A |. 03F0 add esi, eax ;结果+第11位上值
004A057C |. 8D45 E0 lea eax, [ebp-20]
004A057F |. 8A53 0D mov dl, [ebx+D] ; 取第14位
004A0582 |. E8 F942F6FF call 00404880
004A0587 |. 8B45 E0 mov eax, [ebp-20]
004A058A |. E8 1D89F6FF call 00408EAC
004A058F |. 03F0 add esi, eax ;再加上第14位上的值
004A0591 |. A1 D4164B00 mov eax, [4B16D4]
004A0596 |. 3B30 cmp esi, [eax] ; 这里第5,8,11,14位相加的最终结果……同1E比较!
004A0598 75 5D jnz short 004A05F7 ;类似前面如果结果不是1e就跳走……注册就失败了……
004A059A |. 8D45 DC lea eax, [ebp-24]
004A059D |. 8A53 06 mov dl, [ebx+6] ;取第7位
004A05A0 |. E8 DB42F6FF call 00404880
004A05A5 |. 8B45 DC mov eax, [ebp-24]
004A05A8 |. E8 FF88F6FF call 00408EAC
004A05AD |. 8BF0 mov esi, eax
004A05AF |. 8D45 D8 lea eax, [ebp-28]
004A05B2 |. 8A53 09 mov dl, [ebx+9] ;取第10位
004A05B5 |. E8 C642F6FF call 00404880
004A05BA |. 8B45 D8 mov eax, [ebp-28]
004A05BD |. E8 EA88F6FF call 00408EAC
004A05C2 |. 03F0 add esi, eax ;第7位+第10位的
004A05C4 |. 8D45 D4 lea eax, [ebp-2C]
004A05C7 |. 8A53 0C mov dl, [ebx+C] ;取第13位
004A05CA |. E8 B142F6FF call 00404880
004A05CF |. 8B45 D4 mov eax, [ebp-2C]
004A05D2 |. E8 D588F6FF call 00408EAC ;上面结果再加上第13位上的值
004A05D7 |. 03F0 add esi, eax
004A05D9 |. 8D45 D0 lea eax, [ebp-30]
004A05DC |. 8A53 0F mov dl, [ebx+F] ;取第16位
004A05DF |. E8 9C42F6FF call 00404880
004A05E4 |. 8B45 D0 mov eax, [ebp-30]
004A05E7 |. E8 C088F6FF call 00408EAC
004A05EC |. 03F0 add esi, eax ;上面结果再加上第16位上的值
004A05EE |. A1 B4134B00 mov eax, [4B13B4]
004A05F3 |. 3B30 cmp esi, [eax] ; 这里第7,10,13,16位上的值总共加起来同8比较
004A05F5 |. 74 04 je short 004A05FB ;类似前面如果结果不是8就跳走……注册就失败了……
004A05F7 |> 33C0 xor eax, eax
004A05F9 |. EB 02 jmp short 004A05FD
004A05FB |> B0 01 mov al, 1
004A05FD |> 8BD8 mov ebx, eax
004A05FF |. 33C0 xor eax, eax
004A0601 |. 5A pop edx
004A0602 |. 59 pop ecx
004A0603 |. 59 pop ecx
004A0604 |. 64:8910 mov fs:[eax], edx
004A0607 |. 68 21064A00 push 004A0621
004A060C |> 8D45 D0 lea eax, [ebp-30]
004A060F |. BA 0C000000 mov edx, 0C
004A0614 |. E8 A340F6FF call 004046BC
004A0619 \. C3 retn
----------------------------------------------------------------------------------------------------------------------------
到这里应该算完了……感觉很讲不清楚……要自己走几遍……才能理解
我们总结一下算法!
1。注册码必须是16位长!不能包含任何非数字字符!
2。我们帮注册码按顺序写成X1,X2,X3,X4,X5,X6,X7,X8,X9,X10,X11,X12,X13,X14,X15,X16
那么就要满足这样的条件
22=X1+X2+X3+X4
30=X5+X8+X11+X14
8=X7+X10+X13+X16
//////////////////////////////////////////////////////////////////////
第二篇:
【文章标题】: 1st Security Agent V6.4 算法分析 (容易)
【文章作者】: [DCG]PeerLessSoul
【作者邮箱】: PeerLessSoul@Gmail.com
【作者主页】: http://114989149.qzone.qq.com
【作者QQ号】: 114989149
【软件名称】: 1st Security Agent
【软件大小】: 1.08M
【下载地址】: www.download.com
【保护方式】: 注册码验证
【使用工具】: Peid,Ollice
【作者声明】: 本人小菜,请大侠们不要见笑……
最近闲逛Download发现一款用来保护电脑安全的软件1st Security Agent ,主要功能和作用就让一些windows自带的程序运行的时候需要密码否则就不能使用!安装好程序……使用Peid查看为Borland Delphi 6.0 - 7.0.就直接使用ollice了,载入程序!下断 user32.MessageBoxA,OK! F9走!输入伪码1234567890点reg!程序被断下在这里!
-----------------------------------------------------------------------------------------------------------------------------
77D504EC /. 55 push ebp ;我们被断在这里!F8走!
77D504ED |. 8BEC mov ebp, esp
77D504EF |. 833D BC04D777>cmp dword ptr [77D704BC], 0
77D504F6 |. 74 24 je short 77D5051C
77D504F8 |. 64:A1 1800000>mov eax, fs:[18]
77D504FE |. 6A 00 push 0
77D50500 |. FF70 24 push dword ptr [eax+24]
77D50503 |. 68 240BD777 push 77D70B24
77D50508 |. FF15 C812D177 call [<&KERNEL32.InterlockedCompareEx>; kernel32.InterlockedCompareExchange
77D5050E |. 85C0 test eax, eax
77D50510 |. 75 0A jnz short 77D5051C
77D50512 |. C705 200BD777>mov dword ptr [77D70B20], 1
77D5051C |> 6A 00 push 0 ; /LanguageID = 0 (LANG_NEUTRAL)
77D5051E |. FF75 14 push dword ptr [ebp+14] ; |Style
77D50521 |. FF75 10 push dword ptr [ebp+10] ; |Title
77D50524 |. FF75 0C push dword ptr [ebp+C] ; |Text
77D50527 |. FF75 08 push dword ptr [ebp+8] ; |hOwner
77D5052A |. E8 2D000000 call MessageBoxExA ; \MessageBoxExA 这个就是出错的提示地方!
77D5052F |. 5D pop ebp ; 0012F3E8
77D50530 \. C2 1000 retn 10
-----------------------------------------------------------------------------------------------------------------------------
从上面的retn退出到这里!
-----------------------------------------------------------------------------------------------------------------------------
0048A66E |. E8 95CEF7FF call <jmp.&user32.MessageBoxA> ; 这里是叫出错提示!
0048A673 |. 8945 F8 mov [ebp-8], eax ;从上面retn处来到这里!
0048A676 |. 33C0 xor eax, eax
----------------------------------------------------------------------------------------------------------------------------往上下看看……发现上面几个Je不不能跳过这个MessageBoxA,那么就意味着,这一小段已经是注册错误时候必然经过的程序断!我们就想,可能再外面吧!外面有个判断注册的正确与否,然后错误就走我们现在在的这段程序段!我们就往下走~找到retn跳出了段程序……我们来到!
----------------------------------------------------------------------------------------------------------------------------004995E4 /$ 55 push ebp ;我们在这里下断!!!
004995E5 |. 8BEC mov ebp, esp
004995E7 |. 83C4 F8 add esp, -8
004995EA |. 33D2 xor edx, edx
004995EC |. 8955 F8 mov [ebp-8], edx
004995EF |. 8945 FC mov [ebp-4], eax
004995F2 |. 8B45 FC mov eax, [ebp-4]
004995F5 |. E8 66B6F6FF call 00404C60
004995FA |. 33C0 xor eax, eax
004995FC |. 55 push ebp
004995FD |. 68 52964900 push 00499652
00499602 |. 64:FF30 push dword ptr fs:[eax]
00499605 |. 64:8920 mov fs:[eax], esp
00499608 |. 6A 40 push 40
0049960A |. 8D55 F8 lea edx, [ebp-8]
0049960D |. B8 68964900 mov eax, 00499668 ; ASCII "L_INFORMATION"
00499612 |. E8 51F0FFFF call 00498668
00499617 |. 8B45 F8 mov eax, [ebp-8]
0049961A |. E8 51B6F6FF call 00404C70
0049961F |. 50 push eax
00499620 |. 8B45 FC mov eax, [ebp-4]
00499623 |. E8 48B6F6FF call 00404C70
00499628 |. 8BD0 mov edx, eax
0049962A |. A1 DCCF4C00 mov eax, [4CCFDC]
0049962F |. 8B00 mov eax, [eax]
00499631 |. 59 pop ecx
00499632 |. E8 510FFFFF call 0048A588 ; 这个就是Call就是CAll我们注册错误的那段代码
00499637 |. 33C0 xor eax, eax ; 我们往上一个retn出来到这里!
00499639 |. 5A pop edx
0049963A |. 59 pop ecx
0049963B |. 59 pop ecx
0049963C |. 64:8910 mov fs:[eax], edx
0049963F |. 68 59964900 push 00499659
00499644 |> 8D45 F8 lea eax, [ebp-8]
00499647 |. BA 02000000 mov edx, 2
0049964C |. E8 83B1F6FF call 004047D4
00499651 \. C3 retn
----------------------------------------------------------------------------------------------------------------------------
我们取消先前的断点,而在004995E4 下断!!!也就是这段代码的开头地方……再一次运行程序!注册~这下就被断在了004995E4 处~我们F8慢慢来……注意看右边的那些寄存器值.就在被断下的一瞬间,我们的寄存器值如下
EAX 012902D4 ASCII "This registration code is invalid"
ECX FFFFFFFE
EDX 004A8348 ASCII "M_BADCODE"
就看这几个了……你看,已经出现了This registration code is invalid,这个又有什么意思?这个表示……这段代码还是为注册出错以后提示做准备,注册验证的代码段还在外面……我们在走到00499651处retn出来!到这里!
----------------------------------------------------------------------------------------------------------------------------
004A821E |. 50 push eax
004A821F |. 8D55 D8 lea edx, [ebp-28]
004A8222 |. B8 CC824A00 mov eax, 004A82CC ; ASCII "BF8A83B980"
004A8227 |. E8 304DFEFF call 0048CF5C
004A822C |. 8B45 D8 mov eax, [ebp-28]
004A822F |. 50 push eax
004A8230 |. 8D45 D4 lea eax, [ebp-2C]
004A8233 |. 50 push eax
004A8234 |. B8 E0824A00 mov eax, 004A82E0 ; ASCII"BE828B999A8C9F88B1A0848E9F829E828B99B1A9BFA0BFBEB5"
004A8239 |. 5A pop edx
004A823A |. E8 1D4DFEFF call 0048CF5C
004A823F |. 8B55 D4 mov edx, [ebp-2C]
004A8242 |. A1 54ED4C00 mov eax, [4CED54]
004A8247 |. 59 pop ecx
004A8248 |. E8 8781FEFF call 004903D4
004A824D |> 8D55 D0 lea edx, [ebp-30]
004A8250 |. B8 34834A00 mov eax, 004A8334 ; ASCII "M_THANKS"
004A8255 |. E8 0E04FFFF call 00498668
004A825A |. 8B45 D0 mov eax, [ebp-30]
004A825D |. E8 8213FFFF call 004995E4
004A8262 |. EB 1F jmp short 004A8283 ;跳过了注册失败提示
004A8264 |> B8 4CED4C00 mov eax, 004CED4C
004A8269 |. E8 42C5F5FF call 004047B0
004A826E |. 8D55 CC lea edx, [ebp-34]
004A8271 |. B8 48834A00 mov eax, 004A8348 ; ASCII "M_BADCODE"
004A8276 |. E8 ED03FFFF call 00498668
004A827B |. 8B45 CC mov eax, [ebp-34]
004A827E |. E8 6113FFFF call 004995E4 ;注册失败提示框
004A8283 |> 33C0 xor eax, eax ; 又出来到这里!
004A8285 |. 5A pop edx
004A8286 |. 59 pop ecx
004A8287 |. 59 pop ecx
004A8288 |. 64:8910 mov fs:[eax], edx
004A828B |. 68 BA824A00 push 004A82BA
004A8290 |> 8D45 CC lea eax, [ebp-34]
004A8293 |. BA 0A000000 mov edx, 0A
004A8298 |. E8 37C5F5FF call 004047D4
004A829D |. 8D45 F4 lea eax, [ebp-C]
004A82A0 |. E8 0BC5F5FF call 004047B0
004A82A5 |. 8D45 F8 lea eax, [ebp-8]
004A82A8 |. BA 02000000 mov edx, 2
004A82AD |. E8 22C5F5FF call 004047D4
004A82B2 \. C3 retn
----------------------------------------------------------------------------------------------------------------------------
我们从上面的retn出来到04A8283,这里又是新的一个程序段……我们往上看……那么出错提示框就是在004A827E 这个Call,上面有个Jmp跳过了注册失败提示!但是在看看……004A8264 |> 这里有个接受的跳转……说明如果上面有个跳转,如果哪个跳转不实现,那么就有可能经过Jmp从而跳过了注册失败的提示!我们就右击004A8264 选择转到……我们转到这里……
-----------------------------------------------------------------------------------------------------------------------------
004A8134 /$ 55 push ebp
004A8135 |. 8BEC mov ebp, esp
004A8137 |. B9 06000000 mov ecx, 6
004A813C |> 6A 00 /push 0
004A813E |. 6A 00 |push 0
004A8140 |. 49 |dec ecx
004A8141 |.^ 75 F9 \jnz short 004A813C
004A8143 |. 51 push ecx
004A8144 |. 53 push ebx
004A8145 |. 56 push esi
004A8146 |. 8BF0 mov esi, eax
004A8148 |. 33C0 xor eax, eax
004A814A |. 55 push ebp
004A814B |. 68 B3824A00 push 004A82B3
004A8150 |. 64:FF30 push dword ptr fs:[eax]
004A8153 |. 64:8920 mov fs:[eax], esp
004A8156 |. 8D55 F4 lea edx, [ebp-C]
004A8159 |. 8B86 48030000 mov eax, [esi+348]
004A815F |. E8 5011FCFF call 004692B4
004A8164 |. 8B45 F4 mov eax, [ebp-C] ; 取出伪码
004A8167 |. 8D55 F8 lea edx, [ebp-8]
004A816A |. E8 6139FEFF call 0048BAD0
004A816F |. 8B55 F8 mov edx, [ebp-8]
004A8172 |. B8 4CED4C00 mov eax, 004CED4C
004A8177 |. E8 88C6F5FF call 00404804
004A817C |. E8 FBFDFFFF call 004A7F7C ;这里就是关键CAll
004A8181 |. 8BD8 mov ebx, eax
004A8183 |. 84DB test bl, bl
004A8185 |. 0F84 D9000000 je 004A8264 ;这个je关键
-----------------------------------------------------------------------------------------------------------------------------我们取消先前的全部断点……在004A814A下断……F8走~一下……发现关键Call跟进……到这里……
-----------------------------------------------------------------------------------------------------------------------------
004A7F7C /$ 53 push ebx
004A7F7D |. 56 push esi
004A7F7E |. 57 push edi
004A7F7F |. BF 4CED4C00 mov edi, 004CED4C
004A7F84 |. 33F6 xor esi, esi
004A7F86 |. 33DB xor ebx, ebx
004A7F88 |. 8B07 mov eax, [edi]
004A7F8A |. E8 E1CAF5FF call 00404A70
004A7F8F |. 83F8 0E cmp eax, 0E ;注册码长度与14比较,不是14不行!
004A7F92 |. 75 67 jnz short 004A7FFB
004A7F94 |. 8B07 mov eax, [edi]
004A7F96 |. 8038 36 cmp byte ptr [eax], 36 ; 第1位与6比
004A7F99 |. 0F94C0 sete al ;如果相同就为true!以下类似
004A7F9C |. 83E0 7F and eax, 7F
004A7F9F |. 03F0 add esi, eax
004A7FA1 |. 8B07 mov eax, [edi]
004A7FA3 |. 8078 02 32 cmp byte ptr [eax+2], 32 ; 第3位与字符2比
004A7FA7 |. 0F94C0 sete al
004A7FAA |. 83E0 7F and eax, 7F
004A7FAD |. 03F0 add esi, eax
004A7FAF |. 8B07 mov eax, [edi]
004A7FB1 |. 8078 03 31 cmp byte ptr [eax+3], 31 ; 第4位与字符1比
004A7FB5 |. 0F94C0 sete al
004A7FB8 |. 83E0 7F and eax, 7F
004A7FBB |. 03F0 add esi, eax
004A7FBD |. 8B07 mov eax, [edi]
004A7FBF |. 8078 04 39 cmp byte ptr [eax+4], 39 ; 第5位与字符9比
004A7FC3 |. 0F94C0 sete al
004A7FC6 |. 83E0 7F and eax, 7F
004A7FC9 |. 03F0 add esi, eax
004A7FCB |. 8B07 mov eax, [edi]
004A7FCD |. 8078 07 30 cmp byte ptr [eax+7], 30 ; 第8位与字符0比
004A7FD1 |. 0F94C0 sete al
004A7FD4 |. 83E0 7F and eax, 7F
004A7FD7 |. 03F0 add esi, eax
004A7FD9 |. 8B07 mov eax, [edi]
004A7FDB |. 8078 08 35 cmp byte ptr [eax+8], 35 ; 第9位与字符5比
004A7FDF |. 0F94C0 sete al
004A7FE2 |. 83E0 7F and eax, 7F
004A7FE5 |. 03F0 add esi, eax
004A7FE7 |. 8B07 mov eax, [edi]
004A7FE9 |. 8078 0A 33 cmp byte ptr [eax+A], 33 ; 第11位与字符3比
004A7FED |. 0F94C0 sete al
004A7FF0 |. 83E0 7F and eax, 7F
004A7FF3 |. 03F0 add esi, eax
004A7FF5 |. 83FE 07 cmp esi, 7
004A7FF8 |. 0F94C3 sete bl
004A7FFB |> 8BC3 mov eax, ebx
004A7FFD |. 5F pop edi
004A7FFE |. 5E pop esi
004A7FFF |. 5B pop ebx
004A8000 \. C3 retn
----------------------------------------------------------------------------------------------------------------------------
当七个比较都吻合时…004A8185 不实现……注册成功!
注册算法总结:
1.注册码长度为14
2.注册码格式为6?219??05?3???
还有他们公司其他软件,也大同小异.就顺便走一下算法了!
我写了个注册机…其中包括
"1st Security Agent V6.4"
"Access Controller V3.1"
"Best Network Security V1.6"
"Hide Files and Folders V2.5"
"Pc Security Tweaker V6.5"
"Bulletproof Public PC V3.3"
"Outlook Express Privacy V1.7"
大家可以试试看看……
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)