本ページは広告が含まれています。気になる広告をクリック頂けますと、サーバ運営費になります(^^
次世代型AIアンチウイルス(Deep Instinct等)を導入している環境で、.NET Reactor等のツールで難読化を行うと、そのコードの特殊性から「悪意あるパッキング」と判定され、ブロックされることがあります。
本記事では、「自己署名証明書」を作成し、アプリに署名を施すことで、Deep InstinctのAI検知をホワイトリスト化(除外)する手順を解説します。
1. 署名と難読化の正しい順番
ここが最も重要です。必ず「難読化の後」に署名を行います。
- ビルド: 通常通りEXEを作成。
- 難読化: .NET Reactor等でパッキングを実行。
- コード署名: 最終的なEXEに対して署名を付与。
2. 自己署名証明書の作成(PowerShell)
PowerShellは、管理者として実行します。

管理者権限のPowerShellで、署名用の証明書(PFXファイル)とDeep Instinct登録用の証明書(CERファイル)を作成します。
PowerShell
# 1. 証明書の作成
$cert = New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=Internal-App-Signer" -FriendlyName "DI-Exclusion-Cert" -NotAfter (Get-Date).AddYears(5)
# 2. 署名に使用するパスワードの設定
$pwd = ConvertTo-SecureString -String "password" -Force -AsPlainText
# 3. 署名用ファイル(.pfx)の書き出し
Export-PfxCertificate -Cert $cert -FilePath "$home\Desktop\MySignCert.pfx" -Password $pwd
# 4. Deep Instinct登録用ファイル(.cer)の書き出し
Export-Certificate -Cert $cert -FilePath "$home\Desktop\DI_Exclusion.cer"
3. アプリへのデジタル署名実行
signtool.exe を使用して、難読化済みのアプリに署名を付与します。 ※signtoolのパスは環境により異なります。
PowerShell
& "C:\Program Files (x86)\Microsoft SDKs\ClickOnce\SignTool\signtool.exe" sign `
/f "$home\Desktop\MySignCert.pfx" `
/p "password" `
/fd SHA256 `
/t http://timestamp.digicert.com `
"C:\対象アプリのパス\アプリケーション.exe"
こんな感じで実行
PS C:\WINDOWS\system32> & "C:\Program Files (x86)\Microsoft SDKs\ClickOnce\SignTool\signtool.exe" sign /f "$home\Desktop\MySignCert.pfx" /p "password" /fd SHA256 /t http://timestamp.digicert.com "C:\Users\yoshi\source\repos\Test-Deepinstinct\Test-Deepinstinct\bin\Debug\Test-Deepinstinct_Secure\Test-Deepinstinct.exe"
成功メッセージ: Successfully signed と表示されれば完了です。
4. Deep Instinct 管理画面への除外登録
Deep Instinct側に「この署名があるファイルは安全である」と教え込みます。
- フィンガープリントの取得: 署名したアプリケーションのプロパティ → デジタル署名

詳細をクリック

証明書の表示

詳細から、拇印の文字列をコピーします

- コンソールでの設定:
- [ポリシー] > [許可リスト] > [ファイル証明書] タブへ移動。
- [証明書を追加] をクリック。
- フィンガープリント欄にコピーした英数字を貼り付け。
- プラットフォーム(Windows)と対象ポリシーを選択して保存。
DeepInstinct にて、証明書を追加

フィンガープリントに拇印の文字列を貼り付け

5. 動作確認
- アプリのプロパティを開き、「デジタル署名」タブが存在することを確認します。
- Deep Instinctが有効な端末でアプリを実行し、ブロックされずに起動することを確認して完了です!
6. 動作確認
.Net Reactor でプロテクトした瞬間にDeepInstinctに検出されてしまう。
まだ、フィンガープリントをとれてないんです。

エラーが出て、難読化を完了できない。

これだから、作業領域は除外しないとダメだね、、、。
.NET Reactor を利用するためのパスを書いておく

とりあえず難読化完了

7.自己署名証明書の限界と解決策
自己署名(オレオレ証明書)は、OSの「信頼されたルート証明機関」に登録して初めて**「デジタル署名」としての効力**を持ちます。これが未登録の状態だと、セキュリティソフト(Deep Instinct等)は「壊れた署名」と判断し、スキャンをスキップしてくれません。
このデジタル署名は問題ありません という状態でなければいけません。

証明書チェーンは処理されましたが、信頼プロバイダーが信頼していないルート証明書で強制終了しました。

この状態だと、Deepinstinct は、証明書のサムプリントが Not Signed のままであり、結局ウィルス判定を受けました。

この状態から「証明書のインストール」を行い

- [証明書のインストール] > [ローカル コンピューター] を選択(重要)。
- 「証明書をすべて次のストアに配置する」にチェック。
- [参照] ボタンを押し、[信頼されたルート証明機関] を選択(ここが「個人」などだと×は消えません)。
- 完了 を押す。
とする事で、「このデジタル署名は問題ありません」となりました。そうすると、すぐにウィルス判定を受けなくなりました。
まとめ
AI検知は「未知の脅威」に強い反面、自社開発の難読化アプリを「怪しい」と決めつけてしまう側面があります。このように「自社専用の署名+EDR側の証明書除外」を組み合わせることで、開発効率を落とさずに強固なセキュリティ環境を維持することが可能です。
これで、今後新しいアプリを作成したり更新したりしても、同じ証明書で署名するだけでDeep Instinctに自動的に許可されるようになります。お疲れ様でした!
