【问题标题】:Why does Avira consider "CoCreateInstance()" function as a malware?为什么 Avira 将“CoCreateInstance()”函数视为恶意软件?
【发布时间】:2018-07-18 07:08:25
【问题描述】:

我使用 Visual Studio 2017 创建了 C++ 控制台应用程序,它是提取 .zip 文件。但是,当我运行 application.exe 文件时,Avira 防病毒软件会将我的 exe 检测为恶意软件。

我发现 CoCreateInstance(CLSID_Shell, NULL, CLSCTX_INPROC_SERVER, IID_IShellDispatch, (void **)&pISD) 函数在实际 Avira 中产生问题。

为什么 Avira 将 CoCreateInstance(CLSID_Shell, NULL, CLSCTX_INPROC_SERVER, IID_IShellDispatch, (void **)&pISD) 功能视为恶意软件?

我的功能:

bool Utils::Unzip2Folder(BSTR lpZipFile, BSTR lpFolder)
{
    IShellDispatch *pISD;

    Folder  *pZippedFile = 0L;
    Folder  *pDestination = 0L;

    long FilesCount = 0;
    IDispatch* pItem = 0L;
    FolderItems *pFilesInside = 0L;

    VARIANT Options, OutFolder, InZipFile, Item;
    CoInitialize(NULL);
    __try {
        if (CoCreateInstance(CLSID_Shell, NULL, CLSCTX_INPROC_SERVER, IID_IShellDispatch, (void **)&pISD) != S_OK)
            return 1;

        InZipFile.vt = VT_BSTR;
        InZipFile.bstrVal = lpZipFile;
        pISD->NameSpace(InZipFile, &pZippedFile);
        if (!pZippedFile)
        {
            pISD->Release();
            return 1;
        }

        OutFolder.vt = VT_BSTR;
        OutFolder.bstrVal = lpFolder;
        pISD->NameSpace(OutFolder, &pDestination);
        if (!pDestination)
        {
            pZippedFile->Release();
            pISD->Release();
            return 1;
        }

        pZippedFile->Items(&pFilesInside);
        if (!pFilesInside)
        {
            pDestination->Release();
            pZippedFile->Release();
            pISD->Release();
            return 1;
        }

        pFilesInside->get_Count(&FilesCount);
        if (FilesCount < 1)
        {
            pFilesInside->Release();
            pDestination->Release();
            pZippedFile->Release();
            pISD->Release();
            return 0;
        }

        pFilesInside->QueryInterface(IID_IDispatch, (void**)&pItem);

        Item.vt = VT_DISPATCH;
        Item.pdispVal = pItem;

        Options.vt = VT_I4;
        Options.lVal = 1024 | 512 | 16 | 4;//http://msdn.microsoft.com/en-us/library/bb787866(VS.85).aspx

        bool retval = pDestination->CopyHere(Item, Options) == S_OK;

        pItem->Release(); pItem = 0L;
        pFilesInside->Release(); pFilesInside = 0L;
        pDestination->Release(); pDestination = 0L;
        pZippedFile->Release(); pZippedFile = 0L;
        pISD->Release(); pISD = 0L;

        return retval;
    }
    __finally
    {
        CoUninitialize();
    }
}

【问题讨论】:

  • 您应该询问“Avira”。与许多 WinAPI 函数一样,这个函数很可能是许多恶意软件应用程序的一部分。
  • “我发现 CoCreateInstance… 实际 Avira 产生问题的函数。” - 你是怎么发现的?是什么让您认为它没有被标记只是因为它不是众所周知的可执行文件?
  • @VTT 当我在 VirasTotal.com 中评论 CoCreateInstance 并检查 exe 时,就没有问题了。
  • 可以使用 CoCreateInstance 在正在运行的进程中附加一个 DLL。过去的许多病毒可能都这样使用它并因此被标记!

标签: c++ winapi visual-c++ antivirus


【解决方案1】:

没有真正好的答案。为什么 AV 系统将某些文件检测为误报。

大多数误报都是基于一些启发式的。

  1. 小程序比大程序更容易出现问题。
  2. 与其他 DLL 的依赖关系较少的程序会比具有依赖关系的复杂 EXE 更容易出现问题。
  3. API 函数的某些组合似乎比其他函数更成问题。使用更复杂的 API 函数和 UI 似乎问题较少。
  4. 签名的可执行文件对于 AV 系统中的此类启发式 traos 风险较小。
  5. 许多程序(和公司的签名)在内部被列入白名单。您的程序未知。

这个函数肯定不是你使用的唯一 API 函数。检查取决于,你会发现更多!

只需将你的exe路径添加到Avira的排除列表中...在小工具的开发阶段我不得不多次这样做。

最后提示:询问 Avira 并向他们发送您的文件。他们可能会更改启发式模式匹配,因此这不再是误报。

我对 Avira 薮时间产生了这种影响。

【讨论】:

  • 0。程序未知且已列入白名单
  • @VTT:是的,我添加了这个!
猜你喜欢
  • 2016-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
  • 2019-01-10
相关资源
最近更新 更多