2

我编写了一个小型 C++ 程序,它检查 Windows 剪贴板内容是否已更改并打印该内容的类型。我使用 Windows Visual Studio 2019 将程序编译为 .exe 文件,但它被 Windows Defender 阻止(文件已被删除)。为什么会发生这种情况以及如何预防?

当然,如果我打开 Windows Defender 并将我的文件标记为“不是病毒”,那么一切正常,但是如何防止客户计算机被阻止?我是否需要创建一些“清单”文件..?

对不起,如果问题很愚蠢,我是 C++ 世界的新手

#include <iostream>
#include <io.h>
#include <fcntl.h>
#include <Windows.h>
#include <conio.h>

int main()
{
    DWORD m_lastClipboardSequenceNumber = GetClipboardSequenceNumber();

    while (1) {
        Sleep(100);
        const DWORD newClipboardSequenceNumber = GetClipboardSequenceNumber();

        if (newClipboardSequenceNumber == m_lastClipboardSequenceNumber)
            continue;

        if (IsClipboardFormatAvailable(CF_UNICODETEXT)) {
            std::wcout << "CF_UNICODETEXT\n";
        }

        if (IsClipboardFormatAvailable(CF_HDROP)) {
            std::wcout << "CF_HDROP\n";
        }

        if (IsClipboardFormatAvailable(CF_BITMAP)) {
            std::wcout << "CF_BITMAP\n";
        }

        m_lastClipboardSequenceNumber = newClipboardSequenceNumber;
    }

    return 0;
}
4

2 回答 2

2

我个人认为,由于您观看剪贴板的方法过于滥用,Windows Defender 正在阻止您的代码。

尝试监视剪贴板部分并为剪贴板更改注册侦听器,以查看是否发生相同的事情。您的代码会复杂得多,因为您需要创建一个窗口循环来接收消息,但我认为这样就可以了。

于 2019-08-08T07:24:25.953 回答
2

听起来您的问题根本不在于 C++,而更多在于 Windows,更准确地说,是 Windows Defender。据我所知,这里的问题是 Windows Defender 默认启动时不允许来自未知来源的 .exe 文件在没有管理员权限的计算机上运行。这是一个您无法远程修复的问题,否则会极大地破坏 Windows Defender 的现有实用性,因为恶意行为者可以使用它来运行他们的漏洞利用程序。

您可以为您的用例解决此问题的步骤:如果您可以访问要在其上运行它的计算机,请尝试将您的分发方法添加到受信任的来源。或者,尝试使用密钥对其进行签名并将该签名添加到受信任的。

于 2019-08-08T07:23:29.887 回答