为什么Python脚本打包生成的可执行文件会被杀毒软件判定为病毒?
Python打包可执行文件被杀毒软件误报的技术原因
- 打包工具的特征被黑产滥用
PyInstaller、py2exe、cx_Freeze均为开源的Python打包工具,其中PyInstaller因功能完善、适配性强,是恶意程序作者打包Python编写的病毒、木马、挖矿程序的首选工具。杀毒引擎的特征库已将PyInstaller默认生成的PE文件头、资源段结构、启动器二进制代码标记为高风险特征,只要匹配到对应特征就会触发报毒。三类工具报毒率的差异本质是被黑产滥用的程度差异:PyInstaller滥用样本最多,报毒率最高;cx_Freeze使用率低、滥用样本少,报毒率最低。 - 打包结构符合病毒通用行为特征
Python打包生成的exe本质是「原生启动器+Python解释器+压缩后的字节码包」的捆绑结构,刚好匹配多数病毒的典型行为特征:- 启动时会自动解压内嵌的资源到系统临时目录,执行动态释放的代码
- 会调用系统API动态加载内存中的模块,无需额外依赖文件
- 默认生成的PE文件无合法导出表、段名称与常规原生软件差异大、导入表调用的函数组合符合恶意程序特征
以上特征组合会触发杀毒引擎的启发式检测规则,判定为可疑文件。
- 无有效数字签名的权重叠加
个人开发者生成的打包产物大多未添加正规的代码数字签名,无签名的可执行文件本身在杀毒引擎的风险评分体系中就会被加很高的权重,叠加前面的打包结构特征,很容易达到报毒阈值。 - 加密/压缩操作进一步提升风险
若打包时开启了字节码加密、代码混淆或者UPX压缩,加密后的资源段会被判定为可疑加密 payload,压缩后的PE结构与合法软件差异进一步拉大,会大幅提升报毒概率。
内容的提问来源于stack exchange,提问作者Vino Rue
相关产品推荐
相关产品推荐

