去除雷电模拟器9的桌面弹窗广告
前言
分析过程仅供参考。
在桌面右下角有时会发现广告:
广告上已写明了雷电游戏平台,如何定位到程序?
定位弹窗程序
方法1(推荐)
利用VS携带的Spyxx工具定位窗口,Ctrl+F调出查找窗口,将查找程序工具的准心拖拽到窗口上,显示如下:
单击确定,定位到窗口的属性,选择“进程”选项卡
单击进程ID后蓝色的超链接部分,Spyxx将定位到对应程序:
电脑中使用everything搜索这个模块名,定位到雷电模拟器安装目录中的ldplayerpartner.exe
方法2
准备一个安装SharpOD插件的x64dbg,启用Drag Attach
,并以管理员权限运行x64dbg,随后拖拽x64dbg的图标到窗口上。
定位弹窗函数
知道弹窗进程后可以调试,使用调试器附加后,暂停程序
调用堆栈选项卡中,定位主线程中的函数,可定位到此处:
IDA中可以同步打开该程序,并重定位基址,以便于与调试器中地址对应。定位到程序停止处
窗口的消息分发函数,所以创建窗口后会停在这里。
回到上层,可以注意到,代码中还存在日志消息,这些信息可以辅助我们理解代码。
分析弹窗逻辑
存在一个版本判断:
只有9.1.30.0以上版本的才会弹出广告
用互斥体判断是否已经创建了广告弹窗,同时读取上一次弹窗时间,避免单天多次弹出广告
弹窗时间数据存储在%APPDATA%\leidian9\partner.data
相关判断逻辑:
父进程追踪
进程存在时,观察到如下进程关系:
可知广告进程由ldplayerservice.exe
启动,而ldplayerservice.exe
的父进程为services.exe
分析这个程序,发现这个程序注册了服务,观察主函数:
这里是携带参数运行的,创建、启动、停止、删除服务相关代码。
服务函数中关键代码如下:
可以看到,判断服务状态为RUNNING并调用了sub_408A90
该函数的主要代码如下:
一个循环中,每次循环睡眠约30min(1800000ms=30 * 60 * 1000),单次循环中,则是判断ldplayerpartner.exe
的状态
可判断,该服务仅用于每半小时启动一次ldplayerpartner.exe
,而ldplayerpartner.exe
的任务是弹出广告
去除广告弹窗
方法1:占用互斥体
让这个程序在后台保持运行:
#include <Windows.h>
#include <iostream>
int main()
{
CreateMutex(0, 0, L"{3536DC50-8442-4E00-A20E-E1AF6B2DF325}");
while(1)
getchar();
return 0;
}
方法2:禁用服务
根据父进程追踪中分析,在service.msc
中停止并禁用雷电模拟器的服务,可阻止广告进程的启动。
(完)