如何拦截每个试图在C#中使用API函数的用户?

如何拦截每个试图在C#中使用API函数的用户?,c#,winapi,hook,intercept,C#,Winapi,Hook,Intercept,我需要阻止计算机上的任何屏幕捕获软件进行屏幕截图。因为它们都是标准API函数,我想我可以监视和阻止它们。 我需要用C。 我所发现的只是如何在特定程序(屏幕捕获程序)中监视和阻止它们。他们在程序中寻找一个函数,然后在我的函数地址上更改它的地址。 但是如果我没有任何特定的程序,我怎么能做到呢?我需要阻止任何试图截图的人。你的最终目标是否可能,我不知道,但对于连接API部分,我可以帮助你 我过去曾多次使用该库,这将使您能够相当轻松地从C#代码钩住和截获系统函数调用。请通读安装说明 对于实际查找我推荐的

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

你的最终目标是否可能,我不知道,但对于连接API部分,我可以帮助你

我过去曾多次使用该库,这将使您能够相当轻松地从C#代码钩住和截获系统函数调用。请通读安装说明

对于实际查找我推荐的API,它仍然处于Alpha阶段,但它工作得非常好,而且是免费的。您只需将它挂接到一个进程上,它就会告诉您它所做的每个外部DLL调用(如果您有DLL的xml定义文件,那么该程序将提供几乎所有windows API DLL的预定义参数)


EasyHook和API Monitor的结合对于干扰其他程序的调用来说是一个巨大的1-2打击。

正如Scott刚刚发布的那样,API钩子很可能可以防止绘制事件只进入桌面绑定的句柄而不是其他句柄,并拒绝以其他方式绘制。但是,你需要考虑下面的场景,看看它们是否与你的方法有关:

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

作为一个例子,没有任何东西可以阻止某人将显示器电缆插入另一台计算机的捕获卡,并以这种方式拍摄屏幕截图。再说一次,你的钩子在这里是无助的

底线是,您可以让它变得更难,但绕过这样的保护可能是非常琐碎的事情

  • 我的2c

    • 不可能阻止截屏。由于DWM(桌面窗口管理器),这场战斗已经失败。它的级别低于Win32和设备上下文

      如果您想保护程序中的文本,有很多比截图和OCR更容易提取的方法。TextOut和/或Direct2D挂钩和辅助功能API

      如果你的程序中有很多IP。然后不要在屏幕上显示所有内容。确保在GUI中爬行文本很繁琐,而且很难实现自动化。不要在程序内存中加载整个文本

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

      这两种方法对用户都不是侵入性的

      **一个非常有攻击性的建议**: 如果你真的想阻止任何人“窃取”你的内容

    • 实现鼠标和键盘挂钩。过滤掉典型的复制快捷方式。防止鼠标离开应用程序的边界
    • 仅当操作系统运行众所周知的进程和服务时,才允许应用程序运行。 如果启动了任何您无法识别的进程,请关闭应用程序并通知用户,然后请求用户关闭它。ofc要确保有人不仅仅是在欺骗一个众所周知的过程
    • 按照您的建议监视剪贴板

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

      你有没有想过捕捉按键事件?出于兴趣,他们为什么要这么做?至于挂钩,您将如何可靠地区分合法的操作系统服务调用(如bitblt(或截屏过程中的任何其他入口点))和未知的任意第三方应用程序的调用?相关的@亚历克斯克关于这是一个伟大的链接是一个失败的战斗,任何用户与一点技能(或只是一个真正的相机)!我需要它,因为我在为电子图书馆写查看器,人们不应该复制书籍。为什么任何系统进程都会调用屏幕截图功能?您担心人们使用屏幕截图处理整本书吗?那将是一个了不起的壮举!我希望你能保护高度私密性、机密性或危险性的材料。EasyHook是否适用于Windows 8?特别是在metro风格的应用程序中?我查看了文档,没有找到。@EkoostikMartin我不知道,我可以说挂接应用程序可能是非metro应用程序,但我不认为非metro应用程序无法挂接metro样式的应用程序的任何原因。您可能需要使用beta版,查看他们最近确实进行了一些针对Windows 8 x64的修复的更改日志。(见下图)谢谢。你说了很多关于她的话。IP是什么意思?也许我可以用某种方式阻止剪贴板,因为所有的截图程序可能都在使用它?我意识到我不能完全阻止它,但我必须至少降低安全性。我可以在窗口每次失去焦点时用黑色绘制窗口,并在窗口处于活动状态时保护PrintScreen按钮。但这对用户来说是不可接受的。@user2976256您永远也无法真正阻止截图。没有什么可以阻止另一个程序捕获您的窗口,即使只有您的窗口具有焦点。它很简单,只需获取设备上下文,并对内容进行位blit。我会去的