欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

利用IShellExecuteHook接口对程序监控

利用IShellExecuteHook接口对程序监控

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
处理的IShellExecuteHook的handler(即Com server)必须要在这两个地方注册。
实现IShellExecuteHook的Execute处理函数
以下为实现IShellExecuteHook的Execute方法须要注意的问题,Execute方法带有一个LPSHELLEXECUTEINFO 的参数,该参数指向一个可执行程序的所有信息,执行动作(打开,显示,链接等)lpesi->lpVerb,被执行程序的完整路径名称,lpsei->lpFile,调用的目录,程序执行的参数等。
当返回值为 S_FALSE的时候,则是允许程序按正常方式打开,当返回为 S_OK的事候,则程序是被阻止执行。在实现程序黑名单的时候,当发现程序是包含在黑名单中的,则返回 S_OK,实现程序执行拦截。
实现IShellExecuteHook的源码
如图,实现一个IShellExecuteImple类,并实现IUnkown和Add,Release等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 7 和 Vista下运行。
HKEY_LOCAL_MACHINE
\Software
\Microsoft
\Windows
\CurrentVersion
\Policies
\Explorer
加入以下键值
EnableShellExecuteHooks
REG_DWORD
1
则可以让IShellExecuteHooks在Windows 7 和 Vista 上运行。
http://blog.csdn.net/laiboy/archive/2010/07/22/5755324.aspx
源码
http://blogimg.chinaunix.net/blog/upfile2/100722143536.rar
上不了图!麻烦一点就看源码吧!
高手不要拍砖了!!

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功