【要約】PyInstallerで作ったexe、ウイルス扱いされる問題をInno Setupで解決した話 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
Pythonで開発したツールを配布する際、セキュリティソフトによってウイルスと誤判定される問題に直面した。筆者は自作ツールの配布において、以下の課題を抱えていた。
- ・PyInstallerの
--onefileモードが、実行時に一時フォルダへファイルを展開する挙動がAVに不審とみなされる。 - ・VirusTotalでの検証において、66ベンダー中16件がウイルス判定を受ける事態が発生した。
- ・
--onedirへの変更やNuitkaへの移行は、ビルド負荷や環境構築の手間から現実的な解にならなかった。
// Approach
実行ファイル単体での配布を避け、Inno Setupを用いてインストーラー形式でパッケージングする手法を採用した。これにより、AVが嫌う一時フォルダ展開の挙動を隠蔽することを目指した。
- ・Inno Setupのスクリプト(.iss)を作成し、PyInstallerの出力ディレクトリを丸ごとインストーラーに組み込む。
- ・
PrivilegesRequired=lowestを設定し、ユーザーに過度な管理者権限を要求しない設計とする。 - ・
Compression=lzma2とSolidCompression=yesを併用し、配布ファイルのサイズを最適化する。
// Result
インストーラー化により、セキュリティソフトによる誤検知を劇的に抑制することに成功した。筆者の検証では、以下の成果が得られている。
- ・VirusTotalでの検知数が、16/66から0/66へと改善した。
- ・圧縮技術の活用により、375MBあった配布用データが200MB台まで削減された。
- ・インストーラー形式を採用しつつ、管理者権限の要求を抑えることでユーザー体験を維持した。
Senior Engineer Insight
> 現場視点では、本手法は「低コストな回避策」として極めて実用的である。bootloaderの自前ビルド等は運用コストが高すぎる。一方で、AVの検知ロジックは常に更新されるため、本手法が永続的な解決策とは限らない。配布形態として、インストーラー版とZIP版を併用し、ユーザーに選択肢を与える運用設計が現実的だ。