利用IShellExecuteHook接口对程序监控

转载 2015年07月09日 18:35:20

利用IShellExecuteHook接口对程序监控

 

作者:赖锋(忙碌命)

Blog: http://blog.csdn.net/laiboy

      http://laiboy.cublog.cn

 

Windows的应用程序的调用大部分是利用ShellExecute()ShellExecuteEx()这两个API调用,而这两个API最终调用的是CreateProcess()这个API,它们的作用是获取进程序足够的参数传给CreateProcess()。所以,只要监控这两个API的调用,就可以实现对程序启动的监视和控制。

Windows操作系统提供了IShellExecuteHook这个COM的接口,这是一个传统的Windows操作系统的HOOK模型中的一个接口。

注册IShellExecuteHook函数

IShellExecuteHook是一个COM服务器,这个COM所注册的地方位于注册表两个地方,分别为:

HEKY_CLASSES_ROOT

/CLSID

HKEY_LOCAL_MACHINE

/Software

/Microsoft

/Windows

/CurrentVersion

/Explorer

/ShellExecuteHooks

处理的IShellExecuteHookhandler(即Com server)必须要在这两个地方注册。

实现IShellExecuteHookExecute处理函数

以下为实现IShellExecuteHookExecute方法须要注意的问题,Execute方法带有一个LPSHELLEXECUTEINFO 的参数,该参数指向一个可执行程序的所有信息,执行动作(打开,显示,链接等)lpesi->lpVerb,被执行程序的完整路径名称,lpsei->lpFile,调用的目录,程序执行的参数等。

当返回值为 S_FALSE的时候,则是允许程序按正常方式打开,当返回为 S_OK的事候,则程序是被阻止执行。在实现程序黑名单的时候,当发现程序是包含在黑名单中的,则返回 S_OK,实现程序执行拦截。

实现IShellExecuteHook的源码

如图,实现一个IShellExecuteImple类,并实现IUnkownAddRelease等COM接口。

 

 

实现IShellExecuteHook接口的Execute方法:

 

以下为实现Execute的方法。

设计如下:

Ø 记录可执行程序的名称,启动时间,并记录到C://ShellHook.txt文件中

Ø 读取程序拦截黑名单(C://ShellHook.ini),根据黑名单拦截程序。

 

最后修改rgs文件,注册ShellHook.dll的时候会在指定键加入ShellHook.Dll

 

调试IShellExecuteHook的问题

每次编译新运行的时候需要缷载ShellHook.dll,并注销重新注册加载测试。

Execute执行失败时,会导致Windows Explorer无法执行,要在安全模式下重新运行regsvr32 /u ShellHook.dll才能让Windows Explorer正常运行。

 

运行IShellExecuteHook的结果

 

执行程序的时间

被拦截的程序

 

 

IShellExecuteHook支持Windows 7 和 Vista

需要将以下开关打开,则IShellExecuteHook接口可以在Windows 和 Vista下运行。

HKEY_LOCAL_MACHINE

/Software

/Microsoft

/Windows

/CurrentVersion

/Policies

/Explorer

加入以下键值

EnableShellExecuteHooks

REG_DWORD

1

则可以让IShellExecuteHooksWindows 7 和 Vista 上运行。

com学习笔记(3)基本的com接口-引用计数的实现

   clr内存是托管的,但c++不是.我们用完组件还得回收。那么就有一个问题。我们需要知道使用中的组件可以释放了吗?必须想一种机制在适当的时候来释放资源,于是就有了引用计数的概念.IUnknow...
  • clingingboy
  • clingingboy
  • 2009年07月05日 23:05
  • 378

基于postman/newman实现的HTTP接口监控

本文主要分两部分,第一部分是介绍postman的一些使用tips,第二部分是简单介绍下自己基于postman/newman写的一个HTTP接口监控的程序~ postman postma...
  • KUN_PHP
  • KUN_PHP
  • 2017年07月23日 22:54
  • 532

WinExec() system() ShellExecute() 区别

WinExec()是一个WIN32 API,它的第一个参数必须包含一个可执行文件名, System()是C库函数,它接受一个DOS命令。 ShellExecute()和WinExec()区别 ━...
  • binnygoal
  • binnygoal
  • 2014年02月04日 14:41
  • 4681

API Monitor(API监控工具)

概观 API Monitor是一个免费软件,可以让你监视和控制应用程序和服务,取得了API调用。 它是一个强大的工具,看到的应用程序和服务是如何工作的,或跟踪,你在自己的应用程序的问题。 产品特...
  • whatday
  • whatday
  • 2015年04月22日 14:38
  • 18106

java 方法的执行时间监控 设置超时(Future 接口)

在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。 Future接口是Java标准API的一部分,在java.uti...
  • huidanyige
  • huidanyige
  • 2015年09月11日 10:21
  • 4888

【转】API接口监控那些事儿

1. 背景 在联盟广告业务中,广告投放接口的主要功能是给各大中小网站提供广告物料,该接口日pv量在百亿级别,部署在多个机房内。在测试该接口的过程中,可能会出现以下几种情况:     1.接...
  • muyimo
  • muyimo
  • 2017年05月10日 17:32
  • 1575

利用jdk自带的运行监控工具JConsole观察分析Java程序的运行

原文链接 一、JConsole是什么     从Java 5开始 引入了 JConsole。JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行...
  • ABBuggy
  • ABBuggy
  • 2011年11月10日 22:55
  • 2892

利用btrace在线监控java程序状态

btrace介绍       下载地址:https://kenai.com/projects/btrace/downloads/directory/releases/       选择版本进行下载...
  • MINEZHANGHAO
  • MINEZHANGHAO
  • 2014年03月01日 17:25
  • 11403

利用btrace在线监控java程序状态

btrace介绍       下载地址: https://kenai.com/projects/btrace/downloads/directory/releases/       选择版本进行下...
  • xiaomin1991222
  • xiaomin1991222
  • 2016年03月10日 16:05
  • 82

磁盘空间监测程序,对磁盘空间利用情况做监控

  • 2009年04月03日 00:43
  • 54KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用IShellExecuteHook接口对程序监控
举报原因:
原因补充:

(最多只允许输入30个字)