如何拦截每个尝试在C#中使用API​​函数?

我需要阻止计算机上的任何屏幕捕获软件进行屏幕截图。 由于它们都是标准的API函数,我想我可以监视和阻止它们。 我需要使用C#。 我所发现的是如何在某个程序中监视和阻止它们(屏幕捕获程序)。 他们正在寻找程序中的一个函数,然后他们在我的函数地址上更改它的地址。 但是,如果我没有任何某些程序,我怎么能这样做呢? 我需要阻止任何试图截屏的人。

无法阻止拍摄屏幕截图。 由于DWM(桌面窗口管理器),战斗已经失败。 它的级别低于Win32和设备上下文。

如果你想保护程序中的文本,有很多方法可以提取它而不是屏幕截图和OCR。 TextOut和/或Direct2D挂钩和辅助functionAPI。

如果你的程序中有很多IP。 然后不要在屏幕上全部显示。 确保为文本抓取GUI并且难以自动化它是繁琐的。 并且不要将整个文本加载到程序的内存中。

可能的解决方案 :1。防止复制文本。 将文本绘制为图像。 2.要防止可访问性技术(如屏幕阅读器)覆盖控件中的WndProc,请处理并忽略窗口消息WM_GETOBJECT。 3.如果他们试图使用OCR,那就更难了。 在文本后面绘制图形。 人类可读,但机器解释它要困难得多。

这些方法都不是用户的侵入性。

**一个非常有创意的建议**:如果你真的认真防止任何人“偷”你的内容。

  1. 实现鼠标和键盘钩子。 过滤掉典型的复制快捷方式。 防止鼠标离开应用程序的边界。
  2. 允许您的应用程序仅在操作系统运行众所周知的流程和服务时运行。 如果任何进程启动而您无法识别,则将应用程序清空并通知用户,并请求用户关闭它。 并且确保某人不仅仅是欺骗一个众所周知的过程。
  3. 按照自己的建议监控剪贴板。

您可以根据应用程序的上下文软化其中一些建议。

如果你的最终目标是否可行,我不知道,但是对于挂钩API部分,我可以帮助你。

我过去曾多次使用过EasyHook库,这样可以让你轻松地从C#代码中挂钩和拦截系统函数调用。 只需阅读PDF教程以获取设置说明。

为了实际找到API,我推荐Rohitab的API监视器 ,它仍处于Alpha阶段,但它工作得非常好并且是免费的。 你只需将它挂钩到一个进程,它会告诉你它所做的每个外部DLL调用(如果你有DLL的xml定义文件,它会传递参数,该程序几乎所有的windows API dll都是预先定义的) 。

在此处输入图像描述

EasyHook和API Monitor的组合对于与其他程序的调用进行混淆是一个很好的选择。

正如斯科特刚刚发布的那样,可以通过API挂钩来防止绘制事件只发送到桌面绑定句柄而不是其他人,并拒绝绘制其他内容。 但是,您需要考虑以下方案,看看它们是否对您的方法构成相关威胁:

您的软件可能正在VMWare等虚拟机中运行。 这样的软件具有捕获在“虚拟硬件”级别上执行此操作的屏幕的能力,并且您的API挂钩将无法识别它 – 如果我想绕过您的保护,这将是最简单的方法。

正如post在这里建议的那样 ,没有任何东西也可以防止有人拿显示器电缆并将其插入另一台计算机的捕获卡,并以此方式截取屏幕截图。 再次,你的钩子在这里将无助。

最重要的是,你可以让它更难做,但绕过这样的保护可能是非常简单的事情。

  • 我的2c。