我爱电脑技术论坛's Archiver

tianshiren 发表于 2008-6-5 18:41

IT-PR0服务器企业版超强加密的破解

【软件名称】IT-PR0服务器企业版2.82.0826
LG~.mM.IZt 【保护方式】序列号本地验证(BASE64,CRC32,DES,MD5)+网络验证/o&{B'`y/@ X(bq5W
【使用工具】PEID0.94汉化版,flyODBG。J3Scx V6g5P|4a
【功能简介】IT-PRO 是一个对局域网上计算机进行有效监管的工具。它的主要功能包括: ,O(b*ka8sD I
实时监视和记录局域网上各个计算机上的屏幕快照;网络执法官有的功能这个软件都有其他的功能还很多,就不多说了。 HIfz*J?
【破解过程】
hF4S8l x)B.}j G!e 首先给大家介绍一下,这个安装需要在安装服务器端和客户端,加密主要在服务器端,服务器端的软件又分为了服务程序,和控制台程序,加密只加了服务程序。安装软件后,有15天的试用期,时间一到就提示过期,并且不能启动服务,我们破解的关键就在于让这个服务能够启动。读完软件的安装使用说明书,发现该软件的注册有点特别,先要升级序列号,然后才能进行注册。
x0VNjD?aRe_ 开始了啊,不过我还得讲讲破解这类软件的思路,(你废话真多,一只鞋子飞过来了)破解这类软件,首先得把本地验证搞定,然后再破解网络验证。 k,wpp`0G
8`&v~ O t0Fb
本地验证的破解
8Tu#e ^/|+_7Y&DBp PEID0.94一查无壳,用插件进行算法扫描看到本程序使用了:BASE64,CRC32,DES,MD5算法。这么多太变态了 (不过不用怕,往下看你就会明白的)。
:DH])`S&I 在进行注册前先得升级序列号:+N8u uw H
填入如下序列号(每台电脑都可以用,当然你也可以用,这是我从软件的帮助偷看到的):200A0A03-81EF20F6310DAC87,点确定。 k;N;n!} y|Xd(B9h1P
s1] _tE*|0X
*v#e)dU'|K,n
然后呢,发现注册按钮已经可用了。#r)Dk,l;Bt*td

.Q8] }-W4k} ^ 那我们就点击注册吧,并填入如下信息:0yYC2Qc\(ve#j'I
用户名称:ihhvqu[BCG][DFCG][OCN][PYG]][CZG]
1Y9[*VsV p'C 邮件地址:[email]ihhvqu@tom.com[/email]R H5?,U.ib RB)VL
电话:00000000#W.X8Wq/\Lg"r.^
注册码:11111111111111113G k(g c4Eir
点确定,提示:注册码错误。嘿嘿,那就用OD载入查找错误提示很容易来到:
9c\V-k$K8jf |FcPKi 00452F2C 50 push eax*YB*Ky2z7Q)C
00452F2D 51 push ecx
qm9tl$w2c%M;O:X0E 00452F2E 52 push edx+CQp7F:o|8T
00452F2F 8BCB mov ecx,ebx
&eQ{t$S'y 00452F31 E8 0AECFFFF call OServer.00451B40 ;关键CALL,F7追入
1U"D QL_4C,EWZh 00452F36 85C0 test eax,eaxv?U rR3KN,a
00452F38 74 21 je short OServer.00452F5B ; 关键跳不跳over
6{/j1[d*s0}+e 00452F3A 6A 00 push 0] |U_qJ!bK3}]#]
00452F3C 6A 10 push 109idp1fO@*V'@m
00452F3E 68 70894700 push OServer.00478970 ; 注册码错误
J bc#Fx(oc&m 00452F43 E8 40720100 call <jmp.&MFC42.#1200>.zt SpV I0s
OD重新载入,从00452F31一行追入后来到:,lS-Je%ti-Q ~#I6W
00451B40 64:A1 00000000 mov eax,dword ptr fs:[0] ;当光条停在这里时在EAX中可以看到我们的假注册码,9a:S+LE;EqCp
00451B46 6A FF push -1!lA&jQ%P6J
00451B48 68 882A4700 push OServer.00472A88%C xx)ptg+A z1B%x}Y
00451B4D 50 push eax
i8eTfY2q-NLk)o ……………………………………………………………..……..$XV0[S0G
…………………省略一段代码…………………………………
M3o+fq^2MQ V ……………………………………………………………………
z1b0^7Pk9V 00451BB5 5F pop edi@Gt_LKB
00451BB6 5E pop esi
'F9~/EF%MKg 00451BB7 5B pop ebxOD9f h!nt
00451BB8 83C4 0C add esp,0C O%nK.X+?@,iL
00451BBB C2 0C00 retn 0C
m"} aYvID 00451BBE 8B4C24 24 mov ecx,dword ptr ss:[esp+24] 估计上面几个CALL就是算法CALL了,这里就不分析了,本文主要是为了讲思路。
I Wq b!N ?1^)] 00451BC2 8B5424 20 mov edx,dword ptr ss:[esp+20] ; 到这一行又看到了我的假注册码.K3P#eE0QA
00451BC6 51 push ecx ;当光条停在这一行时,在EDX中可以看到真注册码(嘿嘿虽然用了很多加密算法又怎么样,最终还是明码),我这里看到的是:89CE436CAF0AF582,看到这里我们就可以做个内存注册机了(内存注册机的制作就省略了本文主要是讲思路),本地验证就这样被搞定。
-X"@{)N7~ 00451BC7 52 push edx
C6t$Q8f4x4Y 00451BC8 FF15 B8674700 call dword ptr ds:[<&MSVCRT._str>; MSVCRT._stricmp.| y$xt#b?
00451BCE 83C4 08 add esp,8
H^nG0_$@.e '`1|+Cbis+X;[Sz
破解网络验证
zis_,c$ftc\ 现在我们关闭OD,重新注册填好刚才的注册码,运行OServer.exe,顺利启动,不过好景不长,才过几分钟就出现如下提示信息。Gxr*XM;TJy%rD
1M0C3D9A |
没办法还得请出OD,搜索字符串:“产品注册信息不正确!”很快就找到上面的提示信息。双击来到如下代码处:Y X$I u0M
00459DB0 64:A1 00000000 mov eax,dword ptr fs:[0]
9R`UhU9Ui`p 00459DB6 6A FF push -1 g2| wm/S \.oe,|
00459DB8 68 B43B4700 push OServer.00473BB4
(F??/R-L4} } …………………………………………………………………….
'RM jc:` ……………………省略一段代码……………………………….
;BT d~]7x.sElz …………………………………………………………………....
w,D!C8U/[ ^ 00459DE5 FF15 90684700 call dword ptr ds:[<&USER32.IsIc>; USER32.IsIconic
[(l T!J k3~7M N?(zb 00459DEB 85C0 test eax,eax|\t+Wsl Q
00459DED /74 09 je short OServer.00459DF8
SPF%aE7]*_)S5B 00459DEF 6A 09 push 9
^1Rj,^1@0A2r#o 00459DF1 8BCE mov ecx,esi M!\Nhz;en{ N s
00459DF3 E8 C6060100 call <jmp.&MFC42.#6215> f"~-t&x?9J
00459DF8 8B57 20 mov edx,dword ptr ds:[edi+20]
,nH6_j$g0Kv { 00459DFB 52 push edx
^!B'Vp tw _L 00459DFC FF15 94684700 call dword ptr ds:[<&USER32.SetF>; USER32.SetForegroundWindow
TyPL]0Z"x E 00459E02 8BCE mov ecx,esiS9{L'\Z
00459E04 E8 F7CDFFFF call OServer.00456C00 6h r fPVRG-K0z
00459E09 68 A0044900 push OServer.004904A0 ; ASCII "<pid>-<rid>"
:j;RS9mD0?L 00459E0E 8D4C24 10 lea ecx,dword ptr ss:[esp+10]
cl Xnp 00459E12 E8 47000100 call <jmp.&MFC42.#537>8?4c0HdjM6T
00459E17 8D4C24 08 lea ecx,dword ptr ss:[esp+8]
-~{j ^n,RZ;aF+` 00459E1B C78424 90000000 000000>mov dword ptr ss:[esp+90],0
!azIUw ~M 00459E26 E8 359AFFFF call OServer.00453860
z!G p5Z{7usB,b8a'N 00459E2B 68 1F000200 push 2001F i)O/D8T9i'@,A!b
00459E30 68 D8A94800 push OServer.0048A9D8 ; ASCII "software\TEC\Ocular.1\Server"
$v;h3[P1X2K9y4_ 00459E35 68 02000080 push 80000002}4hE~Vx:}"e
00459E3A 8D4C24 14 lea ecx,dword ptr ss:[esp+14]
C?jVK.f 00459E3E C68424 9C000000 01 mov byte ptr ss:[esp+9C],1
)e0e2m%E0` 00459E46 E8 459AFFFF call OServer.00453890!~6@/Gg+K0vF2o
00459E4B 85C0 test eax,eax
5\]9@3t-Is 00459E4D 75 18 jnz short OServer.00459E67 [ g9gw Kf
00459E4F 68 1F000200 push 2001F
OpEu*g ` D 00459E54 68 D8A94800 push OServer.0048A9D8 ; ASCII "software\TEC\Ocular.1\Server".BT^ oJh
00459E59 68 02000080 push 80000002&~r{?6Uj [;I"of
00459E5E 8D4C24 14 lea ecx,dword ptr ss:[esp+14]
s R4G|C#e/} 00459E62 E8 699AFFFF call OServer.004538D0
:\5{*n%V5[n] 00459E67 8B4424 0C mov eax,dword ptr ss:[esp+C]:sw0_^#v%f&]
00459E6B 8D4C24 08 lea ecx,dword ptr ss:[esp+8]
K&}-{#l#Y&F/Y 00459E6F 50 push eax
`9d4M1w6Wb 00459E70 68 6C014900 push OServer.0049016C ; ASCII "RegisterId"0ex9U qUSE5F*X
00459E75 E8 F69EFFFF call OServer.00453D70
5?w]v^;j 00459E7A 6A 00 push 0
O-N!e o:Sv Cm 00459E7C 68 44100000 push 1044
L0[,AdW 00459E81 68 9C924700 push OServer.0047929C ; 产品注册信息不正确!
+l&bn'z)U#pl 上面的一大段代码只有那么三四个CALL和跳转,但是无论怎么跳,都会把OServer.exe服务关闭(在这里我发现程序是先关闭OServer.exe服务然后再弹出那个提示信息的,所以不能让他关闭OServer.exe服务),所以最后确定关键点不是这里。
j0{'rH~:\3MK3v 我们在:00459DB0一行下断(也就是上面那一大段代码的最上面一行。)然后OD重新载入,输入正确的注册码,OServer.exe正确启动,几分钟后(因为大概是几分钟才后才进行的网络验证)被断下::x}/Ut{ A O(Y
00459DB0 64:A1 00000000 mov eax,dword ptr fs:[0] ;被断在这里B@-]%{ G
00459DB6 6A FF push -1,y:O!Pq}+r
00459DB8 68 B43B4700 push OServer.00473BB4,Iv&r4[k1B;@1A vD
00459DBD 50 push eax@T&l)V)mv Qg
00459DBE 64:8925 00000000 mov dword ptr fs:[0],esp
R?G x$p 00459DC5 81EC 80000000 sub esp,80
Als5Q%Dr 00459DCB 56 push esi
[r R6OG 在00459DB0一行被断下后,看堆栈:llu ]OTrp1xP
0012FC04 00456A2D 返回到 OServer.00456A2D 来自 OServer.00459DB0
b~4umz*r 0012FC08 00F28570
7].S/b&n;E#v]!{6fi1a 0012FC0C 00000000
(A'b;dT2?0XS 0012FC10 004569E0 OServer.004569E0 HILO[5Yy U~e
看到了吗,这就表示这段代码是从00456A2D过来的。那我们就Ctrl+G到00456A2D去看看吧,很快我们来到这里:oD7C/F [O,yjv8q K
004569E0 81EC C0000000 sub esp,0C0:}1U^v"yB*a+O
004569E6 53 push ebx
/@ F Uw|$qs 004569E7 56 push esi
n8Y%t;H6L Jh"W*jH 004569E8 8BD9 mov ebx,ecx
YK.oH2rl 004569EA 57 push edi
2| F,W A1z[0\ 004569EB B9 09000000 mov ecx,9 X'M/rb;P
004569F0 33C0 xor eax,eaxJA)g"F dG{v
004569F2 8D7C24 15 lea edi,dword ptr ss:[esp+15]!w}7h!O@ f.@
004569F6 C64424 14 00 mov byte ptr ss:[esp+14],0
%`1D{#_%Fm!q#T 004569FB F3:AB rep stos dword ptr es:[edi]+IAq:?G
004569FD 66:AB stos word ptr es:[edi]
T f/?v%e 004569FF AA stos byte ptr es:[edi]
THToB,xO?;t 00456A00 8B8424 D0000000 mov eax,dword ptr ss:[esp+D0]byH-H @$DZ G
00456A07 48 dec eax,d.h!JI? b,a-e\3d
00456A08 0F84 2A010000 je OServer.00456B38
9@L.u;o&A T\ un 00456A0E 48 dec eax"U1}s b:nc$Gw0M `
00456A0F 74 2F je short OServer.00456A40!p3v%]x!a \
00456A11 83E8 08 sub eax,8
C!?`)V%s.O/Q O"o 00456A14 0F85 B1010000 jnz OServer.00456BCB ; 一看下面的kill就明白了这里一定要跳,只要这里跳过去就不会把Oserver.exe服务关闭。
-cM:^z&[ F#vs 00456A1A 8B43 20 mov eax,dword ptr ds:[ebx+20]2} KBR"S8Z9@ZQ
00456A1D 6A 0A push 0A C6UI?1RR(yQ@
00456A1F 50 push eaxE1d_ g k&X6y7`
00456A20 FF15 E4684700 call dword ptr ds:[<&USER32.Kill>; USER32.KillTimer ;看到这个函数没有,有个kill好可怕呀,看来就是他了
$]*lG I%VaU.Y!G 00456A26 8BCB mov ecx,ebx9AeW6|yv.JHjr9WwV
00456A28 E8 83330000 call OServer.00459DB0
4j.a$b9o^-m m 00456A2D 8BCB mov ecx,ebx ; *****
"C|1@[@A-h ?g 00456A2F E8 62380100 call <jmp.&MFC42.#2379>
^Z.e w*z*fe 00456A34 5F pop edi']sT,Cn-}
00456A35 5E pop esi
M9W O6}NF 00456A36 5B pop ebx g8z4\{5LOF
00456A37 81C4 C0000000 add esp,0C0
@P?K9Ru ?S 00456A3D C2 0400 retn 4
]+Vic9a)fzX 嘿嘿,我们把00456A14,一行的jnz改成jmp让它永远跳,就一切Ok了。修改后用OD保存,一试,一切正常,那个提示也没有了,并且软件一直运行正常无任何功能限制,破解得很完美。'\6@(K(~:~} j%f
@%Ul\Wy l+pt#B
总结
'^'o|!] d$l.DL9Y @ 做任何事先都得有一个思路,破解软件也一样,不要被它的加密算法所吓倒,虽然算法难但却是明码,向这类软件就得先解除本地验证对软件的限制,然后再解除网络验证。还有就是找关键点时不要盲目的只看一些跳转,结果呢,向上面的一样,那些跳转其实都不是关键跳,关键的没在这一段,而是在这一段的前面,这种情况就得在那一段代码的最前面下断点,看堆栈,看看这段代码是从哪里过来的,从而查看这段代码前面的代码。

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.