- 论坛徽章:
- 0
|
【软件名称】IT-PR0服务器企业版2.82.0826\r\n【保护方式】序列号本地验证(BASE64,CRC32,DES,MD5)+网络验证\r\n【使用工具】PEID0.94汉化版,flyODBG。\r\n【功能简介】IT-PRO 是一个对局域网上计算机进行有效监管的工具。它的主要功能包括: \r\n实时监视和记录局域网上各个计算机上的屏幕快照;网络执法官有的功能这个软件都有其他的功能还很多,就不多说了。 \r\n【破解过程】\r\n首先给大家介绍一下,这个安装需要在安装服务器端和客户端,加密主要在服务器端,服务器端的软件又分为了服务程序,和控制台程序,加密只加了服务程序。安装软件后,有15天的试用期,时间一到就提示过期,并且不能启动服务,我们破解的关键就在于让这个服务能够启动。读完软件的安装使用说明书,发现该软件的注册有点特别,先要升级序列号,然后才能进行注册。\r\n开始了啊,不过我还得讲讲破解这类软件的思路,(你废话真多,一只鞋子飞过来了)破解这类软件,首先得把本地验证搞定,然后再破解网络验证。\r\n\r\n本地验证的破解\r\nPEID0.94一查无壳,用插件进行算法扫描看到本程序使用了:BASE64,CRC32,DES,MD5算法。这么多太变态了 (不过不用怕,往下看你就会明白的)。\r\n在进行注册前先得升级序列号:\r\n填入如下序列号(每台电脑都可以用,当然你也可以用,这是我从软件的帮助偷看到的):200A0A03-81EF20F6310DAC87,点确定。\r\n\r\n\r\n然后呢,发现注册按钮已经可用了。\r\n\r\n那我们就点击注册吧,并填入如下信息:\r\n用户名称:ihhvqu[BCG][DFCG][OCN][PYG]][CZG]\r\n邮件地址:ihhvqu@tom.com\r\n电话:00000000\r\n注册码:1111111111111111\r\n点确定,提示:注册码错误。嘿嘿,那就用OD载入查找错误提示很容易来到:\r\n00452F2C 50 push eax\r\n00452F2D 51 push ecx\r\n00452F2E 52 push edx\r\n00452F2F 8BCB mov ecx,ebx\r\n00452F31 E8 0AECFFFF call OServer.00451B40 ;关键CALL,F7追入\r\n00452F36 85C0 test eax,eax\r\n00452F38 74 21 je short OServer.00452F5B ; 关键跳不跳over\r\n00452F3A 6A 00 push 0\r\n00452F3C 6A 10 push 10\r\n00452F3E 68 70894700 push OServer.00478970 ; 注册码错误\r\n00452F43 E8 40720100 call <jmp.&MFC42.#1200>\r\nOD重新载入,从00452F31一行追入后来到:\r\n00451B40 64:A1 00000000 mov eax,dword ptr fs:[0] ;当光条停在这里时在EAX中可以看到我们的假注册码,\r\n00451B46 6A FF push -1\r\n00451B48 68 882A4700 push OServer.00472A88\r\n00451B4D 50 push eax\r\n……………………………………………………………..……..\r\n…………………省略一段代码…………………………………\r\n……………………………………………………………………\r\n00451BB5 5F pop edi\r\n00451BB6 5E pop esi\r\n00451BB7 5B pop ebx\r\n00451BB8 83C4 0C add esp,0C\r\n00451BBB C2 0C00 retn 0C \r\n00451BBE 8B4C24 24 mov ecx,dword ptr ss:[esp+24] 估计上面几个CALL就是算法CALL了,这里就不分析了,本文主要是为了讲思路。\r\n00451BC2 8B5424 20 mov edx,dword ptr ss:[esp+20] ; 到这一行又看到了我的假注册码.\r\n00451BC6 51 push ecx ;当光条停在这一行时,在EDX中可以看到真注册码(嘿嘿虽然用了很多加密算法又怎么样,最终还是明码),我这里看到的是:89CE436CAF0AF582,看到这里我们就可以做个内存注册机了(内存注册机的制作就省略了本文主要是讲思路),本地验证就这样被搞定。\r\n00451BC7 52 push edx\r\n00451BC8 FF15 B8674700 call dword ptr ds:[<&MSVCRT._str>; MSVCRT._stricmp\r\n00451BCE 83C4 08 add esp,8\r\n\r\n破解网络验证\r\n现在我们关闭OD,重新注册填好刚才的注册码,运行OServer.exe,顺利启动,不过好景不长,才过几分钟就出现如下提示信息。\r\n\r\n没办法还得请出OD,搜索字符串:“产品注册信息不正确!”很快就找到上面的提示信息。双击来到如下代码处:\r\n00459DB0 64:A1 00000000 mov eax,dword ptr fs:[0] \r\n00459DB6 6A FF push -1\r\n00459DB8 68 B43B4700 push OServer.00473BB4\r\n…………………………………………………………………….\r\n……………………省略一段代码……………………………….\r\n…………………………………………………………………....\r\n00459DE5 FF15 90684700 call dword ptr ds:[<&USER32.IsIc>; USER32.IsIconic\r\n00459DEB 85C0 test eax,eax\r\n00459DED /74 09 je short OServer.00459DF8 \r\n00459DEF 6A 09 push 9\r\n00459DF1 8BCE mov ecx,esi\r\n00459DF3 E8 C6060100 call <jmp.&MFC42.#6215>\r\n00459DF8 8B57 20 mov edx,dword ptr ds:[edi+20] \r\n00459DFB 52 push edx\r\n00459DFC FF15 94684700 call dword ptr ds:[<&USER32.SetF>; USER32.SetForegroundWindow\r\n00459E02 8BCE mov ecx,esi\r\n00459E04 E8 F7CDFFFF call OServer.00456C00 \r\n00459E09 68 A0044900 push OServer.004904A0 ; ASCII \"<pid>-<rid>\"\r\n00459E0E 8D4C24 10 lea ecx,dword ptr ss:[esp+10]\r\n00459E12 E8 47000100 call <jmp.&MFC42.#537>\r\n00459E17 8D4C24 08 lea ecx,dword ptr ss:[esp+8]\r\n00459E1B C78424 90000000 000000>mov dword ptr ss:[esp+90],0\r\n00459E26 E8 359AFFFF call OServer.00453860\r\n00459E2B 68 1F000200 push 2001F\r\n00459E30 68 D8A94800 push OServer.0048A9D8 ; ASCII \"software\\TEC\\Ocular.1\\Server\"\r\n00459E35 68 02000080 push 80000002\r\n00459E3A 8D4C24 14 lea ecx,dword ptr ss:[esp+14]\r\n00459E3E C68424 9C000000 01 mov byte ptr ss:[esp+9C],1\r\n00459E46 E8 459AFFFF call OServer.00453890\r\n00459E4B 85C0 test eax,eax\r\n00459E4D 75 18 jnz short OServer.00459E67 \r\n00459E4F 68 1F000200 push 2001F\r\n00459E54 68 D8A94800 push OServer.0048A9D8 ; ASCII \"software\\TEC\\Ocular.1\\Server\"\r\n00459E59 68 02000080 push 80000002\r\n00459E5E 8D4C24 14 lea ecx,dword ptr ss:[esp+14]\r\n00459E62 E8 699AFFFF call OServer.004538D0\r\n00459E67 8B4424 0C mov eax,dword ptr ss:[esp+C]\r\n00459E6B 8D4C24 08 lea ecx,dword ptr ss:[esp+8]\r\n00459E6F 50 push eax\r\n00459E70 68 6C014900 push OServer.0049016C ; ASCII \"RegisterId\"\r\n00459E75 E8 F69EFFFF call OServer.00453D70\r\n00459E7A 6A 00 push 0\r\n00459E7C 68 44100000 push 1044\r\n00459E81 68 9C924700 push OServer.0047929C ; 产品注册信息不正确!\r\n上面的一大段代码只有那么三四个CALL和跳转,但是无论怎么跳,都会把OServer.exe服务关闭(在这里我发现程序是先关闭OServer.exe服务然后再弹出那个提示信息的,所以不能让他关闭OServer.exe服务),所以最后确定关键点不是这里。\r\n我们在:00459DB0一行下断(也就是上面那一大段代码的最上面一行。)然后OD重新载入,输入正确的注册码,OServer.exe正确启动,几分钟后(因为大概是几分钟才后才进行的网络验证)被断下:\r\n00459DB0 64:A1 00000000 mov eax,dword ptr fs:[0] ;被断在这里\r\n00459DB6 6A FF push -1\r\n00459DB8 68 B43B4700 push OServer.00473BB4\r\n00459DBD 50 push eax\r\n00459DBE 64:8925 00000000 mov dword ptr fs:[0],esp\r\n00459DC5 81EC 80000000 sub esp,80\r\n00459DCB 56 push esi\r\n在00459DB0一行被断下后,看堆栈:\r\n0012FC04 00456A2D 返回到 OServer.00456A2D 来自 OServer.00459DB0\r\n0012FC08 00F28570\r\n0012FC0C 00000000\r\n0012FC10 004569E0 OServer.004569E0\r\n看到了吗,这就表示这段代码是从00456A2D过来的。那我们就Ctrl+G到00456A2D去看看吧,很快我们来到这里:\r\n004569E0 81EC C0000000 sub esp,0C0\r\n004569E6 53 push ebx\r\n004569E7 56 push esi\r\n004569E8 8BD9 mov ebx,ecx\r\n004569EA 57 push edi\r\n004569EB B9 09000000 mov ecx,9\r\n004569F0 33C0 xor eax,eax\r\n004569F2 8D7C24 15 lea edi,dword ptr ss:[esp+15]\r\n004569F6 C64424 14 00 mov byte ptr ss:[esp+14],0\r\n004569FB F3:AB rep stos dword ptr es:[edi]\r\n004569FD 66:AB stos word ptr es:[edi]\r\n004569FF AA stos byte ptr es:[edi]\r\n00456A00 8B8424 D0000000 mov eax,dword ptr ss:[esp+D0]\r\n00456A07 48 dec eax\r\n00456A08 0F84 2A010000 je OServer.00456B38 \r\n00456A0E 48 dec eax\r\n00456A0F 74 2F je short OServer.00456A40\r\n00456A11 83E8 08 sub eax,8\r\n00456A14 0F85 B1010000 jnz OServer.00456BCB ; 一看下面的kill就明白了这里一定要跳,只要这里跳过去就不会把Oserver.exe服务关闭。\r\n00456A1A 8B43 20 mov eax,dword ptr ds:[ebx+20]\r\n00456A1D 6A 0A push 0A\r\n00456A1F 50 push eax\r\n00456A20 FF15 E4684700 call dword ptr ds:[<&USER32.Kill>; USER32.KillTimer ;看到这个函数没有,有个kill好可怕呀,看来就是他了\r\n00456A26 8BCB mov ecx,ebx\r\n00456A28 E8 83330000 call OServer.00459DB0\r\n00456A2D 8BCB mov ecx,ebx ; *****\r\n00456A2F E8 62380100 call <jmp.&MFC42.#2379>\r\n00456A34 5F pop edi\r\n00456A35 5E pop esi\r\n00456A36 5B pop ebx\r\n00456A37 81C4 C0000000 add esp,0C0\r\n00456A3D C2 0400 retn 4\r\n嘿嘿,我们把00456A14,一行的jnz改成jmp让它永远跳,就一切Ok了。修改后用OD保存,一试,一切正常,那个提示也没有了,并且软件一直运行正常无任何功能限制,破解得很完美。\r\n\r\n总结\r\n做任何事先都得有一个思路,破解软件也一样,不要被它的加密算法所吓倒,虽然算法难但却是明码,向这类软件就得先解除本地验证对软件的限制,然后再解除网络验证。还有就是找关键点时不要盲目的只看一些跳转,结果呢,向上面的一样,那些跳转其实都不是关键跳,关键的没在这一段,而是在这一段的前面,这种情况就得在那一段代码的最前面下断点,看堆栈,看看这段代码是从哪里过来的,从而查看这段代码前面的代码。 |
|