是否可以编写一个 "access clipboard" 监控程序?
Is it possible to code an "access clipboard" monitoring program?
是否有可能在 Windows 上创建一个能够跟踪哪个进程正在使用剪贴板的程序(C# 甚至 C++,或任何其他语言)?
我有一个恶意软件在我粘贴以太坊地址时修改了我的剪贴板。没有工具能够检测到此恶意软件...因为我是程序员,所以我想编写一个工具来帮助我找到恶意进程。
知道是否可行吗?
非常感谢
没有 Win32 API 用于监控对剪贴板的访问,仅用于检测何时对剪贴板的内容进行更改。
要完成您的要求,您必须编写一个直接挂钩 Win32 的 DLL OpenClipboard()
function, such as with a detour, and then you can inject that DLL into all running processes, such as with SetWindowsHookEx()
, AppInit_DLLs
, etc. When your hook is called, it can communicate information about the calling process back to your main app as needed, such as the process ID。
您可以找到可以为您执行此操作的现有且信誉良好的工具:
Sysmon v12.0 来自 SysInternals。
虽然它没有在文档页面上提到它,this 状态
Sysmon 12 adds clipboard capturing
我筛选了一些帮助和参考资料并确认以下配置有效:
<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 程序员:)
从您的代码中,通过延迟呈现将内容复制到剪贴板:
::SetClipboardData(CF_TEXT, NULL);
当某人(那个恶意软件?)试图获取该文本时,您将收到一条 WM_RENDERFORMAT
消息。如果你在那里放置一个断点并停止执行,调用程序将在其 GetClipboardData
调用或类似的东西上被阻止。
我不知道从这里去哪里。枚举所有进程?使用调试器附加到每个?看看他们的调用堆栈?
是否有可能在 Windows 上创建一个能够跟踪哪个进程正在使用剪贴板的程序(C# 甚至 C++,或任何其他语言)?
我有一个恶意软件在我粘贴以太坊地址时修改了我的剪贴板。没有工具能够检测到此恶意软件...因为我是程序员,所以我想编写一个工具来帮助我找到恶意进程。
知道是否可行吗?
非常感谢
没有 Win32 API 用于监控对剪贴板的访问,仅用于检测何时对剪贴板的内容进行更改。
要完成您的要求,您必须编写一个直接挂钩 Win32 的 DLL OpenClipboard()
function, such as with a detour, and then you can inject that DLL into all running processes, such as with SetWindowsHookEx()
, AppInit_DLLs
, etc. When your hook is called, it can communicate information about the calling process back to your main app as needed, such as the process ID。
您可以找到可以为您执行此操作的现有且信誉良好的工具: Sysmon v12.0 来自 SysInternals。
虽然它没有在文档页面上提到它,this 状态
Sysmon 12 adds clipboard capturing
我筛选了一些帮助和参考资料并确认以下配置有效:
<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 程序员:)
从您的代码中,通过延迟呈现将内容复制到剪贴板:
::SetClipboardData(CF_TEXT, NULL);
当某人(那个恶意软件?)试图获取该文本时,您将收到一条 WM_RENDERFORMAT
消息。如果你在那里放置一个断点并停止执行,调用程序将在其 GetClipboardData
调用或类似的东西上被阻止。
我不知道从这里去哪里。枚举所有进程?使用调试器附加到每个?看看他们的调用堆栈?