为什么Windows Defender将我的Python打包脚本识别为木马?
触发Windows Defender误报的核心原因
- Pyinstaller打包的二进制特征命中了Windows Defender的恶意特征库:低活跃度的个人自定义打包程序,同时包含全局热键监听、开机自启、修改显示设备配置的行为组合,刚好和Defender收录的木马特征重叠;卡巴斯基的特征库规则、判定阈值和Defender存在差异,因此不会触发告警。
global-hotkeys模块的底层系统调用触发了高风险行为判定:全局键盘监听是远控类木马的典型特征,Defender对个人未签名程序的这类行为判定阈值远低于卡巴斯基。- 程序未做数字签名:未签名的可执行文件在Defender的风险评分体系中会被额外加权重,叠加行为特征后刚好达到木马判定标准。
- 开机自启+后台长期驻留的行为组合进一步拉高了风险评分,最终触发拦截判定。
需要排查的遗漏点
- 检查打包参数配置:如果打包时使用了
--onefile单文件打包参数,这类打包格式的特征更容易被Defender误判,可以换成多文件打包模式测试是否还会触发告警。 - 排查依赖包来源:确认你安装的
global-hotkeys以及其他第三方依赖均从PyPI官方源下载,第三方非官方镜像提供的依赖包可能被注入恶意代码,导致打包后文件带毒。 - 排查多余权限请求:确认程序没有请求额外的无关权限(如未用到的磁盘读写、网络请求权限),如果打包后程序触发了这类你没写的权限调用,需要检查打包时是否带入了冗余的恶意依赖。
- 查看Defender的具体判定日志:在Windows Defender威胁历史记录中查看判定依据是静态特征匹配还是动态行为触发,对应调整程序逻辑或打包配置。
- 最小复现验证:写一个仅包含热键监听逻辑、不含关闭显示器功能的最小脚本打包测试,如果仍报毒则说明是热键监听特征触发的告警,反之则是关闭显示器的相关系统调用触发的。
- 排查打包环境安全:确认你使用的Pyinstaller本身没有被感染,可以卸载现有版本后从官方源重新安装,再重新打包测试。
内容的提问来源于stack exchange,提问作者Aaron Jones
相关产品推荐
相关产品推荐

