声明
本文仅做交流学习之用。在使用文章实现的功能之前请三思有无任何潜在的问题。因应用本文所述内容造成的任何影响本人概不负责。请遵守校规校纪。“我已经制止了啊!”
摘要
及早发现正在运行的“不想要”的程序。只需要简单的操作。今天就教给大家。
先决条件
- 安装有较新版本的 Windows 10 系统的希沃一体机:本文的示例设备在 2021 年制造,因此新于此日期的设备应当可以兼容。
- 为实现更为持久化的高级功能,你还需要:
- 解锁冰点还原的密码或者特殊软件。出于版权和可持续性要求,当前不会提供此工具。但是你可以试试
123456
或者000000
之类的简单密码。
- 解锁冰点还原的密码或者特殊软件。出于版权和可持续性要求,当前不会提供此工具。但是你可以试试
- Python 3 的最新版本。要我说旧版就不好,因为做不了错误重现。本文中的版本是
3.13.0
。 - 要对我的实现进行更改,你还需要一定的计算机、Python 和 XPath 基础知识。
- 下载好分享的 SEEWONotify.tar.gz 归档文件。访问码:6v0t SHA256 校验值:
F5E565F5BE71E927A288497078479FC760E04014103F109E871F16752FABB66E
。
原理
审核进程运行,然后使任务计划程序根据事件运行所编写的通知程序。
基础配置
安置好要执行的程序
随便找个地方,创个文件夹,把压缩包里的所有东西放进去。压缩包里应该包含内容如下的脚本。记住文件的位置,并在脚本内做出相应的调整。
import os import time from win10toast import ToastNotifier from ctypes import cast, POINTER from comtypes import CLSCTX_ALL from pycaw.pycaw import AudioUtilities, IAudioEndpointVolume import math last_run_time_file = r"C:\\Users\\seewo\\last_run_time.txt" icon_path = r"C:\\Users\\SEEWONotify\\WindowsSecurityIcon.ico" # 替换为你的图标文件路径 toaster = ToastNotifier() def get_last_run_time(): if os.path.exists(last_run_time_file): with open(last_run_time_file, 'r') as file: return float(file.read()) return 0 def update_last_run_time(): with open(last_run_time_file, 'w') as file: file.write(str(time.time())) # Get default audio device using PyCAW devices = AudioUtilities.GetSpeakers() interface = devices.Activate( IAudioEndpointVolume._iid_, CLSCTX_ALL, None) volume = cast(interface, POINTER(IAudioEndpointVolume)) currentVolumeDb = volume.GetMasterVolumeLevel() last_run_time = get_last_run_time() current_time = time.time() if current_time - last_run_time >= 300: # 间隔 5 分钟运行 update_last_run_time() # Change Volume volume.SetMasterVolumeLevel(- 24.0, None) toaster.show_toast("病毒和威胁防护", "Microsoft Windows Defender 防病毒刚刚扫描了你的设备。确实没有找到任何威胁。", icon_path=icon_path, duration=10) volume.SetMasterVolumeLevel(currentVolumeDb, None)
安装 Python 库
换源,以免网络环境不好,获取不了库。建议使用 清华源 。走清华源,包考上清华的啊。信不信由你。
安装
win10toast
和pycaw
库。pip install win10toast pycaw
配置本地组策略
打开本地组策略编辑器
gpedit.msc
。导航至 计算机配置 > Windows 设置 > 安全设置 > 本地策略 > 审核策略 。打开审核进程跟踪并选中成功,然后单击确定。
更新组策略。
gpupdate /force
现在,任何进程启动时,一个以
4688
为事件ID的事件会被记录在事件查看器的 Windows 日志 > 安全 中。
配置任务计划
打开任务计划程序
taskschd.msc
。单击创建任务。指定一个名称,别太嚣张。
导航到操作选项卡,在程序和脚本下填入本机上
pythonw.exe
的位置(一定要写完整路径),参数就填给你的.pyw
文件的包含完整路径的文件名。要是最后运行不了,你可能得考虑下是不是有空格或者什么的。导航到设置选项卡,将请勿启动新实例改为停止现有实例。
导航到触发器选项卡。指定的每一项触发条件之间都是或的关系。
新建一项触发条件,要求其在发生事件时开始任务,自定义执行条件,新建事件筛选器,将事件日志设置为Windows 日志下的安全,将所有事件 ID改为 4688,将关键字设置为审核成功。
转到 XML 标签页,选中手动编辑查询。将
and *[EventData[Data[@Name='NewProcessName'] and (Data='<程序目录>')]]
添加至筛选器。完成后你会得到以下的 XPath 查询:<QueryList> <Query Id="0" Path="Security"> <Select Path="Security"> *[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and Task = 13312 and (band(Keywords,9007199254740992)) and (EventID=4688)]] and *[EventData[Data[@Name='NewProcessName'] and (Data='<程序目录>')]] </Select> </Query> </QueryList>
<程序目录>
指的是你要监视的程序目录。不要包括尖括号!在监视希沃监视程序的情况下,可选的位置有如下几个,程序的作用不言而喻:
C:\Program Files (x86)\Seewo\SeewoService\SeewoService_1.5.0.3682\SeewoCore\toolbox\rtcRemoteDesktop\rtcRemoteDesktop.exe
C:\Program Files (x86)\Seewo\SeewoService\SeewoService_1.5.0.3682\SeewoCore\toolbox\media_capture\media_capture.exe
C:\Program Files (x86)\Seewo\SeewoService\SeewoService_1.5.0.3682\SeewoCore\toolbox\screenCapture\screenCapture.exe
你可能想给每个目录都创建一个触发条件,让它们并列运行。- 注:程序目录由版本决定。请依据你的希沃程序版本调整以上内容。
运行效果
每当我们指定的不想要的程序启动时,桌面上就会出现一个特别的通知来提示大家。脚本还会使音量被强制切换至 20% 再恢复原状。
存在的部分问题及不优雅的解决方案
在希沃程序更新后无法自动切换到新的版本号
这主要是由于任务计划程序仅仅支持 XPath 1.0 的一个子集。这意味着 contains
无法使用。只好每次开机都用 Python 获取到版本号然后修改 XML 再自动导入。但是这样很不优雅,就没放在这了。
更新日志
- 11.20 更新:添加了自动更改音量功能。 要安装的包和部分脚本内容发生改变。
- 11.28 更新:添加了自动更新希沃程序的版本号问题阐述。
温馨提示
操作结束后别忘了清除各种历史记录:请保持冰点还原下的系统干净整洁。
另外,你可能需要关闭专注助手之类的阻挡通知发出的功能。
很抱歉你对我隐晦的用辞感到迷惑,但是为了让我的工作保持长期有效,我只能这样。
我是在弄完整件事情之后才写的这篇文章。如果你发现有哪个地方不能使用,或者有任何改进建议,欢迎留言,我也好改教程,提供更好的阅读体验。