剪贴板 obfuscation/deobfuscation - 遇到致命错误
Clipboard obfuscation/deobfuscation - encountering fatal error
我正在编写一个 C# Word 2013 加载项,如果要复制的内容位于受管理的 Word 应用程序中,它会混淆剪贴板内容。
我有几个问题。
- 如果数据格式为 "EnhancedMetaFile",我在尝试调用 Clipboard.GetDataObject().GetData() 时 运行 陷入 FatalExecutionEngineError。显然,根据我的研究,这是一个已知问题。我发现的最相关的问题是从 2007 年开始的,推荐的解决方案是否仍然使用剪贴板 APIs 而不是内置的 .NET 剪贴板库?以下参考代码片段。
https://support.microsoft.com/en-us/kb/323530
public static void ClipboardEvent(Object sender, EventArgs e)
{
IDataObject contentObj = Clipboard.GetDataObject();
if (contentObj != null)
{
foreach (string dataFormat in contentObj.GetFormats())
{
try
{
object data = contentObj.GetData(dataFormat); // throws here
object obfuscatedData = Obfuscate(data);
contentObj.SetData(dataFormat, obfuscatedData);
}
catch (Exception ex)
{
}
}
Clipboard.SetDataObject(contentObj);
}
}
我需要区分复制操作和我自己对clibboard的修改。我目前在 API 方法 AddClipboardFormatListener(IntPtr hwnd) 上有一个事件观察器,但每次剪贴板更改时都会通知我,包括当我混淆数据并将其添加到剪贴板时,因此我基本上以无限循环。如何区分复制操作和我自己对剪贴板内容的修改?
如果剪贴板的内容被混淆,并且我使用我的加载项检测到混淆数据的粘贴,我想对数据进行去混淆处理并按正常显示的方式显示。如何在粘贴实际发生之前检测粘贴和反混淆?我可以在我的加载项中重写以下方法吗?
https://msdn.microsoft.com/en-us/library/windows/desktop/ms649038(v=vs.85).aspx
感谢您提供的任何帮助。
我不知道#1。
2 - 将另一种数据格式添加到剪贴板。称之为CF_Clipboard_Obfuscated。注册它。当您检测到剪贴板更新时,请查看该格式是否存在。如果是,那么您知道自己听到的是自己的声音 "echo",请忽略它。
3 - 使用延迟渲染。
作为 2 的扩展,您可以只支持 "Clipboard Viewer Ignore" 标志,如此处(我的文章)所述:Ignoring Clipboard Updates with the CF_CLIPBOARD_VIEWER_IGNORE Clipboard Format
我正在编写一个 C# Word 2013 加载项,如果要复制的内容位于受管理的 Word 应用程序中,它会混淆剪贴板内容。
我有几个问题。
- 如果数据格式为 "EnhancedMetaFile",我在尝试调用 Clipboard.GetDataObject().GetData() 时 运行 陷入 FatalExecutionEngineError。显然,根据我的研究,这是一个已知问题。我发现的最相关的问题是从 2007 年开始的,推荐的解决方案是否仍然使用剪贴板 APIs 而不是内置的 .NET 剪贴板库?以下参考代码片段。
https://support.microsoft.com/en-us/kb/323530
public static void ClipboardEvent(Object sender, EventArgs e)
{
IDataObject contentObj = Clipboard.GetDataObject();
if (contentObj != null)
{
foreach (string dataFormat in contentObj.GetFormats())
{
try
{
object data = contentObj.GetData(dataFormat); // throws here
object obfuscatedData = Obfuscate(data);
contentObj.SetData(dataFormat, obfuscatedData);
}
catch (Exception ex)
{
}
}
Clipboard.SetDataObject(contentObj);
}
}
我需要区分复制操作和我自己对clibboard的修改。我目前在 API 方法 AddClipboardFormatListener(IntPtr hwnd) 上有一个事件观察器,但每次剪贴板更改时都会通知我,包括当我混淆数据并将其添加到剪贴板时,因此我基本上以无限循环。如何区分复制操作和我自己对剪贴板内容的修改?
如果剪贴板的内容被混淆,并且我使用我的加载项检测到混淆数据的粘贴,我想对数据进行去混淆处理并按正常显示的方式显示。如何在粘贴实际发生之前检测粘贴和反混淆?我可以在我的加载项中重写以下方法吗?
https://msdn.microsoft.com/en-us/library/windows/desktop/ms649038(v=vs.85).aspx
感谢您提供的任何帮助。
我不知道#1。
2 - 将另一种数据格式添加到剪贴板。称之为CF_Clipboard_Obfuscated。注册它。当您检测到剪贴板更新时,请查看该格式是否存在。如果是,那么您知道自己听到的是自己的声音 "echo",请忽略它。
3 - 使用延迟渲染。
作为 2 的扩展,您可以只支持 "Clipboard Viewer Ignore" 标志,如此处(我的文章)所述:Ignoring Clipboard Updates with the CF_CLIPBOARD_VIEWER_IGNORE Clipboard Format