ウイルス対策ソフトウェアと友達になります:誤検知を回避する方法

この記事では、弊社製品のアンチウイルスの誤検知の問題がどのように解決されたかについてお話したいと思います。







このような問題はないが、トレッドの助けを借りてソフトウェアを保護する予定がある場合は、ほとんどの場合同じことを経験しなければならないので、資料に精通することをお勧めします。



ステップ1.コード署名







最も効果的な方法は、実行可能ファイルに署名することです。これが行われない場合、アンチウイルスは特別な中毒でそれらをスキャンします。



このステップの重要性を納得させるために、 Alexander(Rouse_)Bagelは親切に明確な例を共有しました。 テストアプリケーションはプロテクターを使用せず、インターネットアクセスもありません。CRC32ファイルを考慮して、1つの機能のみを実行します。 署名済みファイルと未署名ファイルのレポートを比較します。







これは署名を支持する十分な議論だと思います。



証明書を取得してファイルに署名する技術的な側面については説明しません。 私はstartsslで証明書を受け取りました (価格とロシア語サポートで賄われています)。 LLC(クラス2)の証明書を取得するために、クラス2のデジタル署名で署名された電子メールで意見を送信するモスクワの公証人弁護士を見つけるのは困難でした...



ウイルス対策ソフトウェアの承認は署名されたソフトウェアの副次的な利点にすぎませんが、主な喜びは「CPUがあれば、それは集合農場ではない」と言って顧客の信頼を高めることです。 また、アンチウイルス、ファイアウォール、およびUACは、脅威の増加を警告しません。



ステップ2.怒った手紙







ファイルは署名されているかどうかに関わらず、誰かがvirusstal(以降VT)を呪っている場合-手紙を書く時が来ました。 誤検知に関する苦情の送信先を見つけるには、特別なリストが役立ちます。







治療に対するビラバーの反応には数週間かかることに注意してください。



手順3.ビルドサーバーでVirusTotalを自動的に確認する



ヒンジ付き保護を使用しない場合、すべてがシンプルで、リリースをまとめてVTにアップロードし、苦情を取り消しました。それだけです。 ただし、プロテクターを使用する場合は、悪用を送信せずに誤検知の数を減らすオプションがあります。



ちょっとした理論。 同じソースを再コンパイルしても、exeファイルの内容は変わりません(ヘッダーのタイムスタンプを除く)。 したがって、フォールスポジティブの状況をVTに再構築して再送信しても解決しません。



プロテクター(私の場合はVMProtect)を使用する場合はまったく異なります。プロテクターは、各ファイル処理中に一意の仮想マシン(命令、ハンドラー)および対応する仮想化コードを形成します。 この一意のデータには、ウイルスのシグネチャが含まれている場合と含まれていない場合があります。これにより、2回目の再起動後、ウイルス対策ソフトウェアがファイルをスキップする可能性があります。



リロードは、virlabovitesからの回答を待つよりも時間がかかりませんが、奇跡を見越して20回リブートすることは非常に有効なシナリオなので、手で本当に地獄のようなルーチンを実行する必要があります。 このプロセスを自動化するために、VirusTotalScanユーティリティが作成されました。これについては後で説明します。



VirusTotalScanを使用する


リンクをダウンロードできます。 このプログラムはコンソールであり、作業の結果は終了コードによって返されます。0個のウイルスはありません。1個はウイルスが検出され、2個は何か他のものが発生しました。 呼び出し構文:



VirusTotalScan.exe api_key _ [/ignore [_][ ...]] api_key   VirusTotal API _     _  ,   
      
      







これを使用するには、VirusTotal APIへのアクセスキーが必要です。これは、登録後にvirustotal.comサイトで取得できます。







独自の例を使用して、ビルドサーバーへの統合を行います。アセンブリには.batスクリプトが使用されます。



 :VMPROTECT IF EXIST "~program.exe" DEL "~program.exe" rem    echo Compiling with WMProtect VMProtect_Con.exe "program.exe" "~program.exe" -pf "program.exe.vmp" IF ERRORLEVEL 1 GOTO ERROR rem    signtool.exe ... :VirusTotalScan rem     VirusTotal rem   Qihoo-360  CMC VirusTotalScan.exe 1fe0ef5feca2f84eb450bc3617f839e317b2a686af4d651a9bada77a522201b0 "~program.exe" /ignore "Qihoo-360" "CMC" rem       IF ERRORLEVEL 2 GOTO VirusTotalScan rem  ,  IF ERRORLEVEL 1 ( echo Vireses finded. RECOMPILE. GOTO VMPROTECT ) rem  ,   rem    DEL "program.exe" COPY "~program.exe" "program.exe" DEL "~program.exe"
      
      







例から、すべてが明確になります。 皮肉なことに、プログラム自体が1つの誤検出を受け取り、苦情を取り消しました-今、私は決定のために数週間待っています。



おわりに



結論として、記事の提出を開始したAlexanderに感謝し、超現実主義者との問題を常に解決できるとは限らないことを警告します。



All Articles