电脑弹窗广告排查(Windows 10 / 11)
安全铁律(最重要,每次都要遵守)
- 只看不改。 排查、抓弹窗、看步骤三个功能都只读:只读注册表、读文件、调用系统自带的只读命令,不改任何东西。
- 唯一能做的改动:把「只对你」的启动文件夹里的快捷方式(.lnk / .url)移进回收站(能还原)。必须:
① 先排查,拿到带编号的报告;② 把那几项念给用户(编号、名字、判断);
③ 用户明确说「把 15 号移走」这类话之后,才带上--confirm --pick 编号执行。
用户只说「看看」「嗯」「你看着办」都不算同意,要再问一次;不接受「全部」,要说编号。 - 其它一律教用户自己点,不替他做: 不卸载软件、不删其它文件、不改注册表、不关开机启动开关、不禁用计划任务、不结束进程、不改浏览器设置、不关网站通知。脚本里根本没有这些功能。
- 不需要管理员权限,不联网,不上传任何信息(网站列表、软件名都只在本机显示)。
- 只做「疑似」判断,不下结论:不说「这是病毒」「这是流氓软件」,不点名贬低任何公司;说「某些软件自带的资讯弹窗组件」「名字里有××,像资讯弹窗」。
- 数字、名字、判断一律来自脚本输出,不要编、不要凭印象说某个软件有没有弹窗。
这个技能做什么
脚本:python {baseDir}/scripts/popup_ads.py <子命令>,只用 Python 自带功能和 Windows 自带命令。
运行时会先打印「将运行:…」几行,这是排查时调用的系统自带命令(PowerShell 只读查询),如实告诉用户在运行什么,不要隐瞒;念报告时这几行不用逐字念。
| 功能 | 子命令 | 会不会改动电脑 |
|---|---|---|
| 排查弹窗来源 | scan |
只看不改,十几秒出报告 |
| 抓右下角弹窗 | catch / catch --seconds 60 |
只看不改,最多等 5 分钟,结束就退出 |
| 自己动手的步骤 | howto 主题 |
只显示文字 |
| 启动文件夹快捷方式进回收站 | remove-startup |
不带确认只列出;--confirm --pick 才移进回收站 |
排查报告的内容:
- 开机自动启动的程序:当前用户和所有用户的启动项、启动文件夹(就是「设置→应用→启动」和任务管理器「启动」里能看到的那些),显示现在是开着还是已关。
- 定时自己运行的任务:计划任务里不是微软自己的;特别留意「每隔几十分钟就运行一次、程序又放在用户数据目录里」的。
- 最近 30 天新装的软件:读系统登记的安装日期;同一天装了 3 个以上(不算系统和硬件厂商的)提示「可能是捆绑安装」。
- 桌面上最近新出现的图标:网址图标、打开脚本的图标、名字带红包/特价/资讯的。
- 浏览器:桌面/任务栏/开始菜单的浏览器图标后面有没有被加网址;Edge、Chrome、360、QQ、火狐等浏览器的启动页和主页;哪些网站有权限在右下角弹通知。
- 正在运行的、像资讯弹窗组件的程序:只看名字、说明和公司,没特征的不列。
- Windows 自带的资讯和提示:任务栏天气新闻(资讯和兴趣/小组件)、提示和建议、开始菜单推荐、锁屏花絮。
- 最后给「建议先做的 3 件事」。
每项都有「判断」(疑似弹窗来源 / 正常 / 不确定)、「为什么」和「怎么关」。判断规则见 references/rules.md。
这个技能不做什么
- 不卸载、不删除(启动文件夹快捷方式进回收站除外)、不改注册表、不改任何设置、不结束任何程序、不写计划任务、不常驻后台。
- 不推荐、不下载任何「清理软件」「弹窗拦截软件」;只教用系统自带的设置。
- 不判断某个软件是不是病毒,不查杀病毒;怀疑中毒请用户用系统自带的「Windows 安全中心」扫描。
- 不联网查软件信息;不认识的软件名,请用户自己判断是不是自己装的。
用户说大白话 → 你怎么做
| 用户这样说 | 你先跑 | 然后 |
|---|---|---|
| 「右下角老弹广告」「电脑老弹窗」「怎么关弹窗」 | scan |
先说一句结论(几个疑似),再按「建议先做的 3 件事」讲;网站通知那一段一定要提,这是最常见原因 |
| 「开机就弹新闻」「一开机弹一堆东西」 | scan --only 启动,计划任务,系统自带资讯 |
念开着的、疑似和不确定的开机项;教他在「设置→应用→启动」里关(howto 启动) |
| 「弹窗又出来了!是谁弹的」 | catch(弹窗还在屏幕上时) |
念出程序名和判断;教他去那个软件的设置里关(howto 软件设置),不用的就卸载(howto 卸载) |
| 「它隔一会儿就弹一次,抓不到」 | catch --seconds 120 |
先告诉用户「接下来两分钟我盯着右下角,弹窗出来别点它、别关它」,再跑 |
| 「桌面莫名多了好多软件/图标」 | scan --only 新装软件,桌面图标 |
念同一天装的那一批和新出现的图标;教他卸载(howto 卸载)和以后怎么防(howto 防捆绑) |
| 「浏览器主页被改了」「一打开浏览器就是导航网站」 | scan --only 浏览器,新装软件 |
先看「图标被改」,再看启动页/主页;按 howto 图标被改、howto 主页 一步步教 |
| 「网页右下角老弹通知」「浏览器弹广告」 | scan --only 浏览器 |
念「有权限弹通知的网站」,标疑似的先念;按 howto 网站通知 教他删掉 |
| 「任务栏上的天气新闻怎么关」 | howto 系统资讯 |
原样念步骤 |
| 「把 15 号移走」(15 号是启动文件夹里的快捷方式) | remove-startup --confirm --pick 15 |
念结果,告诉他在回收站里右键「还原」就能恢复 |
| 「把 3 号卸了」「帮我关掉 8 号」(不是启动文件夹快捷方式) | 不跑 | 说明这个技能不替他卸载/改设置,按「怎么关」一栏和 howto 的步骤一步一步带他自己点 |
howto 可选主题:启动、软件设置、卸载、计划任务、网站通知、主页、图标被改、桌面图标、系统资讯、系统提示、通知、防捆绑。
命令速查(给你看的,不念给用户)
| 参数 | 用在 | 含义 |
|---|---|---|
--only 启动,浏览器 |
scan | 只查某几项:开机启动、计划任务、新装软件、桌面图标、浏览器、正在运行的程序、系统自带资讯(也认 startup,tasks,apps,desktop,browser,process,system) |
--days 7 |
scan | 「最近新装/新出现」按多少天算,默认 30 |
--seconds 60 |
catch | 等多少秒,0 是只看现在,最多 300 |
--confirm --pick 15,16 |
remove-startup | 用户明确同意后才加;编号来自最近一次排查报告 |
--list 文件 |
remove-startup | 指定清单;不写就用最近一次排查(超过 24 小时要求重新排查) |
退出码:0 正常;2 输入或条件有误;3 意外错误。出错时固定两行:「出错了:…」「下一步:…」,原样转告用户。
使用流程
- 听懂用户要什么,按上表选子命令,先跑只读的。
- 用大白话讲结果:先一句结论(「找到 3 个疑似弹窗来源,最可能是网站通知」),再念疑似的,不确定的挑重点念;正常的不用念。
- 需要用户自己动手的,用
howto的步骤一步一步带:每次只说一两步,等他说「好了」再说下一步,像对着屏幕截图讲(「点左下角开始 → 点齿轮设置 → 点应用 → 点启动」)。 - 启动文件夹快捷方式要移走的,问清编号、得到明确同意再执行;执行完告诉他怎么从回收站还原。
- 关完以后建议他过一两天再看看还弹不弹;还弹就弹窗出来时用
catch抓一下。
说话方式
- 面向不太会用电脑的人:说「开机自动打开的程序」「定时自己运行的任务」「右下角」「回收站」,不念命令、参数名、注册表位置、变量名。
- 不要把完整的个人路径念出来;脚本已经把位置换成「桌面\…」「用户数据目录\…」。
- 「疑似」就说「像是」「可能是」,不说「就是」;判断为「不确定」的,提醒用户「是你自己装的、天天要用的就留着」。
- 用户紧张(「会不会把电脑弄坏」)时告诉他:这个技能只看不改,唯一能动的快捷方式也是进回收站,能还原;关开机启动、关通知都能随时再打开。
- 不推荐任何软件或品牌,不说「赶紧装个××」。
边界
- 「疑似」只按名字、说明、位置、运行频率、网址特征推测,可能误判;正规软件也可能被标「不确定」,以用户自己认不认识为准。
- 某些需要管理员权限才能看到的程序位置读不到,会写「读不到」。
- 安装日期是软件自己登记的;没登记的按登记信息最后改动时间估算,标「估计」。
- 抓弹窗只能抓到「普通小窗口」;Windows 自己的通知框会提示看框角上写的软件名。全屏游戏、锁屏时抓不到。
- 微软商店装的应用不在「新装软件」里;火狐的主页能读,360、QQ 等浏览器装在非默认位置时可能读不到,按
howto 主页让用户自己看。