[ 破文标题 ] 联众世界游戏大厅去广告
[ 破文作者 ] 雨耕山
[ 破解工具 ] OllyDbg PEiD
[ 破解平台 ] 盗版WinXPSP3
[ 软件名称 ] 联众世界:版本 2.8.5.1(28100402)
[ 软件大小 ] 20.9M
[ 原版下载 ] http://www.ourgame.com/download/
[ 软件简介 ] 一款游戏软件
[ 破解声明 ] 只是不太喜欢其中的广告,没有其他目的。
=============================================================================
[ 破解过程 ]
我们要去除的广告暂时有3处:
1、启动大厅时弹出的广告窗口。启动联众世界大厅并登录,立马弹出一个广告窗口(有时内容是flash,有时内容如图1),每启动一次出现一次,不管你的耐性如何的好,也经受不了它长年累月的弹出这样的广告啊。
2、退出大厅时弹出的广告窗口。内容也是flash,如果你不点击退出按钮,等20秒以后它自己才会退出。
3、右上角处的广告窗口。内容是flash,鼠标经过时,广告还会变大。
首先,去除广告一,即登录游戏大厅后弹出的广告:
拿出PEid先查查壳,看到Microsoft Visual C++ 6.0 [Debug],心中偷着乐了一阵子。 OD载入glworld.exe,F9运行联众世界游戏大厅,出现登录窗口,输入你的用户名和密码后下断点bp UpdateWindow,然后点击登录按钮,断点生效,程序停止运行,F9几次(我电脑中是5次)后,游戏大厅的登录窗口消失,这时取消UpdateWindow断点,再下ShowWindow断点,F9大约4次,在堆栈窗口就可以看到我们想看到的了(如下图)。
猜想弹出的广告窗口来自404977附近,Ctrl+G我们来到404977处,看到404977处的Call了吗?估计它就是弹出广告窗口的罪魁祸首,试着把它上面的404970直接改为retn 8,另存为一个文件名后运行一下,果然弹出的广告没了,小小的爽了一下。另外:这个大厅只能开一个窗口,运行另存的文件前要关闭联众游戏大厅及OD中运行的大厅,不然你是看不到另存的游戏大厅运行的。(有兴趣的朋友可以做个多开补丁,这里我就不做了,我只想弄掉它的三个广告。)
B]至此,第1个登录后弹出的广告成功去除。[/B]
其次,去除广告二,即退出游戏大厅时弹出的广告:
利用“超级字串参考”插件看看能不能得到一些有用的提示,查到的字串如下图。
双击4C7A9C,来到
004C7A60 $ 8B4424 04 mov eax,dword ptr ss:[esp+4]
004C7A64 . 05 15FCFFFF add eax,-3EB ; Switch (cases 3EB..3F1)
004C7A69 . 83F8 06 cmp eax,6
004C7A6C . 77 57 ja short glworld.004C7AC5
004C7A6E . FF2485 E87A4C00 jmp near dword ptr ds:[eax*4+4C7AE8]
004C7A75 > 8B4C24 0C mov ecx,dword ptr ss:[esp+C] ;Case 3EB of switch 004C7A64
004C7A79 . 8B5424 08 mov edx,dword ptr ss:[esp+8]
004C7A7D . 51 push ecx
004C7A7E . 68 E4B15000 push glworld.0050B1E4 ; file://%s\default_hzh.htm
004C7A83 . 52 push edx
004C7A84 . EB 4E jmp short glworld.004C7AD4
004C7A86 > 8B4424 0C mov eax,dword ptr ss:[esp+C] ; Case 3EC of switch 004C7A64
004C7A8A . 8B4C24 08 mov ecx,dword ptr ss:[esp+8]
004C7A8E . 50 push eax
004C7A8F . 68 CCB15000 push glworld.0050B1CC ; file://%s\warning60.htm
004C7A94 . 51 push ecx
004C7A95 . EB 3D jmp short glworld.004C7AD4
004C7A97 > 8B5424 0C mov edx,dword ptr ss:[esp+C] ; Case 3EE of switch 004C7A64
004C7A9B . 52 push edx
004C7A9C . 68 B4B15000 push glworld.0050B1B4 ; file://%s\exitad.htm
004C7AA1 . EB 2C jmp short glworld.004C7ACF
004C7AA3 > 8B4C24 0C mov ecx,dword ptr ss:[esp+C] ; Case 3EF of switch 004C7A64
004C7AA7 . 8B5424 08 mov edx,dword ptr ss:[esp+8]
004C7AAB . 51 push ecx
004C7AAC . 68 9CB15000 push glworld.0050B19C ; file://%s\exdlgad.htm
004C7AB1 . 52 push edx
004C7AB2 . EB 20 jmp short glworld.004C7AD4
004C7AB4 > 8B4424 0C mov eax,dword ptr ss:[esp+C] ; Case 3F1 of switch 004C7A64
004C7AB8 . 8B4C24 08 mov ecx,dword ptr ss:[esp+8]
004C7ABC . 50 push eax
004C7ABD 68 E4B15000 push glworld.0050B1E4 ; file://%s\default_hzh.htm
004C7AC2 . 51 push ecx
004C7AC3 . EB 0F jmp short glworld.004C7AD4
004C7AC5 > 8B5424 0C mov edx,dword ptr ss:[esp+C] ;Default case of switch 004C7A64
004C7AC9 . 52 push edx
004C7ACA . 68 88B15000 push glworld.0050B188 ; file://%s\gg.htm
004C7ACF > 8B4424 10 mov eax,dword ptr ss:[esp+10] ; |
004C7AD3 . 50 push eax ; |s
004C7AD4 > FF15 A8504E00 call near dword ptr ds:[<&USER32.wsprintf>; \wsprintfA
004C7ADA . 83C4 0C add esp,0C
004C7ADD . 8D4C24 0C lea ecx,dword ptr ss:[esp+C]
004C7AE1 .^ E9 DE00FBFF jmp <jmp.&MFC42.#800>
004C7AE6 8BFF mov edi,edi
004C7AE8 . 757A4C00 dd glworld.004C7A75 ; Switch table used at 004C7A6E
004C7AEC . 867A4C00 dd glworld.004C7A86
004C7AF0 . C57A4C00 dd glworld.004C7AC5
鼠标停在004C7A60处,查看“调用结构树”(如下图),在4C7D50处我们在反汇编窗口中跟随。
004C7B10 /$ 64:A1 00000000 mov eax,dword ptr fs:[0]
004C7B16 |. 6A FF push -1
004C7B18 |. 68 08304E00 push glworld.004E3008
004C7B1D |. 50 push eax
004C7B1E |. 64:8925 00000000 mov dword ptr fs:[0],esp
004C7B25 |. 83EC 18 sub esp,18
004C7B28 |. 53 push ebx
004C7B29 |. 55 push ebp
004C7B2A |. 8B6C24 30 mov ebp,dword ptr ss:[esp+30]
004C7B2E |. 56 push esi
004C7B2F |. 85ED test ebp,ebp
004C7B31 |. 57 push edi
004C7B32 |. 75 15 jnz short glworld.004C7B49
004C7B34 |. 33C0 xor eax,eax
004C7B36 |. 8B4C24 28 mov ecx,dword ptr ss:[esp+28]
004C7B3A |. 64:890D 00000000 mov dword ptr fs:[0],ecx
004C7B41 |. 5F pop edi
004C7B42 |. 5E pop esi
004C7B43 |. 5D pop ebp
004C7B44 |. 5B pop ebx
004C7B45 |. 83C4 24 add esp,24
004C7B48 |. C3 retn
004C7B49 |> E8 DE01FBFF call <jmp.&MFC42.#1168>
004C7B4E |. 8B40 04 mov eax,dword ptr ds:[eax+4]
004C7B51 |. 8BB0 94000000 mov esi,dword ptr ds:[eax+94]
004C7B57 |. E8 D001FBFF call <jmp.&MFC42.#1168>
004C7B5C |. 8B78 04 mov edi,dword ptr ds:[eax+4]
004C7B5F |. 68 2C565000 push glworld.0050562C ; /Share
004C7B64 |. FF15 604E4E00 call near dword ptr ds:[<&MSVCRT._strdup>>; \_strdup
004C7B6A |. 83C4 04 add esp,4
004C7B6D |. 8987 94000000 mov dword ptr ds:[edi+94],eax
004C7B73 |. E8 B401FBFF call <jmp.&MFC42.#1168>
004C7B78 |. 8B40 04 mov eax,dword ptr ds:[eax+4]
004C7B7B |. 6A 00 push 0
004C7B7D |. 68 C8555000 push glworld.005055C8 ; Path
004C7B82 |. 8D4C24 1C lea ecx,dword ptr ss:[esp+1C]
004C7B86 |. 68 D0B75000 push glworld.0050B7D0
004C7B8B |. 51 push ecx
004C7B8C |. 8BC8 mov ecx,eax
004C7B8E |. E8 AB01FBFF call <jmp.&MFC42.#3522>
004C7B93 |. C74424 30 0000000>mov dword ptr ss:[esp+30],0
004C7B9B |. E8 8C01FBFF call <jmp.&MFC42.#1168>
004C7BA0 |. 8B40 04 mov eax,dword ptr ds:[eax+4]
004C7BA3 |. 8B90 94000000 mov edx,dword ptr ds:[eax+94]
004C7BA9 |. 52 push edx ; /block
004C7BAA |. FF15 A44E4E00 call near dword ptr ds:[<&MSVCRT.free>] ; \free
004C7BB0 |. 83C4 04 add esp,4
004C7BB3 |. E8 7401FBFF call <jmp.&MFC42.#1168>
004C7BB8 |. 8B40 04 mov eax,dword ptr ds:[eax+4]
004C7BBB |. 8D4C24 10 lea ecx,dword ptr ss:[esp+10]
004C7BBF |. 89B0 94000000 mov dword ptr ds:[eax+94],esi
004C7BC5 |. E8 1E00FBFF call <jmp.&MFC42.#540>
004C7BCA |. 68 14040000 push 414
004C7BCF |. C64424 34 01 mov byte ptr ss:[esp+34],1
004C7BD4 |. E8 9B01FBFF call <jmp.&MFC42.#823>
004C7BD9 |. 8BD8 mov ebx,eax
004C7BDB |. 8B45 08 mov eax,[arg.1]
004C7BDE |. 83C4 04 add esp,4
004C7BE1 |. 8D75 24 lea esi,[arg.8]
004C7BE4 |. 8903 mov dword ptr ds:[ebx],eax
004C7BE6 |. 8B4D 0C mov ecx,[arg.2]
004C7BE9 |. 894B 04 mov dword ptr ds:[ebx+4],ecx
004C7BEC |. 8B55 10 mov edx,[arg.3]
004C7BEF |. C1EA 10 shr edx,10
004C7BF2 |. 66:8953 08 mov word ptr ds:[ebx+8],dx
004C7BF6 |. 66:8B45 10 mov ax,word ptr ss:[ebp+10]
004C7BFA |. 66:8943 0A mov word ptr ds:[ebx+A],ax
004C7BFE |. 8B4D 14 mov ecx,[arg.4]
004C7C01 |. C1E9 10 shr ecx,10
004C7C04 |. 66:894B 0C mov word ptr ds:[ebx+C],cx
004C7C08 |. 66:8B55 14 mov dx,word ptr ss:[ebp+14]
004C7C0C |. 66:8953 0E mov word ptr ds:[ebx+E],dx
004C7C10 |. 8B45 1C mov eax,[arg.6]
004C7C13 |. C1E8 10 shr eax,10
004C7C16 |. 66:8943 10 mov word ptr ds:[ebx+10],ax
004C7C1A |. 66:8B4D 1C mov cx,word ptr ss:[ebp+1C]
004C7C1E |. 8D55 20 lea edx,[arg.7]
004C7C21 |. 66:894B 12 mov word ptr ds:[ebx+12],cx
004C7C25 |. 897424 20 mov dword ptr ss:[esp+20],esi
004C7C29 |. 895424 18 mov dword ptr ss:[esp+18],edx
004C7C2D |. 8A0A mov cl,byte ptr ds:[edx]
004C7C2F |. 84C9 test cl,cl
004C7C31 |. 74 17 je short glworld.004C7C4A
004C7C33 |. 81E1 FF000000 and ecx,0FF
004C7C39 |. 8D7B 14 lea edi,dword ptr ds:[ebx+14]
004C7C3C |. 8BC1 mov eax,ecx
004C7C3E |. C1E9 02 shr ecx,2
004C7C41 |. F3:A5 rep movs dword ptr es:[edi],dword ptr ds:>
004C7C43 |. 8BC8 mov ecx,eax
004C7C45 |. 83E1 03 and ecx,3
004C7C48 |. F3:A4 rep movs byte ptr es:[edi],byte ptr ds:[e>
004C7C4A |> 33C9 xor ecx,ecx
004C7C4C |. 8D73 14 lea esi,dword ptr ds:[ebx+14]
004C7C4F |. 8A0A mov cl,byte ptr ds:[edx]
004C7C51 |. C64419 14 00 mov byte ptr ds:[ecx+ebx+14],0
004C7C56 |. 8A06 mov al,byte ptr ds:[esi]
004C7C58 |. 84C0 test al,al
004C7C5A |. 0F84 78020000 je glworld.004C7ED8
004C7C60 |. 56 push esi
004C7C61 |. 8D4C24 14 lea ecx,dword ptr ss:[esp+14]
004C7C65 |. E8 78FFFAFF call <jmp.&MFC42.#860>
004C7C6A |. 8D4C24 10 lea ecx,dword ptr ss:[esp+10]
004C7C6E |. E8 2501FBFF call <jmp.&MFC42.#4202>
004C7C73 |. 6A 00 push 0
004C7C75 |. 68 E4685000 push glworld.005068E4 ; http://
004C7C7A |. 8D4C24 18 lea ecx,dword ptr ss:[esp+18]
004C7C7E |. E8 5107FBFF call <jmp.&MFC42.#6663>
004C7C83 |. 85C0 test eax,eax
004C7C85 |. 0F8D FB000000 jge glworld.004C7D86
004C7C8B |. 8D4C24 1C lea ecx,dword ptr ss:[esp+1C]
004C7C8F |. E8 54FFFAFF call <jmp.&MFC42.#540>
004C7C94 |. 8B5424 10 mov edx,dword ptr ss:[esp+10]
004C7C98 |. 8B45 0C mov eax,[arg.2]
004C7C9B |. 8B4C24 14 mov ecx,dword ptr ss:[esp+14]
004C7C9F |. 52 push edx
004C7CA0 |. 50 push eax
004C7CA1 |. 51 push ecx
004C7CA2 |. 8D5424 28 lea edx,dword ptr ss:[esp+28]
004C7CA6 |. 68 8C695000 push glworld.0050698C ; %s\Advert\%0d\%s
004C7CAB |. 52 push edx
004C7CAC |. C64424 44 02 mov byte ptr ss:[esp+44],2
004C7CB1 |. E8 26FFFAFF call <jmp.&MFC42.#2818>
004C7CB6 |. 8B4424 24 mov eax,dword ptr ss:[esp+24]
004C7CBA |. 8B4D 0C mov ecx,[arg.2]
004C7CBD |. 8B5424 28 mov edx,dword ptr ss:[esp+28]
004C7CC1 |. 83C4 14 add esp,14
004C7CC4 |. 50 push eax ; /<%s>
004C7CC5 |. 51 push ecx ; |<%0d>
004C7CC6 |. 52 push edx ; |<%s>
004C7CC7 |. 68 74695000 push glworld.00506974 ; |file://%s\Advert\%0d\%s
004C7CCC |. 56 push esi ; |s
004C7CCD |. FF15 A8504E00 call near dword ptr ds:[<&USER32.wsprintf>; \wsprintfA
004C7CD3 |. 83C4 14 add esp,14
004C7CD6 |. 8D4C24 1C lea ecx,dword ptr ss:[esp+1C]
004C7CDA |. 6A 00 push 0
004C7CDC |. 68 70695000 push glworld.00506970 ; ?
004C7CE1 |. E8 EE06FBFF call <jmp.&MFC42.#6663>
004C7CE6 |. 85C0 test eax,eax
004C7CE8 |. 7E 37 jle short glworld.004C7D21
004C7CEA |. 50 push eax
004C7CEB |. 8D4424 28 lea eax,dword ptr ss:[esp+28]
004C7CEF |. 50 push eax
004C7CF0 |. 8D4C24 24 lea ecx,dword ptr ss:[esp+24]
004C7CF4 |. E8 6900FBFF call <jmp.&MFC42.#4129>
004C7CF9 |. 50 push eax
004C7CFA |. 8D4C24 20 lea ecx,dword ptr ss:[esp+20]
004C7CFE |. C64424 34 03 mov byte ptr ss:[esp+34],3
004C7D03 |. E8 C2FEFAFF call <jmp.&MFC42.#858>
004C7D08 |. 8D4C24 24 lea ecx,dword ptr ss:[esp+24]
004C7D0C |. C64424 30 02 mov byte ptr ss:[esp+30],2
004C7D11 |. E8 AEFEFAFF call <jmp.&MFC42.#800>
004C7D16 |. 6A 20 push 20
004C7D18 |. 8D4C24 20 lea ecx,dword ptr ss:[esp+20]
004C7D1C |. E8 1907FBFF call <jmp.&MFC42.#6929>
004C7D21 |> 8B4C24 1C mov ecx,dword ptr ss:[esp+1C]
004C7D25 |. 51 push ecx
004C7D26 |. E8 0510FBFF call glworld.00478D30
004C7D2B |. 83C4 04 add esp,4
004C7D2E |. 85C0 test eax,eax
004C7D30 |. 75 46 jnz short glworld.004C7D78
004C7D32 |. 8B7C24 44 mov edi,dword ptr ss:[esp+44]
004C7D36 |. 85FF test edi,edi
004C7D38 |. 75 20 jnz short glworld.004C7D5A
004C7D3A |. 51 push ecx
004C7D3B |. 8D5424 18 lea edx,dword ptr ss:[esp+18]
004C7D3F |. 8BCC mov ecx,esp
004C7D41 |. 896424 28 mov dword ptr ss:[esp+28],esp
004C7D45 |. 52 push edx
004C7D46 |. E8 3FFFFAFF call <jmp.&MFC42.#535>
004C7D4B |. 8B45 08 mov eax,[arg.1]
004C7D4E |. 56 push esi
004C7D4F |. 50 push eax
004C7D50 |. E8 0BFDFFFF call glworld.004C7A60 //来到这里
004C7D55 |. 83C4 0C add esp,0C
004C7D58 |. EB 1E jmp short glworld.004C7D78
004C7D5A |> 83C9 FF or ecx,FFFFFFFF
到达4C7D50处后向上看,在注释的地方看到好多类似file://%s\Advert\%0d\%s的字串,这还是程序读写广告的地址,在段首4C7B10处再查看“调用结构树”(如下图)。
425457处我们再“在反汇编窗口中跟随”,来到
004253C0 /$ 6A FF push -1 //在这下断点
004253C2 |. 68 42924D00 push glworld.004D9242 ; SE 句柄安装
004253C7 |. 64:A1 00000000 mov eax,dword ptr fs:[0]
004253CD |. 50 push eax
004253CE |. 64:8925 00000000 mov dword ptr fs:[0],esp
004253D5 |. 51 push ecx
004253D6 |. 56 push esi
004253D7 |. 8BF1 mov esi,ecx
004253D9 |. 57 push edi
004253DA |. 8B86 78330000 mov eax,dword ptr ds:[esi+3378]
004253E0 |. 85C0 test eax,eax
004253E2 |. 0F84 A4000000 je glworld.0042548C //修改为jmp0042548c
004253E8 |. 68 BC040000 push 4BC
004253ED |. C786 74340000 010>mov dword ptr ds:[esi+3474],1
004253F7 |. E8 78290500 call <jmp.&MFC42.#823>
004253FC |. 8BF8 mov edi,eax
004253FE |. 83C4 04 add esp,4
00425401 |. 897C24 08 mov dword ptr ss:[esp+8],edi
00425405 |. 85FF test edi,edi
00425407 |. C74424 14 0000000>mov dword ptr ss:[esp+14],0
0042540F |. 74 16 je short glworld.00425427
00425411 |. FF15 20504E00 call near dword ptr ds:[<&USER32.GetDeskt>; [GetDesktopWindow
00425417 |. 50 push eax
00425418 |. E8 4F280500 call <jmp.&MFC42.#2864>
0042541D |. 50 push eax
0042541E |. 8BCF mov ecx,edi
00425420 |. E8 0BC7FDFF call glworld.00401B30
00425425 |. EB 02 jmp short glworld.00425429
00425427 |> 33C0 xor eax,eax
00425429 |> 33FF xor edi,edi
0042542B |. 8986 70340000 mov dword ptr ds:[esi+3470],eax
00425431 |. 897C24 08 mov dword ptr ss:[esp+8],edi
00425435 |. 8B86 78330000 mov eax,dword ptr ds:[esi+3378]
0042543B |. 8B8E 7C050000 mov ecx,dword ptr ds:[esi+57C]
00425441 |. 8B96 78050000 mov edx,dword ptr ds:[esi+578]
00425447 |. C74424 14 0100000>mov dword ptr ss:[esp+14],1
0042544F |. 85C0 test eax,eax
00425451 |. 74 12 je short glworld.00425465
00425453 |. 57 push edi
00425454 |. 51 push ecx
00425455 |. 52 push edx
00425456 |. 50 push eax
00425457 |. E8 B4260A00 call glworld.004C7B10 ; //来到这里
0042545C |. 8BF8 mov edi,eax
0042545E |. 83C4 10 add esp,10
00425461 |. 897C24 08 mov dword ptr ss:[esp+8],edi
00425465 |> 8B8E 70340000 mov ecx,dword ptr ds:[esi+3470]
0042546B |. 57 push edi
0042546C |. E8 DFC7FDFF call glworld.00401C50
00425471 |. 8B8E 70340000 mov ecx,dword ptr ds:[esi+3470]
00425477 |. 8B01 mov eax,dword ptr ds:[ecx]
00425479 |. FF90 C0000000 call near dword ptr ds:[eax+C0] ; //退出时弹出广告
0042547F |. 85FF test edi,edi
00425481 |. 74 09 je short glworld.0042548C
00425483 |. 57 push edi ; /block
00425484 |. E8 6B270500 call <jmp.&MFC42.#825> ; \free
00425489 |. 83C4 04 add esp,4
0042548C |> 8B4C24 0C mov ecx,dword ptr ss:[esp+C]
00425490 |. 5F pop edi
00425491 |. 5E pop esi
00425492 |. 64:890D 00000000 mov dword ptr fs:[0],ecx
00425499 |. 83C4 10 add esp,10
在004253C0处下断,Ctrl+F2重新装载游戏大厅,登录后再点击退出按钮,程序在断点处停了下来,F8慢慢走吧,到00425479时,弹出了广告窗口,向上看,在4253E2处,修改为jmp 0042548C即可。
关于退出大厅时出现的广告窗口,我们可以用SetTimer下断点,慢慢跟,把20000ms改为0、1、20ms或者你想要的时间,还可以用DestroyWindow下断点,慢慢调试,会看到一个SendMessageA(也许是PostMessageA,记不清了),将第2个参数WM_DESTROY改为WM_CLOSE,即由2改为1,有兴趣的朋友可以试试。
至此,退出大厅时弹出的广告窗口又成功去除了。
最后,就是大厅右上角的广告窗口,我已将它去除了(如下图),过程就不写了,希望和我一样的新手做为一个作业题自己动手去搞一搞,体会一下成功的喜悦。
- 标 题:联众世界游戏大厅去广告
- 作 者:雨耕山
- 时 间:2010-08-02 18:03:54
- 链 接:http://bbs.pediy.com/showthread.php?t=117839