尘。 发表于 2016-1-25 10:22:03

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

weizhuojun 发表于 2017-4-22 13:00:49

太棒了,感谢楼主,Mrak一下太棒了,感谢楼主,Mrak一下

yyjpcx 发表于 2016-1-25 20:32:00

出个视频吧   好学习

hpwbgame 发表于 2016-4-18 02:03:19

很想学习下收费系统的软件广告 hook

揰掵佲 发表于 2016-1-25 10:28:35

感谢分享!

有妖气 发表于 2016-1-25 10:33:12

666666666666666666

Fallin丶out 发表于 2016-1-25 21:55:22

学习,hook

hkoit 发表于 2016-1-25 21:58:04

希望大家踊跃发言,我顶先











static/image/common/sigline.gif
http://pic.yupoo.com/cjzihmxkq_v/BW3GBnmK/medium.jpg

Arsing 发表于 2016-1-25 22:21:14

膜拜一下大神 ,学习了

qw1417 发表于 2016-2-2 17:33:41

怎么hook呢???

左手爱学习 发表于 2016-6-9 23:36:29

沙发路过了
页: [1] 2
查看完整版本: HOOK屏蔽某网游结束广告的分析与实现