首先说一下自己是菜鸟啦~

软件: 联众世界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


那位大侠能帮我解答 第一个广告的问题呢~   求教了~~  谢谢