首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

驱动开发:内核监控进程与线程

在前面的文章中LyShark一直在重复的实现对系统底层模块的枚举,今天我们将展开一个新的话题,内核监控,我们以监控进程线程创建为例,在Win10系统中监控进程与线程可以使用微软提供给我们的两个新函数来实现...,此类函数的原理是创建一个事件,当有进程或线程被创建或者注销时,系统会通过机制将该进程相关信息优先返回给我们自己的函数待处理结束后再转向系统层。...进程默认会设置CreateProcess通知,而线程则会设置CreateThread通知,我们来看ARK工具中的枚举效果。...来创建,当新进程创建时会优先执行,我们看下微软是如何定义的结构。...创建函数,之后就可监控系统所有线程的创建,具体实现代码如下。

40510

驱动开发:内核枚举进程与线程ObCall

在笔者上一篇文章《驱动开发:内核枚举Registry注册表》中我们通过特征码定位实现了对注册表的枚举,本篇文章LyShark将教大家如何枚举系统中的ProcessObCall进程以及ThreadObCall...线程,之所以放在一起来讲解是因为这两中调在枚举是都需要使用通用结构体_OB_CALLBACK以及_OBJECT_TYPE所以放在一起来讲解最好不过。...= (PLIST_ENTRY)pObCallback); return status; } 运行这段驱动程序,即可得到进程句柄: 当然了如上是进程句柄的枚举,如果是想要输出线程句柄,则只需要替换代码中的...PVOID ObTypeAddr; PVOID PreCall; PVOID PostCall; }OB_CALLBACK, *POB_CALLBACK; #pragma pack() // 移除...= (PLIST_ENTRY)pObCallback); return status; } 运行这段驱动程序,即可得到线程句柄:

61910
您找到你想要的搜索结果了吗?
是的
没有找到

驱动开发:内核枚举进程与线程ObCall

在笔者上一篇文章《驱动开发:内核枚举Registry注册表》中我们通过特征码定位实现了对注册表的枚举,本篇文章LyShark将教大家如何枚举系统中的ProcessObCall进程以及ThreadObCall...线程,之所以放在一起来讲解是因为这两中调在枚举是都需要使用通用结构体_OB_CALLBACK以及_OBJECT_TYPE所以放在一起来讲解最好不过。...= (PLIST_ENTRY)pObCallback);return status;}运行这段驱动程序,即可得到进程句柄:图片当然了如上是进程句柄的枚举,如果是想要输出线程句柄,则只需要替换代码中的...ObHandle;PVOID ObTypeAddr;PVOID PreCall;PVOID PostCall;}OB_CALLBACK, *POB_CALLBACK;#pragma pack()// 移除...= (PLIST_ENTRY)pObCallback);return status;}运行这段驱动程序,即可得到线程句柄:图片

23920

7.1 Windows驱动开发:内核监控进程与线程

,此类函数的原理是创建一个事件,当有进程或线程被创建或者注销时,系统会通过机制将该进程相关信息优先返回给我们自己的函数待处理结束后再转向系统层。...PsSetCreateProcessNotifyRoutineEx和PsSetCreateThreadNotifyRoutine是Windows操作系统提供的两个内核函数,它们允许开发者在进程或线程发生创建事件时拦截并处理这些事件...这两个函数提供的机制是操作系统提供的最基本、最常用的内核监控进程与线程的方式。...这个函数需要满足一定的约束条件,例如不能阻塞或挂起进程或线程的创建或访问,不能调用一些内核API函数等。...进程默认会设置CreateProcess通知,而线程则会设置CreateThread通知,我们来看ARK工具中的枚举效果。

35810

Linux内核

为了让系统能够支持更大的并发,除了必须安装event扩展之外,优化linux内核也是重中之重,以下优化每一项都非常非常重要,请务必按逐一完成。...net.core.somaxconn = 65535#对于还未获得对方确认的连接请求,可保存在队列中的最大数目net.ipv4.tcp_max_syn_backlog = 262144#在每个网络接口接收数据包的速率比内核处理这些包的速率快时...Linux从4.12内核开始移除了 tcp_tw_recycle 配置,如果报错"No such file or directory"请忽略net.ipv4.tcp_tw_recycle = 0#系统所有进程一共可以打开的文件数量...Soft open files 是Linux系统参数,影响系统单个进程能够打开最大的文件句柄数量,这个值会影响到长连接应用如聊天中单个进程能够维持的用户连接数, 运行ulimit -n能看到这个参数值,

2K40

驱动开发:内核监视LoadImage映像

在笔者上一篇文章《驱动开发:内核注册并监控对象》介绍了如何运用ObRegisterCallbacks注册进程与线程,并通过该回实现了拦截指定进行运行的效果,本章LyShark将带大家继续探索一个新的注册函数...监视模块加载与卸载需要费别使用两个函数,这两个函数的参数传递都是自己的地址。...PsSetLoadImageNotifyRoutine 设置PsRemoveLoadImageNotifyRoutine 移除此处MyLySharkLoadImageNotifyRoutine地址必须有三个参数传递组成..., HANDLE ModuleStyle, PIMAGE_INFO ImageInfo)那么如何实现监视映像加载呢,来看如下完整代码片段,首先PsSetLoadImageNotifyRoutine注册...,当有模块被加载则自动执行MyLySharkLoadImageNotifyRoutine函数,其内部首先判断ModuleStyle得出是什么类型的模块,然后再通过GetDriverEntryByImageBase

45120

驱动开发:内核枚举LoadImage映像

在笔者之前的文章《驱动开发:内核特征码搜索函数封装》中我们封装实现了特征码定位功能,本章将继续使用该功能,本次我们需要枚举内核LoadImage映像,在Win64环境下我们可以设置一个LoadImage...映像加载通告,当有新驱动或者DLL被加载时,函数就会被调用从而执行我们自己的例程,映像也存储在数组里,枚举时从数组中读取值之后,需要进行位运算解密得到地址。...我们来看一款闭源ARK工具是如何实现的:图片如上所述,如果我们需要拿到数组那么首先要得到该数组,数组的符号名是PspLoadImageNotifyRoutine我们可以在PsSetLoadImageNotifyRoutineEx...);DbgPrint("[LyShark] PspLoadImageNotifyRoutine = 0x%p \n", pPspLoadImageNotifyRoutineAddress);// 遍历...pNotifyRoutineAddress);}}Driver->DriverUnload = UnDriver;return STATUS_SUCCESS;}运行这段完整的程序代码,输出如下效果:图片目前系统中只有两个

67140

驱动开发:内核监控FileObject文件

本篇文章与上一篇文章《驱动开发:内核注册并监控对象》所使用的方式是一样的都是使用ObRegisterCallbacks注册事件,只不过上一篇博文中LyShark将回结构体OB_OPERATION_REGISTRATION...与进程线程有少许的不同,文件需要开启驱动的TypeInfo.SupportsObjectCallbacks开关,并定义一些微软结构,如下是我们所需要的公开结构体,可在微软官方或WinDBG中获取到最新的...LyShark// Email: me@lyshark.com#include "lyshark.h"PVOID obHandle;DRIVER_INITIALIZE DriverEntry;// 文件...);// bypass MmVerifyCallbackFunctionldr = (PLDR_DATA)Driver->DriverSection;ldr->Flags |= 0x20;// 初始化...图片至于如何阻止打开一个文件其实与《驱动开发:内核注册并监控对象》文章中使用的方法是一致的,首先判断OperationInformation->Operation是不是OB_OPERATION_HANDLE_CREATE

43940

Linux Linux内核参数

关于优的建议: 1、出错时,可以查看操作系统日志,可能会找到一些有用的信息 2、尽量不要“批量”修改内核参数,笔者就曾这么干过,结果“优”后,性能反而下降,事务出错数反而增加,所以,优的时候可以考虑逐个参数进行优...net.core.rmem_max=124928 接收套接字缓冲区大小的最大值(以字节为单位),参考值873200 net.ipv4.tcp_wmem=4096 16384 4194304 为自动优定义...如果probe 9次(每次75秒)不成功,内核才彻底放弃,认为该连接已失效,对服务器而言,显然上述值太大....net.ipv4.tcp_syn_retries=2 对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃。...这里决定内核在放弃连接之前所送出的 SYN+ACK 数目。

6.8K31

进程池、线程池、函数

如果要通过不同参数并发地执行func函数,必须从不同线程调用p.apply()函数或者使用p.apply_async() p.apply_async(func [, args [, kwargs]]):...1024) print(msg.decode('utf-8')) 发现:并发开启多个客户端,服务端同一时间只有4个不同的pid,干掉一个客户端,另外一个客户端才会进来,被4个进程之一处理 二 函数...主进程则调用一个函数去处理该结果,该函数即函数 我们可以把耗时间(阻塞)的任务放到进程池中,然后指定函数(主进程负责执行),这样主进程在执行函数时就省去了I/O的过程,直接拿到的是任务的结果...p.close() p.join() print([res.get() for res in res_l]) #拿到的是get_page的结果,其实完全没必要拿该结果,该结果已经传给函数处理了...//maoyan.com/board/7') # print(re.findall(pattern,res.text)) 如果在主进程中等待进程池中所有任务都执行完毕后,再统一处理结果,则无需函数

1.6K80

驱动开发:内核注册并监控对象

在笔者上一篇文章《驱动开发:内核枚举进程与线程ObCall》简单介绍了如何枚举系统中已经存在的进程与线程,本章LyShark将通过对象实现对进程线程的句柄监控,在内核中提供了ObRegisterCallbacks...,使用这个内核函数,可注册一个对象,不过目前该函数只能监控进程与线程句柄操作,通过监控进程或线程句柄,可实现保护指定进程线程不被终止的目的。...由于目前对象只能监控进程与线程,而这个监控是通过ObjectType这么一个成员控制的,如果成员是PsProcessType则代表监控进程,反之PsThreadType则是监控线程,无论监控进程还是线程都调用...则是传入的函数,也是最重要的,其次是ObjectType指定成进程。...图片如上所示只是演示基本的申请流程,函数通常需要包含两个值,其一RegistrationContext用于标注上下文,其二POB_PRE_OPERATION_INFORMATION则用于标注进程或者线程创建的信息结构体

50520

通过 Windows 用户模式实施的内核攻击

由于用户模式需要一个位置存储例如陷阱帧等线程状态信息,Windows XP 和 2003 会扩大内核栈以确保足够的空间可用。...然而,因为通过递归调用回栈空间会被很快耗尽,Vista 和 Windows 7 转而在每个用户模式中创建新的内核线程栈。...在跳转到其先前弃用的位置之前,内核栈将被删除。...(XP)或创建任意数目的栈,内核会为每个运行中的线程线程对象结构体(KTHREAD->CallbackDepth)中追踪的深度(内核栈空间被用户模式完全使用)。...在每个中,线程栈已使用的字节数(栈的基地址 - 栈指针)被加到 CallbackDepth 变量中。每当内核尝试迁移至新栈时,nt!

1.6K40

6.7 Windows驱动开发:内核枚举LoadImage映像

在笔者之前的文章《内核特征码搜索函数封装》中我们封装实现了特征码定位功能,本章将继续使用该功能,本次我们需要枚举内核LoadImage映像,在Win64环境下我们可以设置一个LoadImage映像加载通告...,当有新驱动或者DLL被加载时,函数就会被调用从而执行我们自己的例程,映像也存储在数组里,枚举时从数组中读取值之后,需要进行位运算解密得到地址。...开发者可以在LoadImage映像函数中执行自定义的逻辑,例如修改映像文件的内容,或者阻止映像文件的加载。...LoadImage映像可以通过Win32 API函数SetImageLoadCallback或者操作系统提供的驱动程序函数PsSetLoadImageNotifyRoutine来进行注册。...同时,LoadImage映像函数需要遵守一定的约束条件,例如必须是非分页代码,不能调用一些内核API函数等。

24510

7.3 Windows驱动开发:内核监视LoadImage映像

在笔者上一篇文章《内核注册并监控对象》介绍了如何运用ObRegisterCallbacks注册进程与线程,并通过该回实现了拦截指定进行运行的效果,本章LyShark将带大家继续探索一个新的注册函数...映像的函数。...LoadImage映像函数是一种内核函数,它可以用于监视和拦截系统中的模块加载事件,例如进程启动时加载的DLL、驱动程序等。...需要注意的是,LoadImage映像函数的注册和取消注册必须在内核模式下进行,并且需要开发者有一定的内核开发经验。...同时,LoadImage映像函数也需要遵守一些约束条件,例如不能阻塞或挂起进程或线程的创建或访问,不能调用一些内核API函数等。

25610

驱动开发:内核枚举Registry注册表

在笔者上一篇文章《驱动开发:内核枚举LoadImage映像》中LyShark教大家实现了枚举系统中的LoadImage通知消息,本章将实现对Registry注册表通知消息的枚举,与LoadImage...我们来看一款闭源ARK工具是如何实现的: 注册表系统的枚举需要通过特征码搜索来实现,首先我们可以定位到uf CmUnRegisterCallback内核函数上,在该内核函数下方存在一个CallbackListHead...LoadImage映像》文章中已经介绍了定位方式此处跳过介绍,具体实现代码如下。...,输出效果如下所示: 得到了注册表调入口地址,接着直接循环遍历输出这个链表即可得到所有的注册表。...if (MmIsAddressValid(pNotifyEntry->Function)) { DbgPrint("[LyShark.com] 函数地址: 0x%p | 函数Cookie

50720

驱动开发:内核监控Register注册表

在笔者前一篇文章《驱动开发:内核枚举Registry注册表》中实现了对注册表的枚举,本章将实现对注册表的监控,不同于32位系统在64位系统中,微软为我们提供了两个针对注册表的专用内核监控函数,通过这两个函数可以在不劫持内核...API的前提下实现对注册表增加,删除,创建等事件的有效监控,注册表监视通常会通过CmRegisterCallback创建监控事件并传入自己的函数,与该创建对应的是CmUnRegisterCallback...CmRegisterCallback 设置注册表CmUnRegisterCallback 注销注册表默认情况下CmRegisterCallback需传入三个参数,参数一函数地址,参数二空余,...参数三句柄,微软定义如下。...// 参数2:无作用// 参数3:句柄NTSTATUS CmRegisterCallback( [in] PEX_CALLBACK_FUNCTION Function, [in

54930
领券