我已经写了一个小的C++程序,它检查Windows剪贴板的内容是否发生了变化,并打印出一种类型的内容。我使用Windows Visual Studio2019将程序编译成.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;
}
发布于 2019-08-08 15:23:30
听起来你的问题根本不是C++的问题,更确切地说,是Windows Defender。据我所知,这里的问题是Windows Defender在默认情况下启动,不允许在没有管理员权限的情况下在计算机上运行来自未知来源的.exe文件。这是一个你不能远程修复的问题,否则这将极大地破坏Windows Defender的现有有用性,因为恶意攻击者可能只是利用它来运行他们的漏洞。
您可以针对您的用例采取可能修复此问题的步骤:如果您有权访问要在其上运行此操作的计算机,请尝试将您的分发方法添加到受信任的来源。或者,尝试使用密钥对其进行签名,并将该签名添加到trusted。
发布于 2019-08-08 15:24:26
我个人认为由于你观看剪贴板的方法太粗暴了,windows defender阻止了你的代码。
尝试monitoring clipboard部分并注册剪贴板更改的侦听器,看看是否发生了相同的事情。您的代码将更加复杂,因为您将需要创建一个用于接收消息的窗口循环,但我认为这样做是可以的。
https://stackoverflow.com/questions/57407125
复制相似问题