You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab CI生成的Python可执行文件遭Windows Defender误报拦截

问题描述

我自行开发了一个小型Python程序,希望通过GitLab CI进行构建。本地Win10环境用pyinstaller打包成可执行文件后一切正常,程序运行符合预期。但通过GitLab CI的Windows共享runner生成的可执行文件下载测试时,被Windows Defender拦截,提示:

Program:Win32/Wacapew.C!ml

简化后的.gitlab-ci.yml配置:

image: python:3.9

stages:
  - build

build:
  stage: build
  tags:
    - windows
  script:
    - choco install python --version 3.9.0 --params "'/InstallDir:C:\Python39'" --yes
    - C:\Python39\python -m pip install --upgrade pip
    - C:\Python39\Scripts\pip install pyinstaller
    - C:\Python39\Scripts\pip install -r requirements.txt
    - C:\Python39\Scripts\pyinstaller -F -y
      --distpath $CI_PROJECT_DIR
      --noconsole
      --clean
      app.py
  artifacts:
    paths:
      - ./app.exe

使用的runner信息:

Running with gitlab-runner 16.5.0 (...)
 on windows-shared-runners-manager ..., system ID: ...

请问这真的是恶意软件还是误报?如何解决该问题,让所有用户都不受影响?


解决方案

这大概率是Windows Defender的误报。PyInstaller打包的程序本身就容易被杀毒软件误判,再加上共享CI runner的环境被大量未知程序使用过,生成的文件特征更容易被标记为可疑。

一、先确认是误报

  • 对比本地打包和CI打包文件的哈希值,确认文件内容完全一致,排除CI过程中被篡改的可能。
  • 将CI生成的app.exe提交到微软的恶意软件分析平台进行人工审核,官方会给出是否为误报的结论。

二、调整打包配置降低误判概率

  • 添加程序元数据:在PyInstaller命令中加入--version-file参数,给程序补充版本号、公司名称、版权信息等合法元数据,让杀毒软件识别为正规程序。
  • 放弃单文件打包:去掉-F参数,生成文件夹形式的程序包。单文件打包的结构会把所有依赖打包进一个可执行文件,这种结构更容易触发杀毒软件的规则。
  • 自定义spec文件:手动编写PyInstaller的spec文件,自定义打包流程,避免默认打包逻辑带来的可疑特征。
  • 谨慎使用UPX压缩:如果之前没用到UPX,可以尝试用它压缩可执行文件,但部分杀毒软件对UPX压缩的文件敏感,需要测试后再决定是否使用。

三、给程序添加数字签名(最彻底的解决方法)

给生成的可执行文件添加正规的数字签名,签名后的文件会被Windows Defender信任,不会被拦截。

  • 购买权威CA机构的代码签名证书(如DigiCert、GlobalSign等)。
  • 在CI脚本中添加签名步骤,使用Windows自带的signtool工具对app.exe进行签名。

四、优化CI环境

  • 改用私有Windows runner:共享runner的环境状态不可控,改用自己维护的私有runner,保持环境干净稳定,生成的文件特征更一致,减少误报概率。
  • 缓存依赖包:在CI配置中添加缓存规则,缓存Python、PyInstaller以及项目依赖包,避免每次构建都重新下载,减少环境差异带来的特征变化。

五、给用户的临时解决方案

如果用户遇到拦截,可以指导他们:

  • 在Windows Defender的“病毒和威胁防护”设置中,将app.exe添加到信任列表。
  • 临时关闭实时保护(仅用于测试,不推荐长期关闭)。

内容的提问来源于stack exchange,提问作者Enzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 05:43:25