# -*- coding: utf-8 -*- """README 补一节:关于杀毒软件误报。 要讲清楚的: * 哪些特征**天生**会被启发式盯上(不是我加的,是这类工具的共性) * 我做了哪些**合法**的降误报 * 真正解决误报的办法是代码签名 —— 需要买证书,我做不到 * 为什么我不做免杀 """ from __future__ import annotations import sys from pathlib import Path README = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote\README.md") SECTION = '''## 关于杀毒软件误报 ### 先说结论 **这个工具没有做任何免杀。** 它会被某些杀软启发式报毒,这是真的, 我不打算靠混淆/加壳/加密去绕,因为那正是恶意软件的做法 —— 绕过去之后,你也分不清自己装的是不是真有毒。 真正能解决误报的路只有一条:**代码签名**(要买证书,见下)。 ### 为什么会被盯上 | 特征 | 为什么杀软敏感 | 这是谁的需求 | |---|---|---| | PyInstaller 打包 | 打包器的引导代码是启发式的重灾区 | 你要「多文件 exe,双击就跑」 | | 写注册表 Run 键 | 自启动是持久化的典型手法 | 你要「开机自启」 | | 无窗口后台常驻 | 隐藏进程是木马的常见形态 | 你要「全程静默」 | | 监听端口 + 收指令 | 远控和被控端在行为上无法区分 | 这就是远控工具 | | 提权改防火墙 | 改防火墙规则经常被拦 | 你要「黑终端一闪修防火墙」 | **这五条全是你明确要求的。** 它们组合在一起,行为特征上和远控木马是一回事 —— 区别在于:**配对码是你自己设的、认证是真的、你不会拿它去连别人的电脑。** ### 我做了哪些合法的降误报 1. **`--onedir` 而不是 `--onefile`** onefile 每次启动都往临时目录解压自己,这是最容易被判毒的行为之一。 onedir 不解压,启动也更快。 2. **`--noupx`** 加壳压缩是杀软重点关注对象,明确关掉。 3. **完整的版本信息** EXE 里写入了公司名、产品名、文件描述、版本、版权。 未签名二进制有正经的版本资源,比光秃秃的少一点可疑度, 也方便你在杀软里按「厂商 + 产品」加例外。 4. **不做任何偷偷摸摸的事** 没有自我复制、没有进程注入、没有内存加载、没有关闭杀软、 没有偷偷加防火墙例外。自启写注册表是**你勾了勾选框**才做的。 ### 你遇到误报时怎么办 **优先做成例外,不要关杀软。** 被控端目录整个加进排除项即可(就是你放 `LanRemote-Agent.exe` 那个文件夹): ``` Windows 安全中心 → 病毒和威胁防护 → 管理设置 → 排除项 → 添加或删除排除项 → 添加文件夹 → 选 LanRemote-Agent 那个目录 ``` 加**文件夹**而不是单个 exe —— 因为 `_internal\\` 里的 dll/pyd 也可能被单独报。 ### 真正根治:代码签名 有了签名,SmartScreen 和大部分杀软就不会再拦。需要: 1. 买一张代码签名证书(OV 约 ¥1000-2000/年,EV 更贵但立刻获得 SmartScreen 信誉) 2. 用 `signtool` 给 `LanRemote-Agent.exe` 和 `_internal` 里的 dll 签名 3. 加时间戳(否则证书过期后签名失效) 买了证书之后告诉我,我把签名步骤加进构建脚本。 ### 我查到的情况(本机) 这台机器上 Windows Defender 的**按需扫描是坏的**: ``` MpSmartConfigInitialize() failed (80070002) ``` Defender 的 PowerShell 模块(`Get-MpComputerStatus` 等)也不存在, 所以**我没法在这台机器上给你一个权威的"报不报毒"结论**。 我不会假装测过。 想自己确认的话,把 EXE 传到 VirusTotal 看一下 —— 那是最快的办法。 --- ''' ANCHOR = "## 七、后台运行方式" def main() -> int: text = README.read_text(encoding="utf-8") if "关于杀毒软件误报" in text: print(" README 已有这一节") return 0 if ANCHOR not in text: print(" [失败] 锚点没找到") return 1 text = text.replace(ANCHOR, SECTION + ANCHOR, 1) README.write_text(text, encoding="utf-8") print(" README: 已补「关于杀毒软件误报」") return 0 if __name__ == "__main__": sys.exit(main())