去除雷电模拟器9的桌面弹窗广告

前言

分析过程仅供参考。

在桌面右下角有时会发现广告:

image-20250721174047417

广告上已写明了雷电游戏平台,如何定位到程序?

定位弹窗程序

方法1(推荐)

利用VS携带的Spyxx工具定位窗口,Ctrl+F调出查找窗口,将查找程序工具的准心拖拽到窗口上,显示如下:

image-20250721174214050

单击确定,定位到窗口的属性,选择“进程”选项卡

image-20250721174401492

单击进程ID后蓝色的超链接部分,Spyxx将定位到对应程序:

image-20250721174441128

电脑中使用everything搜索这个模块名,定位到雷电模拟器安装目录中的ldplayerpartner.exe

方法2

准备一个安装SharpOD插件的x64dbg,启用Drag Attach,并以管理员权限运行x64dbg,随后拖拽x64dbg的图标到窗口上。

定位弹窗函数

知道弹窗进程后可以调试,使用调试器附加后,暂停程序

调用堆栈选项卡中,定位主线程中的函数,可定位到此处:

image-20250721175308638

IDA中可以同步打开该程序,并重定位基址,以便于与调试器中地址对应。定位到程序停止处

image-20250721175532352

image-20250721175557590

窗口的消息分发函数,所以创建窗口后会停在这里。

回到上层,可以注意到,代码中还存在日志消息,这些信息可以辅助我们理解代码。

分析弹窗逻辑

存在一个版本判断:

image-20250721222402749

只有9.1.30.0以上版本的才会弹出广告

image-20250721222426670

用互斥体判断是否已经创建了广告弹窗,同时读取上一次弹窗时间,避免单天多次弹出广告

弹窗时间数据存储在%APPDATA%\leidian9\partner.data

相关判断逻辑:

image-20250721224656337

父进程追踪

进程存在时,观察到如下进程关系:

image-20250721224602950

可知广告进程由ldplayerservice.exe启动,而ldplayerservice.exe的父进程为services.exe

分析这个程序,发现这个程序注册了服务,观察主函数:

image-20250721232636512

这里是携带参数运行的,创建、启动、停止、删除服务相关代码。

服务函数中关键代码如下:

image-20250721232722234

可以看到,判断服务状态为RUNNING并调用了sub_408A90

该函数的主要代码如下:

image-20250721232819077

一个循环中,每次循环睡眠约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中停止并禁用雷电模拟器的服务,可阻止广告进程的启动。

image-20250721233046255

(完)