怎么才能通过HOOK方式来监控进程启动?这是小编最近逛论坛偶然发现很多人询问的问题,考虑到还有很多人会有同样的疑惑,于是小编就在这里准备了一篇相关的教程,并且给出了相应的代码,希望在你看完这篇文章后,能够有一定的收货!
对于程序员来说 在R3使用ms提供的winapi是非常舒服的,但是对于安全软件来说 这是非常不爽的.因为同一种功能可能使用多个api达成,比如说像CreateProcess.这个api将创建一个进程,但是为了兼容古老的操作系统 winexec也还是可以呼叫的,还有ShellExecute这个api..
那么.我在想 如何从如海般的r3 api中脱离出来?
结果发现 这三个api 不管怎么调用 最后也是NTCreateProcess(但是NTCreateProcess却是内部调用的NTCreateProcessEx,而NTCreateProcessEx是一个在ssdt表中存在的函数虽然也是未公开的),所以我只能转战r0了。
(首先去msdn找NTCreateProcess的原形,额.没有?好吧 去百度www.baidu.com/s?wd=NTCreateProcess,嗯 ..好吧 我失败了.去谷歌把.找到了
http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/NT%20Objects/Process/NtCreateProcess.html
没错 现在我再次感觉到对于程序员来说 不能依赖百度的原因了.)
这个函数的原型
NtCreateProcess(
OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN HANDLE ParentProcess,
IN BOOLEAN InheritObjectTable,
IN HANDLE SectionHandle OPTIONAL,
IN HANDLE DebugPort OPTIONAL,
IN HANDLE ExceptionPort OPTIONAL );
注意这里有个非常被我喜欢的东西 就是这个输出参数ProcessHandle 这是进程句柄..有了句柄我们就方便多了.
好了 准备工作都做好了..开始研究驱动程序的结构
驱动程序标准入口函数声明如下
NTSTATUS DriverEntry
(
IN PDRIVER_OBJECT theDriverObject,
IN PUNICODE_STRING theRegistryPath
);
在这个函数里面 我们应该做好驱动程序的符号链接
相关代码如下:
____________________________________________________________________________________________________
UNICODE_STRING uniSymLink, uniDevName;
RtlInitUnicodeString(&uniSymLink,L"\\DosDevices\\ZMPIdrive");
//用户层的设备对象名称
RtlInitUnicodeString(&uniDevName,L"\\Device\\ProcessesGuard");
//设备对象名称
ntStatus = IoCreateDevice(pDriverObj,
sizeof (DEVICE_EXTENSION),
&uniDevName,
FILE_DEVICE_UNKNOWN,
0,
FALSE,
&pDevObj);
if (!NT_SUCCESS(ntStatus))//判定IoCreateDevice是否成功
return(ntStatus);
IoCreateSymbolicLink(
&uniSymLink,
&uniDevName);
//创建用户层名字与自己设备对象名称的符号连接方便R3与自己通信
-------------------------------------------------------------------------------
进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础,那么电脑应用进程开多了就会影响我们的电脑运行速度,第七下载提供了多款进程清理工具和管理软件...
系统增强 / 90 KB
系统优化 / 266 KB
系统增强 / 273 KB
系统安全 / 1.53 MB
系统优化 / 4.49 MB
软件评论
请自觉遵守互联网相关政策法规,评论内容只代表网友观点,与本站立场无关!