问题描述
在Windows上是否有可能创建一个程序(C#甚至C ++或任何其他语言),该程序可以跟踪使用剪贴板的进程?
我有一个恶意软件,当我粘贴以太坊地址时会修改剪贴板。没有工具能够检测到该恶意软件...因为我是程序员,所以我想编写一种工具来帮助我找到恶意进程。
有没有可能?
非常感谢
解决方法
没有Win32 API来监视对剪贴板的访问,仅用于检测何时对剪贴板的内容进行了更改。
要执行您要的操作,您将必须编写一个直接钩住Win32 OpenClipboard()
函数的DLL,例如使用detour,然后可以将该DLL注入所有正在运行的DLL中。进程,例如SetWindowsHookEx()
,AppInit_DLLs
等。当您的钩子被调用时,它可以根据需要将有关调用进程的信息传达回您的主应用程序,例如process ID。
您可以找到一个现有的信誉良好的工具来为您做到这一点: Sysmon v12.0由SysInternals提供。
尽管在文档页面上没有提及,但this指出
Sysmon 12添加剪贴板捕获
我筛选了一些帮助和参考,并确认以下配置有效:
<Sysmon schemaversion="4.40">
<CaptureClipboard />
<EventFiltering>
<RuleGroup name="" groupRelation="or">
<ClipboardChange onmatch="exclude">
</ClipboardChange>
</RuleGroup>
</EventFiltering>
</Sysmon>
您可以在Windows事件查看器中查看这些捕获的事件,
Applications and Services Logs/Microsoft/Windows/Sysmon/Operational
。
响应我在命令提示符下复制文本,我可以看到此记录的事件:
Clipboard changed:
RuleName: -
UtcTime: 2020-10-12 22:08:45.505
ProcessGuid: {0509ed25-cd58-5f84-41a3-050000003500}
ProcessId: 20708
Image: C:\Windows\System32\cmd.exe
Session: 3
etc...
,
另一种选择,适合DIY程序员:)
从您的代码中,将某些内容复制到剪贴板并延迟渲染:
digest::Digest
当某人(该恶意软件?)试图获取该文本时,您会收到一条Digest
消息。如果您在此处放置断点并停止执行,则调用程序将在其::SetClipboardData(CF_TEXT,NULL);
调用或类似的操作中被阻止。
我不知道从这里去哪里。枚举所有过程?附加到每个调试器吗?看看他们的电话栈吗?