C# 检测WinAPI调用

C# 检测WinAPI调用,c#,security,winapi,C#,Security,Winapi,我正在重构一家保险公司员工使用的一个应用程序,他们的计算机上存在一些恶意软件问题,这些恶意软件控制这个应用程序做坏事,或者至少他们是这么说的 我很确定恶意软件正在使用Win API调用应用程序实例,所以我的问题是,有没有办法通过调用Win API来检测是真正的用户在控制应用程序还是被另一个进程控制?这个应用程序是用C语言编写的。 < P>这个答案来自于我在使用C++开发Win32应用程序的经验。p> 我只能想到两种控制应用程序的方法——一种是使用OLE自动化,使用自动化动词,另一种是将键盘/鼠标

我正在重构一家保险公司员工使用的一个应用程序,他们的计算机上存在一些恶意软件问题,这些恶意软件控制这个应用程序做坏事,或者至少他们是这么说的


我很确定恶意软件正在使用Win API调用应用程序实例,所以我的问题是,有没有办法通过调用Win API来检测是真正的用户在控制应用程序还是被另一个进程控制?这个应用程序是用C语言编写的。

< P>这个答案来自于我在使用C++开发Win32应用程序的经验。p> 我只能想到两种控制应用程序的方法——一种是使用OLE自动化,使用自动化动词,另一种是将键盘/鼠标事件插入系统事件队列。(我假设此应用程序未侦听任何源自网络的命令)。您可以通过检查源代码并使用带有一些OutputDebugString调用的调试器来验证第一个。第二个只能由恶意软件扫描程序检测。任何COTS/free AV或MS security essentials都应该能够识别恶意软件,当然,除非它是由恶意员工内部编写的


您是否查看了task manager流程列表,并逐一查看了它们,以查看是否有任何可疑的内容?你能以提升的权限运行应用程序吗?如果存在OLE automation客户端,则该客户端将无法访问该进程。

还有更多的可能性:将消息注入窗口消息队列(与系统输入队列非常不同),或者安装虚拟输入驱动程序,通过与真实鼠标/键盘完全相同的路径发送输入消息。在极端情况下,键盘固件被感染,计算机端没有任何区别,这使得检测非常困难。啊,这是正确的。忘记了消息队列方法。至于第二种方法,消息是否最终会出现在线程的输入队列中,就像keybd_事件/mouse_事件调用一样?是的,但我相信
keybd_事件
mouse_事件
SendInput
会在消息上设置一个标志,表明它是由软件生成的。通过驱动程序堆栈输入的内容不会像那样被标记。谢谢你们给我指出了正确的方向。事实上,我无法访问他们的电脑,他们有一名技术人员负责他们的工作,我猜他就是我的工作报告的作者。我会试着了解更多关于这方面的信息。