-
-
[原创]联众世界2.8.2.3 去广告 艰辛历程 菜鸟小破
-
发表于:
2010-5-8 23:45
18797
-
[原创]联众世界2.8.2.3 去广告 艰辛历程 菜鸟小破
首先说一下自己是菜鸟啦~
软件: 联众世界2.8.2.3
目的: 去除凡人的广告。。。。我只完成了一小部分 学习交流啦~~
软件: OD
系统: win7
peid检测 vc写的主程序。
首先 说一下联众的广告
打开联众后 先是登陆 登陆后会出现一个flash弹窗广告。
然后界面的右边 有一大块的 广告界面
软件关闭后 会遗留一个flash广告窗口 几秒
=======================破解过程=========================
首先关闭联众世界 查看其目录文件
发现一个Advert的文件夹。 发现里面全部都是广告文件。 删除以后。 联众会自动从新下载。
查了一些网站的帖子。解决办法其实很简单的。 就是利用NTFS文件夹权限。限制写入
然后启动 联众世界 软件会提示 非法权限
这个我想还是很简单的 。
od载入 下MessageBoxA断点。 启动软件登陆 。 程序被断下。。
这个是被断下后的位置 很明显这个是一个弹窗的代码
00446220 /$ 6A 00 PUSH 0
00446222 |. 6A 30 PUSH 30
00446224 |. 68 3CA04E00 PUSH glworld.004EA03C ; 游戏目标路径读写错误,你可能对该路径没有足够的读写权限,请与你的系统管理员联系!
00446229 |. E8 2AA10100 CALL <JMP.&MFC42.#1200_?AfxMessageBox@@YGHPBDII@Z> ; //弹出messagebox窗口
0044622E \. C3 RETN
走到retn 返回上一个程序段
00445E25 |. 50 PUSH EAX
00445E26 |. 51 PUSH ECX
00445E27 |. 68 10A04E00 PUSH glworld.004EA010 ; %s\advert_%0d.dat
00445E2C |. 52 PUSH EDX ; //广告目录文件写入
00445E2D |. E8 2A9E0100 CALL <JMP.&MFC42.#2818_?Format@CString@@QAAXPBDZZ>
00445E32 |. 8B4424 10 MOV EAX,DWORD PTR SS:[ESP+10]
00445E36 |. 83C4 10 ADD ESP,10
00445E39 |. 6A 00 PUSH 0 ; /hTemplateFile = NULL
00445E3B |. 6A 20 PUSH 20 ; |Attributes = ARCHIVE
00445E3D |. 6A 02 PUSH 2 ; |Mode = CREATE_ALWAYS
00445E3F |. 6A 00 PUSH 0 ; |pSecurity = NULL
00445E41 |. 6A 01 PUSH 1 ; |ShareMode = FILE_SHARE_READ
00445E43 |. 68 00000040 PUSH 40000000 ; |Access = GENERIC_WRITE
00445E48 |. 50 PUSH EAX ; |FileName
00445E49 |. FF15 50B24C00 CALL DWORD PTR DS:[<&KERNEL32.CreateFileA>] ; \CreateFileA
00445E4F |. 83F8 FF CMP EAX,-1 ; // 检测文件 是否创建成功
00445E52 |. 75 35 JNZ SHORT glworld.00445E89 ; // 如果成功就跳走
00445E54 |. E8 C7030000 CALL glworld.00446220 ; //这个call 就是弹出窗口
00445E59 |. 8D4C24 00 LEA ECX,DWORD PTR SS:[ESP]
00445E5D |. C64424 10 00 MOV BYTE PTR SS:[ESP+10],0
00445E62 |. E8 DD9D0100 CALL <JMP.&MFC42.#800_??1CString@@QAE@XZ>
00445E67 |. 8D4C24 04 LEA ECX,DWORD PTR SS:[ESP+4]
00445E6B |. C74424 10 FFF>MOV DWORD PTR SS:[ESP+10],-1
00445E73 |. E8 CC9D0100 CALL <JMP.&MFC42.#800_??1CString@@QAE@XZ>
00445E78 |. 33C0 XOR EAX,EAX
00445E7A |. 8B4C24 08 MOV ECX,DWORD PTR SS:[ESP+8]
00445E7E |. 64:890D 00000>MOV DWORD PTR FS:[0],ECX
00445E85 |. 83C4 14 ADD ESP,14
00445E88 |. C3 RETN ; //关闭软件
00445E89 |> 50 PUSH EAX ; /hObject
00445E8A |. FF15 F0B24C00 CALL DWORD PTR DS:[<&KERNEL32.CloseHandle>] ; \CloseHandle
00445E90 |. 8B4C24 00 MOV ECX,DWORD PTR SS:[ESP]
00445E94 |. 51 PUSH ECX ; /FileName
00445E95 |. FF15 64B24C00 CALL DWORD PTR DS:[<&KERNEL32.DeleteFileA>] ; \DeleteFileA
00445E9B |. 8D4C24 00 LEA ECX,DWORD PTR SS:[ESP]
00445E9F |. C64424 10 00 MOV BYTE PTR SS:[ESP+10],0
00445EA4 |. E8 9B9D0100 CALL <JMP.&MFC42.#800_??1CString@@QAE@XZ>
00445EA9 |. 8D4C24 04 LEA ECX,DWORD PTR SS:[ESP+4]
00445EAD |. C74424 10 FFF>MOV DWORD PTR SS:[ESP+10],-1
00445EB5 |. E8 8A9D0100 CALL <JMP.&MFC42.#800_??1CString@@QAE@XZ>
00445EBA |. 8B4C24 08 MOV ECX,DWORD PTR SS:[ESP+8]
00445EBE |. B8 01000000 MOV EAX,1
00445EC3 |. 64:890D 00000>MOV DWORD PTR FS:[0],ECX
00445ECA |. 83C4 14 ADD ESP,14
00445ECD \. C3 RETN
我们很容易的发现 只要该走跳转就可以了
把00445E52的JNZ改成jmp就可以了
软件保存后。不会跳出来窗口了~ 广告也没有了。。。。
================== 破解 软件关闭时弹窗的窗口====================
大家可以发现 上面的破解只能破解软件 中的广告
软件关闭时 还会弹出一个烦人的遗留框。。
通过查看 它并不是一个ie窗口 所以不能够用 普通的 ShellExecuteA 来解决
通过查看软件的 字符串
查到了一小段代码
我们可以很容易的看到 这里字符串提醒了我们 exitad 的位置
但我如果 仅仅把它改成空白 那个窗口每次还会出现 只是内容没了。。
所以 我们下断点跟踪代码 看它实现的过程。。。。。
004AFC2E . 50 PUSH EAX
004AFC2F . 68 6CCF4E00 PUSH glworld.004ECF6C ; file://%s\warning60.htmfile://%s\default_hzh.htm
004AFC34 . 51 PUSH ECX
004AFC35 . EB 3D JMP SHORT glworld.004AFC74
004AFC37 > 8B5424 0C MOV EDX,DWORD PTR SS:[ESP+C] ; Case 3EE of switch 004AFC04
004AFC3B . 52 PUSH EDX
004AFC3C . 68 54CF4E00 PUSH glworld.004ECF54 ; file://%s\exitad.htm
004AFC41 . EB 2C JMP SHORT glworld.004AFC6F
004AFC43 > 8B4C24 0C MOV ECX,DWORD PTR SS:[ESP+C] ; Case 3EF of switch 004AFC04
004AFC47 . 8B5424 08 MOV EDX,DWORD PTR SS:[ESP+8]
004AFC4B . 51 PUSH ECX
004AFC4C . 68 3CCF4E00 PUSH glworld.004ECF3C ; file://%s\exdlgad.htm
004AFC51 . 52 PUSH EDX
004AFC52 . EB 20 JMP SHORT glworld.004AFC74
004AFC54 > 8B4424 0C MOV EAX,DWORD PTR SS:[ESP+C] ; Case 3F1 of switch 004AFC04
断下断点以后 我们点击退出程序 。。。
软件被停在了004AFC3C处。。。 我们F8单步步过 其实发现软件是用MFC写的
走过一个mfc的跳转
0045FC44 $- FF25 B4BA4C00 JMP DWORD PTR DS:[<&MFC42.#800_??1CString@@QAE@XZ>] ; MFC42.#800_??1CString@@QAE@XZ
我也不知道这个mfc是什么意思 好像mfc还加了密
发现走过跳转 就走进了mfc的领空 按ALT+F9执行到程序领空
回到程序领空 我们发现 联众世界的界面已经被关闭了 但广告还没出来
我们停在了 这2者中间
不难想象 上面这段mfc的代码 可能就是预读取 广告的内容吧。。。
继续跟着走。。。走到一个retn 返回
00418293 |. 57 PUSH EDI
00418294 |. 51 PUSH ECX
00418295 |. 52 PUSH EDX
00418296 |. 50 PUSH EAX
00418297 |. E8 147A0900 CALL glworld.004AFCB0
0041829C |. 8BF8 MOV EDI,EAX
0041829E |. 83C4 10 ADD ESP,10
004182A1 |. 897C24 08 MOV DWORD PTR SS:[ESP+8],EDI
004182A5 |> 8B8E 6C330000 MOV ECX,DWORD PTR DS:[ESI+336C]
004182AB |. 57 PUSH EDI
004182AC |. E8 1F91FEFF CALL glworld.004013D0
004182B1 |. 8B8E 6C330000 MOV ECX,DWORD PTR DS:[ESI+336C]
004182B7 |. 8B01 MOV EAX,DWORD PTR DS:[ECX]
004182B9 |. FF90 C0000000 CALL DWORD PTR DS:[EAX+C0]
004182BF |. 85FF TEST EDI,EDI
004182C1 |. 74 09 JE SHORT glworld.004182CC
004182C3 |. 57 PUSH EDI
004182C4 |. E8 AB790400 CALL <JMP.&MFC42.#825_??3@YAXPAX@Z>
004182C9 |. 83C4 04 ADD ESP,4
004182CC |> 8B4C24 0C MOV ECX,DWORD PTR SS:[ESP+C]
004182D0 |. 5F POP EDI
004182D1 |. 5E POP ESI
004182D2 |. 64:890D 00000>MOV DWORD PTR FS:[0],ECX
004182D9 |. 83C4 10 ADD ESP,10
004182DC \. C3 RETN
软件停在了0041829C 这时候 广告还没有出来
我们接着往下走
当我们走到004182B9 的时候 od停住了。。 缩小od 我们就可以看到 广告的窗口。
至此 我们很容易的发现 004182B9 就是弹出广告的地方。。。
我们把这句nop掉 就可以了~ 保存文件 就ok了~~~
当然 其实这段代码 就是一个预读和现实广告的代码 我们再走一个retn 把上层代码的call nop掉也行
===================== 关于启动时候的 flash广告====================
这是我到现在还没有解决的问题。。。
这个flash广告 读取的是一个在线网页的swf文件。。但在字符串中 找不到相应的位置。。。
下bp CreateWindowExA 断了好多次都没有找到。。。
初来乍到 希望各位高手给我点帮助和意见。。。
谢谢!
BY:Homily
修改好的附件。。。。
glworld.rar
那位大侠能帮我解答 第一个广告的问题呢~ 求教了~~ 谢谢
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!