利用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 上运行。

相关文章推荐

ShellExecuteHook

 【转:laiwuyingas 木马技术发展趋势回顾】 经常关注安全的用户或许会见到过"ShellExecuteHook",如今许多木马和恶意程序都在用户层使用它作为启动方式了,但...
  • jo_say
  • jo_say
  • 2011年02月05日 21:50
  • 1368

利用IShellExecuteHook接口对程序监控

利用IShellExecuteHook接口对程序监控
  • laiboy
  • laiboy
  • 2010年07月22日 14:39
  • 3753

利用CreateProcess实现程序未启动前的监视,并注入DLL!

一、DLL注入技术的用途 DLL注入技术的用途是很广泛的,这主要体现在: 1、假如你要操纵的对象涉及的数据不在进程内; 2、你想对目标进程中的函数进行拦截(甚至API函数,嘿嘿,由此...

用C#创建SHELL扩展

 安徽省民航局 周毅(longsoft@ah163.com)一、前言     .NET平台是微软公司推出的作为未来软件运行和开发的环境,C#是微软力荐的在.NET平台下开发应用软件的首选语言。本文将讨...

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

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

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

btrace介绍       下载地址: https://kenai.com/projects/btrace/downloads/directory/releases/       选择版本进行下...

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

btrace介绍       下载地址:https://kenai.com/projects/btrace/downloads/directory/releases/       选择版本进行下载...

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

一、背景         在生产环境中可能经常遇到各种问题,定位问题需要获取程序运行时的数据信息,如方法参数、返回值、全局变量、堆栈信息等。为了获取这些数据信息,我们可以通过改写代码,增加日志信息的...
  • lipc_
  • lipc_
  • 2016年10月18日 21:33
  • 870

(8)利用JConsole工具监控java程序内存和JVM

一.找到java应用程序对应的进程PI 性能测试应用程序访问地址:http://192.168.29.218:7070/training/ 部署的应用服务器为tomcat6.028 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用IShellExecuteHook接口对程序监控
举报原因:
原因补充:

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