概要
今回は作ったスクリプトをexe化したらウイルス検知されちゃって、あわあわした時のお話。
ネットにある対策が通用しなくて詰まっていたところ、setup.exeを自作しちゃうっていう神の一手をひらめいたのでここに残します。詳しく話すと長くなるタイプなので、結論を先に書いちゃいます。時間のある方は最後まで読んでいただければ!こういう案もあったよってことで参考までに。
社会人デビューして間もない新卒の初投稿です。お手柔らかに。
結論!Innosetup
Setup.exeを作るツールとして知られる、Innosetup
こちらを使ってインストーラ-を配布してやれば、展開後exeをたたいても削除されることはなかった。(が、セキュリティ的にどうなんや...)
こちらにわかりやすい記事貼っておきます
Winactorを用いた業務自動化
業務自動化のため、使い始めたWinactor(RPAソフト)。できることに限りがあり(知識不足)個人的になじみのあるPythonで何とかその幅を広げたいと思ったのが終わりの始まり…
テスト環境にはPythonの開発環境がそろっており、その端末上でのみ、
- 作ったスクリプト(exe化したもの)をWinactorが実行
- 値を受け取って変数に代入し、その後の処理に使う
といったシナリオを作成することができました。なるほど、exeにしてWinactorに叩かせればいろんなことができるなあと思っていました。
PyInstallerの闇
Pythonスクリプトをexe化する際、最もメジャーなPyInstallerが使われますが、生成された.exeファイルがありとあらゆるアンチウィルスソフトにウイルス認定されてしまう。
必要ライブラリなどを実行環境に持っていく手間が省けるのは良いですが、
そういった問題があるので使う上では注意が必要です。。
開発環境
言語: Python (PyInstaller)
ツール: Inno Setup, WinActor (RPA)
OS: Windows
スクリプトの内容
今流行りのランサムウェアなどでは決してなくシンプルに画像データをPDF化した後に、保存名の接頭辞でグルーピングしてマージするだけのもの。名付けてMargePDF.pyです。
僕自身このスクリプト中で、ここ怪しい動きなのかも??って思った点を挙げるとすると、マージする前のPDFを削除するような処理を最後に入れていた点です。まあファイル操作するのは怪しいですよね。ある意味、信頼できるアンチウィルスだなと感心しました。
一応githubに上げてるので貼っておきます。
いざ配布
PyInstallerでexe化した!ちゃんと動く!配布する!ってウキウキになっていた時期が僕にもありました。訳あって、情セキ管理のUSBで配布しました。するとまあ、配布自体はできるんですね。いざ実行をしてみるとあれ?処理できてない...アプリが消えてる...
見事にApexOneに検知され削除...
ネットにあった対策が通用しない
こういうときの対策3選!!
1.PyInstallerのブートローダの再構築(リビルド)
2.ホワイトリストに追加してもらう
3.Windowsに誤検知を報告orデジタル署名
調べたら大体この3点があげられます。1番に関しては人それぞれ、2番は現場の環境上、
大掛かりになるため却下。3番は有料&時間かかる。と、どれも当てはまらないなと行き詰っていました。
Setup.exeを作っちゃおう
Innosetupというツールを使ってインストール!exeを実行!すると、あら不思議。検知・削除されませんでした。config.iniとか、README.mdまで抱き合わせで配布できて、初めて使ったので便利!!ってなりました。VirusTotalでの結果がこちらです。

setup.exe自体の結果はこんな感じです。本命の実行ファイルは4でした。(大差無いのに..)
最後に
長くなりましたが、情報提供って形で、同じとこで詰まった方の力に少しでもなれたらと思います。そもそも現場がレガシーソフトを使い続けてなければWinactorに頼る必要もなく、WindowsUpdateに怯えながら日々暮らす必要もないんですよね。
Pythonで全部できるのに遠回りしてる感が否めない。
流行りのDifyとか使いたいですね。というのは冗談です
もし僕のここまでの行動で、「ここエンジニアとしてあまりいい動きじゃないよ!」などありましたら是非ご指摘お願いします。
注意
Innosetup自体は大丈夫ですが、悪用してマルウェアを配送するといった事例もあるみたいなので注意です。
スクリプトから全部自作ならセキュリティ上問題ないと思います。