none
SetPixelFormat()がウィルスバスターにより不正変更として検知、駆除される RRS feed

  • 質問

  • 皆様お世話になります。

    Visual Studio Community 2019/Windows10 バージョン1909です。

    今更ながら自作アプリでOpenGLのニーズを感じ、20年前の書籍で勉強を始めたところ、手始めに点を描画するだけのプログラムが描画前に無言で終了してしまいます。デバッグしたところ、SelPixcelFormat()に特定できましたが、引数をチェックしても間違いは見つかりません。.exeをExplorerから実行しようとしたところ.exeが見つからず、再構築して実行したら.exeが消えたのでようやくウィルスバスター(バージョン16.0)を連想でき、セキュリティレポートで確認できました。(駆除のポップアップは出なかった)

    他社開発ツールで駆除されることがあっても所詮はマイナーかと諦めていましたが、Visual C++のようなデファクトスタンダードでもこんなものかと驚きます。(C/C++が絶滅危惧種なのか?)

    除外リストに加えるような疑わしい処理ではないはずですが、下記コードに問題があるでしょうか?

        PIXELFORMATDESCRIPTOR pfd = {
            sizeof(PIXELFORMATDESCRIPTOR),
            1, PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
            PFD_TYPE_RGBA, 24, 0,0,0,0,0,0,
            0,0,0,0,0,0,0, 32, 0,0, PFD_MAIN_PLANE, 0, 0,0,0 };
        int iPixelFormat = ChoosePixelFormat(hDC, &pfd);
        BOOL bSuccess = SetPixelFormat(hDC, iPixelFormat, &pfd);
    

    hDCは、WndProc()がWM_PAINTメッセージを受けてBeginPaint()で取得したものです。

    よろしくお願いします。

    2020年8月30日 0:48

回答

  • ウィルス対策ソフトベンダー側に、再現用のコード・バイナリを提出して、改善を依頼するしかないのでは?

    ウィルス対策ソフトのベンダーが何を以てどう判断するかは、彼らが決めることであり、かつ非公開の情報でしょう。
    また、エンジンやパターンは日々アップデートされるので、どのように回避するかを試行錯誤することは対策とは言いがたいです。(一時的に回避できてもすぐ引っかかるかもしれない)

    C/C++ がマイナーというよりは、ウィルス対策ソフトを使用されている現場で、開発現場が相対的に少ないからでしょう。
    多くの環境は「既知」のバイナリを使うことが多く、その「既知」のバイナリを前提とした開発姿勢なら、「頻繁に更新される怪しげな未知のバイナリ」を生み出す「ソフト開発現場」で食らうことは多いのかもしれません。
    ウィルス対策ソフトベンダーによってそういった戦略も異なると思いますので、開発現場で食らうことが多いのなら、特定フォルダーを除外するか、別のベンダーのソフトに移行を検証するかでしょう。
    2020年8月30日 9:35
    モデレータ
  • Azuleanさんが仰ること、一般論として、現象として、小生は経験があります。詳細は業務(の環境)に関わる情報なので書けませんが、要するに、プログラム開発をする機材も、一般のOA用の機材も、少なくともWindowsの機材に対しては同じウィルス対策が一括して実施されている、とご理解下さい。そのような環境において、

    • あるプロジェクトの微修正・ビルドを繰り返していると、ある一定期間、生成されたexeやdllが「検疫対象」(削除されてしまう)になったことがあります。
    • また、「検疫対象」とはならずとも、生成されたexeやdllがすべからく、「検体」としてウィルス対策ソフトに持っていかれた(コピーしてどこかへ送信された)ことがあります。

    このあたりのこと、全面的にウィルス対策側の設定次第かと。


    • 編集済み 外池 2020年8月30日 22:05
    • 回答としてマーク M14Cluster 2020年9月4日 23:54
    2020年8月30日 22:05

すべての返信

  • ウィルス対策ソフトベンダー側に、再現用のコード・バイナリを提出して、改善を依頼するしかないのでは?

    ウィルス対策ソフトのベンダーが何を以てどう判断するかは、彼らが決めることであり、かつ非公開の情報でしょう。
    また、エンジンやパターンは日々アップデートされるので、どのように回避するかを試行錯誤することは対策とは言いがたいです。(一時的に回避できてもすぐ引っかかるかもしれない)

    C/C++ がマイナーというよりは、ウィルス対策ソフトを使用されている現場で、開発現場が相対的に少ないからでしょう。
    多くの環境は「既知」のバイナリを使うことが多く、その「既知」のバイナリを前提とした開発姿勢なら、「頻繁に更新される怪しげな未知のバイナリ」を生み出す「ソフト開発現場」で食らうことは多いのかもしれません。
    ウィルス対策ソフトベンダーによってそういった戦略も異なると思いますので、開発現場で食らうことが多いのなら、特定フォルダーを除外するか、別のベンダーのソフトに移行を検証するかでしょう。
    2020年8月30日 9:35
    モデレータ
  • Azuleanさんが仰ること、一般論として、現象として、小生は経験があります。詳細は業務(の環境)に関わる情報なので書けませんが、要するに、プログラム開発をする機材も、一般のOA用の機材も、少なくともWindowsの機材に対しては同じウィルス対策が一括して実施されている、とご理解下さい。そのような環境において、

    • あるプロジェクトの微修正・ビルドを繰り返していると、ある一定期間、生成されたexeやdllが「検疫対象」(削除されてしまう)になったことがあります。
    • また、「検疫対象」とはならずとも、生成されたexeやdllがすべからく、「検体」としてウィルス対策ソフトに持っていかれた(コピーしてどこかへ送信された)ことがあります。

    このあたりのこと、全面的にウィルス対策側の設定次第かと。


    • 編集済み 外池 2020年8月30日 22:05
    • 回答としてマーク M14Cluster 2020年9月4日 23:54
    2020年8月30日 22:05
  • Azulean様、外池様、コメントありがとうございます。

    コードの問題でないと分かれば自信をもってTrend Microに報告したいと思います。

    ありがとうございました。

    余談ですが、他社開発ツールは int main() {return 0;} に絞り込んだコンソールアプリをPowerShellから実行すると駆除されます。

    2020年8月31日 14:21
  • M14Clusterさん、こんにちは。フォーラムオペレーターのKumoです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    本件、Azuleanさんと外池さんより参考になる投稿が寄せられたようでなによりです。

    [回答としてマーク]機能は設定された投稿が後から参照しやすくなりますので、
    同じ問題でお困りの方のためにも参考になった投稿に設定いただけますと幸いです。

    お手数ですが、ご協力の程どうかよろしくお願いいたします。

    引き続きMSDNフォーラムをご利用いただけますようお願い申し上げます。

    MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2020年9月1日 1:57
    モデレータ
  • その後の報告です。

    先に結論として、Intel HD Graphics 4600 のドライバーを更新したところ、駆除されなくなりました。

    経緯は、Trend Microに問い合わせ、9月3日付けの最新バージョンを紹介頂きましたが解消しませんでした。しかし、動作環境を問われ、自作PCに後ろめたさを感じて、別のメーカー製ノートPCで動作確認してみたところ駆除されなかったので、ディスプレイアダプタに着目しました。

    ドライバーが原因でアプリが駆除されるとはまさかでした。

    お騒がせしました。

    2020年9月5日 5:24