0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NuitkaでEXE化するとWindows Defenderに引っかかる?

Last updated at Posted at 2025-09-02

― exe化中にWacatac.B!mlが検知されたとき ―

はじめに

Pythonスクリプトを配布する際、ソースを見せずに配布できる形として「EXE化」がよく利用されます。
nuitkaはCPython互換のコンパイラで、高速かつ最適化された実行ファイルを生成できますが、onefile オプションで作成したEXEがWindows Defenderに「マルウェア」と誤検知されることがあります。

本記事ではその理由と、誤検知を回避する方法について解説します。


onefile が誤検知される理由

1. 一時展開の仕組み

  • onefile 形式では、生成された単一のEXEにすべての依存ファイルをまとめます。
  • 実行時には、一時フォルダに解凍 → 実際の処理を開始 という流れになります。
  • これは自己展開型アーカイブやパッカー型マルウェアと似た挙動であり、アンチウイルスソフトが不審な動作とみなす原因になります。

2. コードサイニングがない

  • 自己展開を伴うプログラムは本来「コードサイニング (Code Signing)」が必要です。
  • 署名がない場合、**「不審な未署名の自己展開ファイル」**として検知されやすくなります。

3. ヒューリスティック検知の影響

  • Defenderや他のセキュリティソフトは、既知のウイルス定義だけでなく「怪しい挙動パターン」を検知します。
  • onefileは「自己展開+一時実行」という特徴から、ヒューリスティックでマルウェアと誤判定されやすいのです。

対策:standalone モードを使う

1. standalone とは?

  • --standalone オプションでは、EXE本体と依存DLL・ライブラリを同じフォルダにまとめます。
  • onefileと違い、実行時に自己展開処理が不要になります。
  • よって「自己展開挙動」による誤検知を大幅に減らせます。

2. 配布方法の工夫

  • standalone では「EXE+必要DLL」のセットをそのまま配布します。
  • フォルダごとZIP化して配布するのがおすすめです。
  • ユーザーにとっては多少ファイル数が増えますが、セキュリティ的には安全で実用的です。

3. 追加の安心対策

  • コードサイニングを行う(企業配布なら特に必須)
  • ウイルス対策ベンダーに誤検知報告をする
  • 不要なライブラリを整理し、最小限の構成にする

まとめ

  • onefile: 配布は楽だが、自己展開挙動のせいでWindows Defenderに誤検知されやすい。
  • standalone: 配布時にフォルダが必要だが、誤検知リスクを大きく減らせる。

実務用途で「確実に配布・利用」してもらうなら、standaloneでの配布が最適解です。
小規模配布や学習用ならonefileでもよいですが、誤検知に悩まされたらぜひstandaloneを選んでください。


次のステップ

👉 本記事を拡張するなら以下を追記できます:

  • コードサイニングの実際のやり方(証明書の種類・self-signedの例・企業用証明書)
  • nuitka コマンド例(onefile と standalone の比較)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?