我被腾讯 ACE 反作弊逼疯了,最后靠一个 PowerShell 脚本治好了精神内耗
前言:玩个游戏,比上班还累
打无畏契约(Valorant 国服)的兄弟应该都懂------游戏打得正嗨,突然风扇狂转,一看任务管理器:SGuard64.exe 吃了 30% CPU。
这就是腾讯的 ACE(AntiCheat Expert)反作弊系统。说是反作弊,干的事儿比外挂还狠:
- 内核级驱动扫描你整个系统
- 开机就驻留后台
- CPU 全核拉满,不管你死活
- 卸载?你想多了
我花了整整一个晚上跟它斗智斗勇,最后没卸掉,但把它彻底锁死了。这篇文章记录我的踩坑全过程,文末附一键脚本,拿过去就能用。
第一回合:我太天真了,以为卸载就能解决问题
"ACE 是吧,控制面板卸载,搞定"
打开控制面板 → 程序和功能 → 找 AntiCheat Expert → 没有。
行吧,那我去搜。系统盘搜了一圈,在 C:\Program Files\AntiCheatExpert\ 找到了:
bash
AntiCheatExpert/
├── ACE-BASE.sys # 基础驱动
├── ACE-CORE*.sys # 核心驱动(备份了三份你敢信)
├── ACE-GAME.sys # 游戏保护驱动
├── ACE-Service64.exe # 服务进程
├── SGuard/
│ └── x64/
│ ├── SGuard64.exe # 护卫进程
│ ├── SGuardSvc64.exe # 护卫服务
│ └── Uninstall64.exe # 卸载器(真有!)
这不就是全家桶嘛,删就完了!
结果:删不掉。 文件被内核驱动锁着,提示"权限不足"。
那我就安排重启删除
Windows 有个机制叫 PendingFileRenameOperations,能在系统启动前把锁着的文件删掉。我写了脚本把 22 个 ACE 文件全部加入"重启删除清单",重启------
干净了。 那一瞬间我笑得像个孩子。
第二回合:我打开游戏,它回来了
第二天,打开无畏契约,想爽一把。
然后任务管理器里,SGuard64.exe 又出现了。
我当时表情:
???
查了一通,破案了------
ACE 根本不是独立安装的程序。 它是游戏本体的组成部分,藏在游戏目录里:
游戏目录\live\ShooterGame\Binaries\Win64\AntiCheatExpert\
里面有 ACE-Setup64.exe------一个静默安装器。
你每次打开游戏,它干这几件事:
游戏启动
↓
ACE-Setup64.exe 自动执行(你完全无感)
↓
把驱动复制到 C:\Windows\system32\drivers\
↓
创建 C:\Program Files\AntiCheatExpert\
↓
注册服务 → 启动服务 → 加载内核驱动
↓
SGuard64.exe 开始全核扫描你的电脑 🤡
而且我 D 盘上有两份游戏副本(之前重装过),两份里各有一套 ACE 安装器,双重火力。
也就是说,只要你还玩这游戏,ACE 就永生不死。你删一百次,它第一百零一次复活。
第三回合:打不过就加入------锁死它
卸载是不可能的,这辈子都不可能。那我换个思路:
我不删你了。但你在我电脑上跑,得按我的规矩来。
思路
- 优先级降到最低:CPU 有空闲才轮到你,别跟我抢资源
- 锁到单核:16 个核心只给你 1 个,剩下的别碰
- 自动化:开机自动蹲守,SGuard64.exe 一出现就按死
方案选型
| 方案 | 可行性 |
|---|---|
| 删文件 | ❌ 游戏启动自动恢复 |
| 删服务 | ❌ 同上 |
| 防火墙封网络 | ⚠️ 治标不治本,内核驱动照样扫本地 |
| 改服务权限 | ⚠️ 可能导致游戏打不开 |
| 进程优先级+CPU亲和性 | ✅ 不破坏游戏,只是限制资源 |
最终选了最后一个。
终极方案:一劳永逸锁死 ACE
原理
PowerShell 脚本常驻后台,用 WMI 实时监听进程创建事件。一旦检测到 SGuard64.exe 启动,立刻:
powershell
$proc.PriorityClass = 'Idle' # 优先级拉到最低
$proc.ProcessorAffinity = 1 # 只给用 CPU 0(单核)
然后丢到 Windows 启动文件夹,开机自动运行。
操作用了多久?
30 秒。双击一下,完事儿。
兄弟你跟我的步骤走(2 步搞定)
第一步:下载脚本
两个文件放同一文件夹,随便放哪里都行:
锁死你ACE.ps1--- PowerShell 核心脚本安装-开机自动锁.vbs--- 一键安装器
注意:
.ps1文件和.vbs文件必须在同一个文件夹里!
第二步:双击安装
双击 安装-开机自动锁.vbs,弹窗提示"安装完成"就 OK 了。
它会自动把启动项添加到 Windows,下次开机生效。
怎么验证生效?
- 打开无畏契约
- 打开任务管理器 → 详细信息
- 找到
SGuard64.exe - 右键 → 设置优先级 → 应该显示 "低"(脚本设的 Idle)
- 右键 → 设置相关性 → 应该只勾了 CPU 0
完事儿。
写在最后
我折腾这一圈最大的感受是:
现代游戏的"安全系统"已经越过界了。
反作弊我不反对,但我花钱买的电脑,CPU 核心应该先服务我的游戏画面,而不是被反作弊占满导致掉帧------这不讽刺吗?为了保护游戏体验的工具,反而毁了游戏体验。
在厂商学会收敛之前,就用魔法打败魔法吧。
附:脚本地址
两个文件我已经打包好了,需要的小伙伴直接拿:
- GitHub:(你可以贴你的仓库链接)
- 或者直接拿代码自己新建两个文件也行,贴下面了
锁死你ACE.ps1
powershell
# ======================================================
# 锁死你ACE --- 自动限制 SGuard64.exe 优先级和 CPU
# ======================================================
$TARGET = "SGuard64"
$CHECK_INTERVAL = 3 # 每 3 秒轮询兜底
# 防止重复运行
$me = [System.Diagnostics.Process]::GetCurrentProcess()
$others = Get-Process -Name $me.ProcessName -ErrorAction SilentlyContinue |
Where-Object { $_.Id -ne $me.Id -and $_.StartTime -gt (Get-Date).AddMinutes(-1) }
if ($others) { exit }
Write-Host "锁死你ACE 已就绪 --- 目标: $TARGET.exe" -ForegroundColor Cyan
$alreadyDone = @{}
function Nerf-Process ($proc) {
$pid = $proc.Id
if ($alreadyDone.ContainsKey($pid)) { return }
try {
$proc.PriorityClass = 'Idle'
$proc.ProcessorAffinity = 1
$alreadyDone[$pid] = $true
Write-Host "$(Get-Date -Format 'HH:mm:ss') | 锁死 $TARGET.exe (PID:$pid) --- Priority:Idle | CPU:0" -ForegroundColor Green
} catch { }
}
# WMI 事件监听
$query = "SELECT * FROM Win32_ProcessStartTrace WHERE ProcessName = '$TARGET.exe'"
$watcher = New-Object System.Management.ManagementEventWatcher
$watcher.Query = $query
$watcher.Options.Timeout = [System.Management.ManagementOptions]::Infinite
$job = Register-ObjectEvent -InputObject $watcher -EventName "EventArrived" -Action {
$proc = Get-Process -Id $args[0].NewEvent.ProcessID -ErrorAction SilentlyContinue
if ($proc) { & $args[1] $proc }
} -ArgumentList @($null, ${function:Nerf-Process}) -ErrorAction SilentlyContinue
# 定时轮询兜底
while ($true) {
$procs = Get-Process -Name $TARGET -ErrorAction SilentlyContinue
foreach ($p in $procs) { Nerf-Process $p }
Start-Sleep -Seconds $CHECK_INTERVAL
}
安装-开机自动锁.vbs
vbscript
Dim fso, scriptDir, ps1Source, startupPath, vbsDest, shell, shortcut
Set fso = CreateObject("Scripting.FileSystemObject")
scriptDir = fso.GetParentFolderName(WScript.ScriptFullName)
ps1Source = scriptDir & "\锁死你ACE.ps1"
startupPath = CreateObject("Wscript.Shell").SpecialFolders("Startup")
' 复制自身到启动文件夹
vbsDest = startupPath & "\锁死你ACE.vbs"
fso.CopyFile WScript.ScriptFullName, vbsDest, True
' 创建快捷方式指向 PS1(双保险)
Set shell = CreateObject("WScript.Shell")
Set shortcut = shell.CreateShortcut(startupPath & "\锁死你ACE.lnk")
shortcut.TargetPath = "powershell.exe"
shortcut.Arguments = "-WindowStyle Hidden -ExecutionPolicy Bypass -File """ & ps1Source & """"
shortcut.WindowStyle = 7
shortcut.WorkingDirectory = scriptDir
shortcut.Save
MsgBox "安装完成!下次开机自动生效。", vbInformation, "锁死你ACE"
如果这篇文章帮到了你,点个赞让更多兄弟看到 🙏