当前位置: 首页 > news >正文

海南省住房和城乡建设局网站国外免费建站网站不用下载

海南省住房和城乡建设局网站,国外免费建站网站不用下载,天河网站建设公司排名,昆明网站建站推广在笔者上一篇文章《内核枚举Registry注册表回调》中我们通过特征码定位实现了对注册表回调的枚举#xff0c;本篇文章LyShark将教大家如何枚举系统中的ProcessObCall进程回调以及ThreadObCall线程回调#xff0c;之所以放在一起来讲解是因为这两中回调在枚举是都需要使用通用…在笔者上一篇文章《内核枚举Registry注册表回调》中我们通过特征码定位实现了对注册表回调的枚举本篇文章LyShark将教大家如何枚举系统中的ProcessObCall进程回调以及ThreadObCall线程回调之所以放在一起来讲解是因为这两中回调在枚举是都需要使用通用结构体_OB_CALLBACK以及_OBJECT_TYPE所以放在一起来讲解最好不过。 进程与线程ObCall回调是Windows操作系统提供的一种机制它允许开发者在进程或线程发生创建、销毁、访问、修改等事件时拦截并处理这些事件。进程与线程ObCall回调是通过操作系统提供的回调机制来实现的。 当操作系统创建、销毁、访问或修改进程或线程时它会触发进程与线程ObCall回调事件然后在回调事件中调用注册的进程与线程ObCall回调函数。开发者可以在进程与线程ObCall回调函数中执行自定义的逻辑例如记录日志过滤敏感数据或者阻止某些操作。 进程与线程ObCall回调可以通过操作系统提供的回调函数PsSetCreateProcessNotifyRoutine、PsSetCreateThreadNotifyRoutine、PsSetLoadImageNotifyRoutine等来进行注册。同时进程与线程ObCall回调函数需要遵守一定的约束条件例如不能阻塞或挂起进程或线程的创建或访问不能调用一些内核API函数等。 进程与线程ObCall回调在安全软件、系统监控和调试工具等领域有着广泛的应用。 我们来看一款闭源ARK工具是如何实现的 首先我们需要定义好结构体结构体是微软公开的如果有其它需要请自行去微软官方去查。 typedef struct _OBJECT_TYPE_INITIALIZER {USHORT Length; // Uint2BUCHAR ObjectTypeFlags; // UCharULONG ObjectTypeCode; // Uint4BULONG InvalidAttributes; // Uint4BGENERIC_MAPPING GenericMapping; // _GENERIC_MAPPINGULONG ValidAccessMask; // Uint4BULONG RetainAccess; // Uint4BPOOL_TYPE PoolType; // _POOL_TYPEULONG DefaultPagedPoolCharge; // Uint4BULONG DefaultNonPagedPoolCharge; // Uint4BPVOID DumpProcedure; // Ptr64 voidPVOID OpenProcedure; // Ptr64 longPVOID CloseProcedure; // Ptr64 voidPVOID DeleteProcedure; // Ptr64 voidPVOID ParseProcedure; // Ptr64 longPVOID SecurityProcedure; // Ptr64 longPVOID QueryNameProcedure; // Ptr64 longPVOID OkayToCloseProcedure; // Ptr64 unsigned charULONG WaitObjectFlagMask; // Uint4BUSHORT WaitObjectFlagOffset; // Uint2BUSHORT WaitObjectPointerOffset; // Uint2B }OBJECT_TYPE_INITIALIZER, *POBJECT_TYPE_INITIALIZER;typedef struct _OBJECT_TYPE {LIST_ENTRY TypeList; // _LIST_ENTRYUNICODE_STRING Name; // _UNICODE_STRINGPVOID DefaultObject; // Ptr64 VoidUCHAR Index; // UCharULONG TotalNumberOfObjects; // Uint4BULONG TotalNumberOfHandles; // Uint4BULONG HighWaterNumberOfObjects; // Uint4BULONG HighWaterNumberOfHandles; // Uint4BOBJECT_TYPE_INITIALIZER TypeInfo; // _OBJECT_TYPE_INITIALIZEREX_PUSH_LOCK TypeLock; // _EX_PUSH_LOCKULONG Key; // Uint4BLIST_ENTRY CallbackList; // _LIST_ENTRY }OBJECT_TYPE, *POBJECT_TYPE;#pragma pack(1) typedef struct _OB_CALLBACK {LIST_ENTRY ListEntry;ULONGLONG Unknown;HANDLE ObHandle;PVOID ObTypeAddr;PVOID PreCall;PVOID PostCall; }OB_CALLBACK, *POB_CALLBACK; #pragma pack()代码部分的实现很容易由于进程与线程句柄的枚举很容易直接通过(POBJECT_TYPE)(*PsProcessType))-CallbackList就可以拿到链表头结构得到后将其解析为POB_CALLBACK并循环输出即可。 #include ntifs.h #include wdm.h #include ntddk.htypedef struct _OBJECT_TYPE_INITIALIZER {USHORT Length; // Uint2BUCHAR ObjectTypeFlags; // UCharULONG ObjectTypeCode; // Uint4BULONG InvalidAttributes; // Uint4BGENERIC_MAPPING GenericMapping; // _GENERIC_MAPPINGULONG ValidAccessMask; // Uint4BULONG RetainAccess; // Uint4BPOOL_TYPE PoolType; // _POOL_TYPEULONG DefaultPagedPoolCharge; // Uint4BULONG DefaultNonPagedPoolCharge; // Uint4BPVOID DumpProcedure; // Ptr64 voidPVOID OpenProcedure; // Ptr64 longPVOID CloseProcedure; // Ptr64 voidPVOID DeleteProcedure; // Ptr64 voidPVOID ParseProcedure; // Ptr64 longPVOID SecurityProcedure; // Ptr64 longPVOID QueryNameProcedure; // Ptr64 longPVOID OkayToCloseProcedure; // Ptr64 unsigned charULONG WaitObjectFlagMask; // Uint4BUSHORT WaitObjectFlagOffset; // Uint2BUSHORT WaitObjectPointerOffset; // Uint2B }OBJECT_TYPE_INITIALIZER, *POBJECT_TYPE_INITIALIZER;typedef struct _OBJECT_TYPE {LIST_ENTRY TypeList; // _LIST_ENTRYUNICODE_STRING Name; // _UNICODE_STRINGPVOID DefaultObject; // Ptr64 VoidUCHAR Index; // UCharULONG TotalNumberOfObjects; // Uint4BULONG TotalNumberOfHandles; // Uint4BULONG HighWaterNumberOfObjects; // Uint4BULONG HighWaterNumberOfHandles; // Uint4BOBJECT_TYPE_INITIALIZER TypeInfo; // _OBJECT_TYPE_INITIALIZEREX_PUSH_LOCK TypeLock; // _EX_PUSH_LOCKULONG Key; // Uint4BLIST_ENTRY CallbackList; // _LIST_ENTRY }OBJECT_TYPE, *POBJECT_TYPE;#pragma pack(1) typedef struct _OB_CALLBACK {LIST_ENTRY ListEntry;ULONGLONG Unknown;HANDLE ObHandle;PVOID ObTypeAddr;PVOID PreCall;PVOID PostCall; }OB_CALLBACK, *POB_CALLBACK; #pragma pack()VOID DriverUnload(PDRIVER_OBJECT pDriverObject) { }NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegPath) {NTSTATUS status STATUS_SUCCESS;DbgPrint(hello lyshark \n);POB_CALLBACK pObCallback NULL;// 直接获取 CallbackList 链表LIST_ENTRY CallbackList ((POBJECT_TYPE)(*PsProcessType))-CallbackList;// 开始遍历pObCallback (POB_CALLBACK)CallbackList.Flink;do{if (FALSE MmIsAddressValid(pObCallback)){break;}if (NULL ! pObCallback-ObHandle){// 显示DbgPrint([lyshark] ObHandle %p | PreCall %p | PostCall %p \n, pObCallback-ObHandle, pObCallback-PreCall, pObCallback-PostCall);}// 获取下一链表信息pObCallback (POB_CALLBACK)pObCallback-ListEntry.Flink;} while (CallbackList.Flink ! (PLIST_ENTRY)pObCallback);return status; }运行这段驱动程序即可得到进程句柄回调: 当然了如上是进程句柄的枚举如果是想要输出线程句柄则只需要替换代码中的PsProcessType为((POBJECT_TYPE)(*PsThreadType))-CallbackList即可修改后的代码如下。 #include ntifs.h #include wdm.h #include ntddk.htypedef struct _OBJECT_TYPE_INITIALIZER {USHORT Length; // Uint2BUCHAR ObjectTypeFlags; // UCharULONG ObjectTypeCode; // Uint4BULONG InvalidAttributes; // Uint4BGENERIC_MAPPING GenericMapping; // _GENERIC_MAPPINGULONG ValidAccessMask; // Uint4BULONG RetainAccess; // Uint4BPOOL_TYPE PoolType; // _POOL_TYPEULONG DefaultPagedPoolCharge; // Uint4BULONG DefaultNonPagedPoolCharge; // Uint4BPVOID DumpProcedure; // Ptr64 voidPVOID OpenProcedure; // Ptr64 longPVOID CloseProcedure; // Ptr64 voidPVOID DeleteProcedure; // Ptr64 voidPVOID ParseProcedure; // Ptr64 longPVOID SecurityProcedure; // Ptr64 longPVOID QueryNameProcedure; // Ptr64 longPVOID OkayToCloseProcedure; // Ptr64 unsigned charULONG WaitObjectFlagMask; // Uint4BUSHORT WaitObjectFlagOffset; // Uint2BUSHORT WaitObjectPointerOffset; // Uint2B }OBJECT_TYPE_INITIALIZER, *POBJECT_TYPE_INITIALIZER;typedef struct _OBJECT_TYPE {LIST_ENTRY TypeList; // _LIST_ENTRYUNICODE_STRING Name; // _UNICODE_STRINGPVOID DefaultObject; // Ptr64 VoidUCHAR Index; // UCharULONG TotalNumberOfObjects; // Uint4BULONG TotalNumberOfHandles; // Uint4BULONG HighWaterNumberOfObjects; // Uint4BULONG HighWaterNumberOfHandles; // Uint4BOBJECT_TYPE_INITIALIZER TypeInfo; // _OBJECT_TYPE_INITIALIZEREX_PUSH_LOCK TypeLock; // _EX_PUSH_LOCKULONG Key; // Uint4BLIST_ENTRY CallbackList; // _LIST_ENTRY }OBJECT_TYPE, *POBJECT_TYPE;#pragma pack(1) typedef struct _OB_CALLBACK {LIST_ENTRY ListEntry;ULONGLONG Unknown;HANDLE ObHandle;PVOID ObTypeAddr;PVOID PreCall;PVOID PostCall; }OB_CALLBACK, *POB_CALLBACK; #pragma pack()VOID DriverUnload(PDRIVER_OBJECT pDriverObject) { }NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegPath) {NTSTATUS status STATUS_SUCCESS;DbgPrint(hello lyshark \n);POB_CALLBACK pObCallback NULL;// 直接获取 CallbackList 链表LIST_ENTRY CallbackList ((POBJECT_TYPE)(*PsThreadType))-CallbackList;// 开始遍历pObCallback (POB_CALLBACK)CallbackList.Flink;do{if (FALSE MmIsAddressValid(pObCallback)){break;}if (NULL ! pObCallback-ObHandle){// 显示DbgPrint([LyShark] ObHandle %p | PreCall %p | PostCall %p \n, pObCallback-ObHandle, pObCallback-PreCall, pObCallback-PostCall);}// 获取下一链表信息pObCallback (POB_CALLBACK)pObCallback-ListEntry.Flink;} while (CallbackList.Flink ! (PLIST_ENTRY)pObCallback);return status; }运行这段驱动程序即可得到线程句柄回调:
http://www.huolong8.cn/news/357863/

相关文章:

  • 官方智慧团建网站网站开发团队 人员
  • 网站建设需要的人员忻州市住房城乡建设局网站
  • 开虚拟机很伤电脑吗关键词自动优化工具
  • 网站设计主流尺寸域名注册过程
  • 怎么做谷歌收录的网站吗网站策划与建设阶段的推广方法
  • wap网站建设策划方案西乡做网站的公司
  • dreamware做网站首页种子搜索器
  • 网站建设广告费 科目百度地图手机网页版
  • 工信部网站信息查询没有网站没有推广如何做外贸
  • 响应式网站尺寸深圳市深企在线技术开发有限公司
  • 项目商业网站建设方案门户网站建设项目书
  • app定制开发网站制作郑州官方网
  • 网站怎么做才群晖 wordpress规则
  • 邢台网站建设好蜘蛛网站404怎么做
  • 河南免费网站建设公司app优化方案
  • 国内好看的网站设计知名跟单网站做信号提供方
  • 做微商好还是开网站好球队排名世界
  • 商业门户网站制作厦门seo推广公司
  • 社交网站建设技术如何做简单网站
  • 深圳网站建设的服务怎么样万维网网站备案流程
  • 网站建设暨检务公开自查报告wordpress 纯代码seo
  • 官渡网站设计制作软件外包公司绩效考核内容
  • 三网合一网站网站建设如何搭建框架
  • 对百度网站进行分析shopify建站流程
  • 免费建网站的程序wordpress文章变缩略图
  • 最强的网站建设电话做数码后期上数码网站
  • 苏宁易购网站建设的不足之处个人网站怎么设计
  • 哈尔滨网站建设培训价格低的形容词
  • 网站模板安装教程wordpress 分类 文章
  • 宁波网站建站wordpress怎么添加连接