HOOK屏蔽某网游结束广告的分析与实现
说明:因为新版的pp广告有时候不会弹出来,调试起来有点麻烦,为了方便,我用的是脱机版本的PP来调试,网络版的找法其实是一样的OD附加上游戏
下CreateProcessA CreateProcessW断点
关闭游戏之后发现,CreateProcessW断点触发了,
0012EF88 757C55C1/CALL 到 CreateProcessW 来自 shell32.757C55BB
0012EF8C 09B5FED4|ModuleFileName = "E:\Game\跑跑单机版\M01\AdBalloonExt.exe"
0012EF90 09B5AD60|CommandLine = ""E:\Game\跑跑单机版\M01\AdBalloonExt.exe" **** Hidden Message ***** 490 190 60 true"
0012EF94 00000000|pProcessSecurity = NULL
0012EF98 00000000|pThreadSecurity = NULL
0012EF9C 00000000|InheritHandles = FALSE
0012EFA0 04080414|CreationFlags = CREATE_SUSPENDED|CREATE_NEW_CONSOLE|CREATE_UNICODE_ENVIRONMENT|CREATE_DEFAULT_ERROR_MODE|80000
0012EFA4 00000000|pEnvironment = NULL
0012EFA8 09B5DD50|CurrentDir = "E:\Game\跑跑单机版\M01"
0012EFAC 0012EFF0|pStartupInfo = 0012EFF0
0012EFB0 09B5E220\pProcessInfo = 09B5E220
很明显,pp就是调用CreateProcessW来打开广告的进程
如果普通程序的话我们可以对CreateProcessW做一个HOOK,然后过滤掉AdBalloonExt.exe即可,但是这样感觉没啥意思,而且这样直接HOOKAPI也容易被游戏检测到
看看游戏调用的过程
00A8D140 55 push ebp
这个函数是PP主模块内最后一次调用的地方
00A8D1C0 C745 C0 3C00000>mov dword ptr ss:,0x3C
00A8D1C7 C745 CC 9C5DC70>mov dword ptr ss:,KartRide.00C75D9C ; UNICODE "open"
00A8D1CE C745 D0 60F9CB0>mov dword ptr ss:,KartRide.00CBF960 ; UNICODE "AdBalloonExt.exe"
00A8D1D5 8D4D FC lea ecx,dword ptr ss:
00A8D1D8 E8 93A498FF call KartRide.00417670
在这里我们找到如下的代码,把两个字符串压入堆栈了,直接把这个函数Retn掉是可以的,但是因为这是网游,有检测,直接修改代码区还要过检测啥的,不太建议采用这种硬碰硬的办法
这里还有一个办法就是把00C75D9C 或者00CBF960修改掉,但是这样游戏关闭之后会弹出一个错误的提示框,这里也不是我们想要的结果
继续往下看
00A8D1DD 8945 D4 mov dword ptr ss:,eax
00A8D1E0 C745 DC 0500000>mov dword ptr ss:,0x5
00A8D1E7 C745 C4 4001000>mov dword ptr ss:,0x140
00A8D1EE 8D45 C0 lea eax,dword ptr ss:
00A8D1F1 50 push eax
00A8D1F2 FF15 F063D800 call dword ptr ds: ; shell32.ShellExecuteExW
这里调用了ShellExecuteExW这个API,这个api有一个作用就是打开一个程序
PP估计就是调用此api来运行AdBalloonExt.ex的
而这里00A8D1F2 FF15 F063D800 call dword ptr ds:正好给我们创造了一个HOOK的条件
可以直接修改0xD863F0内保存的地址,让他指向我们自己构造的函数即可
回车进去
757D1E46 >8BFF mov edi,edi
757D1E48 55 push ebp
757D1E49 8BEC mov ebp,esp
757D1E4B 53 push ebx
757D1E4C 56 push esi
757D1E4D 8B75 08 mov esi,dword ptr ss:
757D1E50 833E 3C cmp dword ptr ds:,0x3C
757D1E53^ 0F85 66FDFEFF jnz shell32.757C1BBF
757D1E59 6A 00 push 0x0
757D1E5B 68 A81E7D75 push shell32.757D1EA8 ; UNICODE "MaximizeApps"
757D1E60 68 18148075 push shell32.75801418 ; UNICODE "Software\Microsoft\Windows\CurrentVersion\Explorer"
757D1E65 E8 46F60000 call <jmp.&SHLWAPI.#630>
757D1E6A 85C0 test eax,eax
757D1E6C 0F85 A6881900 jnz shell32.7596A718
757D1E72 57 push edi
757D1E73 8B7E 04 mov edi,dword ptr ds:
757D1E76 F7C7 00011000 test edi,0x100100
757D1E7C 0F84 8B020000 je shell32.757D210D
757D1E82 56 push esi
757D1E83 E8 3F000000 call shell32.757D1EC7
757D1E88 897E 04 mov dword ptr ds:,edi
757D1E8B 5F pop edi
757D1E8C 8BD8 mov ebx,eax
757D1E8E 53 push ebx
757D1E8F FF15 14117B75 call dword ptr ds:[<&API-MS-Win-Core-ErrorHandling->; kernel32.SetLastError
757D1E95 85DB test ebx,ebx
757D1E97^ 0F85 0FFDFEFF jnz shell32.757C1BAC
757D1E9D 33C0 xor eax,eax
757D1E9F 40 inc eax
757D1EA0 5E pop esi
757D1EA1 5B pop ebx
757D1EA2 5D pop ebp
757D1EA3 C2 0400 retn 0x4
函数末尾是Retn 0x4,记录一下,下面是代码的编写
大概流程可以是这样,
a.申请3字节,写入Retn 0x4这行汇编
b.把该内存地址写入0xD863F0
就这样三行代码,屏蔽PP结束广告的效果就可以实现了
当然你要做特征码搜索也是可以的,
End
QQ 305882211
太棒了,感谢楼主,Mrak一下太棒了,感谢楼主,Mrak一下 出个视频吧 好学习 很想学习下收费系统的软件广告 hook 感谢分享! 666666666666666666 学习,hook 希望大家踊跃发言,我顶先
static/image/common/sigline.gif
http://pic.yupoo.com/cjzihmxkq_v/BW3GBnmK/medium.jpg 膜拜一下大神 ,学习了 怎么hook呢??? 沙发路过了
页:
[1]
2