声明

本文仅做交流学习之用。在使用文章实现的功能之前请三思有无任何潜在的问题。因应用本文所述内容造成的任何影响本人概不负责。请遵守校规校纪。“我已经制止了啊!”

摘要

及早发现正在运行的“不想要”的程序。只需要简单的操作。今天就教给大家。

先决条件

  • 安装有较新版本的 Windows 10 系统的希沃一体机:本文的示例设备在 2021 年制造,因此新于此日期的设备应当可以兼容。
  • 为实现更为持久化的高级功能,你还需要:
    • 解锁冰点还原的密码或者特殊软件。出于版权和可持续性要求,当前不会提供此工具。但是你可以试试 123456 或者 000000 之类的简单密码。
  • Python 3 的最新版本。要我说旧版就不好,因为做不了错误重现。本文中的版本是 3.13.0
  • 要对我的实现进行更改,你还需要一定的计算机、Python 和 XPath 基础知识。
  • 下载好分享的 SEEWONotify.tar.gz 归档文件。访问码:6v0t SHA256 校验值:F5E565F5BE71E927A288497078479FC760E04014103F109E871F16752FABB66E

原理

审核进程运行,然后使任务计划程序根据事件运行所编写的通知程序。

基础配置

安置好要执行的程序

  1. 随便找个地方,创个文件夹,把压缩包里的所有东西放进去。压缩包里应该包含内容如下的脚本。记住文件的位置,并在脚本内做出相应的调整。

    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)
    
  2. 安装 Python 库

  • 换源,以免网络环境不好,获取不了库。建议使用 清华源 。走清华源,包考上清华的啊。信不信由你。

  • 安装 win10toastpycaw 库。

    pip install win10toast pycaw

配置本地组策略

  1. 打开本地组策略编辑器 gpedit.msc。导航至 计算机配置 > Windows 设置 > 安全设置 > 本地策略 > 审核策略

  2. 打开审核进程跟踪并选中成功,然后单击确定

  3. 更新组策略。

    gpupdate /force

    现在,任何进程启动时,一个以 4688 为事件ID的事件会被记录在事件查看器的 Windows 日志 > 安全 中。

配置任务计划

  1. 打开任务计划程序 taskschd.msc。单击创建任务

  2. 指定一个名称,别太嚣张。

  3. 导航到操作选项卡,在程序和脚本下填入本机上 pythonw.exe 的位置(一定要写完整路径),参数就填给你的 .pyw 文件的包含完整路径的文件名。要是最后运行不了,你可能得考虑下是不是有空格或者什么的。

  4. 导航到设置选项卡,将请勿启动新实例改为停止现有实例

  5. 导航到触发器选项卡。指定的每一项触发条件之间都是或的关系。

    • 新建一项触发条件,要求其在发生事件时开始任务,自定义执行条件,新建事件筛选器,将事件日志设置为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 更新:添加了自动更新希沃程序的版本号问题阐述。

温馨提示

操作结束后别忘了清除各种历史记录:请保持冰点还原下的系统干净整洁。
另外,你可能需要关闭专注助手之类的阻挡通知发出的功能。
很抱歉你对我隐晦的用辞感到迷惑,但是为了让我的工作保持长期有效,我只能这样。
我是在弄完整件事情之后才写的这篇文章。如果你发现有哪个地方不能使用,或者有任何改进建议,欢迎留言,我也好改教程,提供更好的阅读体验。