/ Debug,Windows / 108浏览

记一次无法关闭的弹窗

背景

最近突然想起来梳理了一遍机器上安装的应用,于是把一个叫【Gigabyte Control Center】的应用给卸载了。卸载了之后也就没管了,反正也用不着。

就在今天,我重启了电脑后,右下角出来一个弹窗!如下图:

这不就是我卸载的那个应用吗?咋出现了呢?是没卸载干净吗?

分析

首先,让我们上工具,来看看这个弹窗是谁!

找凶手(上)

打开【Process Explorer】,将目标环拖到窗口上,便找到了这个应用!

没想到,不老实呀,居然还藏了一个服务。

简单,把服务关掉,服务移除,再删除 exe,手工。继续干活(此时的我还没意识到事情的严重性

一段时间之后,巧了,我又重启了机器。

于是!神奇的弹窗又出现了!!!

此时的我已经不淡定了,难道是我没删除成功?还是还有其他的应用在作祟!

找凶手(下)

既然是开机之后就会出现弹窗,也找到了弹窗进程就是GigabyteUpdateService服务启动的GigabyteDownloadAssistant.exe 那就好办了。

继续上工具,打开【process monitor】,勾选上 【选项】-【开启开机日志】

然后重启,就等凶手出现了。

重启后,再次打开【process monitor】便可保存日志,再次打开:

我们直接搜索 GigabyteUpdateService 即可,很快就锁定了目标:wpbbin.exe

这货是什么东西,看看它的详情:

具体信息也没有,看起来就像病毒。

再来看看,是谁启动的它。居然是 smss.exe 启动的它!

(这里没有图,日志被删了,恢复也没成功😂

smss.exe代表Session Manager Subsystem(会话管理子系统)。这是一个由Microsoft提供的关键系统进程,负责处理用户会话的创建、终止以及管理Windows系统的一些启动和关闭任务。当你启动计算机时,smss.exe是最先运行的进程之一,它负责初始化系统会话,设置系统变量,并且启动其他关键的系统进程

难道是它注入到 smss.exe 里面去了?

那我们来看看堆栈(忽略图中的内容,就是双击 smss 启动进程的那条记录,选择 堆栈即可):

看起来调用的模块也挺正常的,没有被注入的痕迹。

是系统行为?

如果没有注入,那就是 Windows 那些奇奇怪怪的行为了。

首先,怀疑是否存在特定的注册表,系统组件读取到 wpbbin.exe 时,会去启动它,就像 autochk.exe 那样。

于是,可以通过过滤器:

结果并没有查到信息,看来事情不简单了。

于是,在网上搜索了一下 wpbbin.exe 。(这里用百度会好一点)

于是,就能看到一个概念:WPBT。

WPBT(Windows Platform Binary Table) 由主板厂商将一个二进制文件编入BIOS。在每次启动的时候,BIOS将这个二进制文件载入内存,并填写Handoff memory项,告诉Windows内存在哪里,有多大。Windows的初始化进程Windows Session Manager (smss.exe)在启动的时候,会在寻找WPBT表的GUID,来定位这个表。如果定位成功,则把它拷入磁盘(如:WindowsSystem32Wpbbin.exe),并会在用户态运行它。 参考:https://download.microsoft.com/download/8/A/2/8A2FB72D-9B96-4E2D-A559-4A27CF905A80/windows-platform-binary-table.docx

果然是 Windows 的机制。

解决

找到问题就是解决问题的一半。接下来就简单了。

1. 关掉 WPBT 功能

方法一:修改注册表:

HKLMSYSTEMCurrentControlSetControlSession ManagerDisableWpbtExecution 为 1

方法二:其他方法

可以看这两个项目:

2. 关闭运行的服务

关闭/删除 服务:

stop-service -name GigabyteUpdateService
remove-Service -Name GigabyteUpdateService

3. 删除残留的文件

根据 process monitor 的记录,找到对应的地址:

删除文件:

  • C:windowssystem32wpbbin.exe
  • C:windowssystem32GigabyteUpdateService.exe
  • C:windowssystem32GigabyteDownloadAssistant.exe

再重启验证下,果然没有再弹窗了,任务管理器看看进程,也都不在了。

解决!

相关链接:

如何通过 C++ 实时监听 ETW 事件
如何通过 C++ 实时监听 ETW 事件
【译】调查并确定 Windows 运行速度变慢问题
【译】调查并确定 Windows 运行速度变慢问题
【译】丢失的 WPA 文档 —— 磁盘使用
【译】丢失的 WPA 文档 —— 磁盘使用
【译】丢失的 WPA 文档 —— CPU 调度
【译】丢失的 WPA 文档 —— CPU 调度
【译】丢失的 WPA 文档 —— CPU 采样
【译】丢失的 WPA 文档 —— CPU 采样
如何通过 PDH(Performance Data Helper) 获取性能计数器的值

0

  1. This post has no comment yet

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注