遍历注册表回调函数(仿PCHunter CmpBack)

typedef struct _CAPTURE_REGISTRY_MANAGER

{

PDEVICE_OBJECT deviceObject;

BOOLEAN bReady;

LARGE_INTEGER  registryCallbackCookie;

LIST_ENTRY lQueuedRegistryEvents;

KTIMER connectionCheckerTimer;

KDPC connectionCheckerFunction;

KSPIN_LOCK lQueuedRegistryEventsSpinLock;

ULONG lastContactTime;

} CAPTURE_REGISTRY_MANAGER, *PCAPTURE_REGISTRY_MANAGER;

系统注册表回调函数注册流程

调用CmRegisterCallback

第一个参数就是 回调函数地址

第二个参数是 PCAPTURE_REGISTRY_MANAGER 指针

CmRegisterCallback内部会操作两个全局变量

CmpCallBackCount 注册表回调函数数组总数

CallbackListHead 注册表回调函数数组头部(每个元素是 LIST_ENTRY 对象 ->Blink 指向ExAllocatePoolWithTag申请的一个地址 为了方便这里简称Ha)

Ha+0x18 = 上面说的 CmRegisterCallback 函数的第二个参数

Ha+0x1C = 上面说的 CmRegisterCallback 函数的第一个参数

这样就可以依靠 上面的两个全局变量 遍历出来 注册表回调函数

代码(只放出重要部分)

vntoskrnlBaseAddr  内核模块基地址(ntoskn...模块)

//回调函数数组

ULONG vCmpCallBackCount = *vPCmpCallBackCount;

PLIST_ENTRY vPCallbackListHead = (PLIST_ENTRY)(vntoskrnlBaseAddr + 0x167F70);

while (vCmpCallBackCount)

{

KdPrint(("vPCallbackListHead->Flink = 0x%08X\r\n", vPCallbackListHead->Flink));

ULONG vExAllocateAddr = (ULONG)vPCallbackListHead->Flink;

KdPrint(("CaptrueRegisterManager = 0x%08X\r\n", *(PULONG)(vExAllocateAddr + 0x18)));

KdPrint(("RegistryCallbackFunction = 0x%08X\r\n", *(PULONG)(vExAllocateAddr + 0x1C)));

KdPrint(("\r\n--------------------------------------------------------------\r\n\r\n"));

vPCallbackListHead++;

vCmpCallBackCount--;

}

jpg 改 rar

遍历注册表回调函数(仿PCHunter CmpBack)的更多相关文章

  1. 驱动开发:内核枚举Registry注册表回调

    在笔者上一篇文章<驱动开发:内核枚举LoadImage映像回调>中LyShark教大家实现了枚举系统回调中的LoadImage通知消息,本章将实现对Registry注册表通知消息的枚举,与 ...

  2. 驱动开发:内核监控Register注册表回调

    在笔者前一篇文章<驱动开发:内核枚举Registry注册表回调>中实现了对注册表的枚举,本章将实现对注册表的监控,不同于32位系统在64位系统中,微软为我们提供了两个针对注册表的专用内核监 ...

  3. Win64 驱动内核编程-32.枚举与删除注册表回调

    枚举与删除注册表回调 注册表回调是一个监控注册表读写的回调,它的效果非常明显,一个回调能实现在SSDT 上 HOOK 十几个 API 的效果.部分游戏保护还会在注册表回调上做功夫,监控 service ...

  4. c#遍历注册表

    --来自 https://blog.csdn.net/wenchangren/article/details/751863using System; using Microsoft.Win32; us ...

  5. Win64 驱动内核编程-15.回调监控注册表

    回调监控注册表 在 WIN32 平台上,监控注册表的手段通常是 SSDT HOOK.不过用 SSDT HOOK 的方式监控注册表实在是太麻烦了,要 HOOK 一大堆函数,还要处理一些 NT6 系统有而 ...

  6. OpenGL的GLUT注册回调函数[转]

    OpenGL的注册回调函数 void glutDisplayFunc(void (*func)(void) ); 为当前窗口设置显示回调函数 void glutOverlayDisplayFunc(v ...

  7. 计算机基础,Python - 回调函数,使用装饰器注册回调函数

    1. 参考: https://en.wikipedia.org/wiki/Callback_(computer_programming) https://developer.mozilla.org/e ...

  8. jQuery ajax() 参数,回调函数,数据类型,发送数据到服务器,高级选项

    $.ajax({ options:/*类型:Object;  可选.AJAX 请求设置.所有选项都是可选的.*/ async:/*类型:Boolean; 默认值: true.默认设置下,所有请求均为异 ...

  9. 利用模块加载回调函数修改PE导入表实现注入

    最近整理PE文件相关代码的时候,想到如果能在PE刚刚读进内存的时候再去修改内存PE镜像,那不是比直接对PE文件进行操作隐秘多了么? PE文件在运行时会根据导入表来进行dll库的"动态链接&q ...

随机推荐

  1. 禁用visual studio实时调试器

    最近每次开机时都会出来一个visual Studio实时调试器,报“发生了未处理的异常(‘System ComponentModel.Win32Exception’,发生位置是 BSSocketSms ...

  2. ATS(App Transport Security)对HTTP协议屏蔽引起的问题

    一.问题描述 在学习网络处理的过程,发现代码都没错,运行时会收到如下错误提示: App Transport Security has blocked a cleartext HTTP (http:// ...

  3. jboss服务器修改端口说明

    如果一台机器安装多个jboss服务器,就需要修改服务器的端口号,否则各个服务器之间会有冲突.目前确认需要修改的配置如下一.vi $JBOSS_HOME/server/default/conf/jbos ...

  4. 【leetcode】Remove Duplicates from Sorted List II (middle)

    Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...

  5. ios tableview 适配横竖屏

    tableview.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;

  6. Python--set常用操作函数

    python提供了常用的数据结构,其中之一就是set,python中的set是不支持索引的.值不能重复.无需插入的容器. 简单记录下set常用的操作函数: 1.新建一个set: set("H ...

  7. pmap

    .[root@localhost security]# pmap -d : -bash Address Kbytes Mode Offset Device Mapping r-x-- : bash b ...

  8. 靶形数独(codevs 1174)

    1174 靶形数独 2009年NOIP全国联赛提高组  时间限制: 4 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Descri ...

  9. sql boolean类型

    关于 MySQL 的 boolean 和 tinyint(1) boolean类型MYSQL保存BOOLEAN值时用1代表TRUE,0代表FALSE,boolean在MySQL里的类型为tinyint ...

  10. 三、jQuery--jQuery基础--jQuery基础课程--第10章 jQuery UI型插件

    1.拖曳插件——draggable 拖曳插件draggable的功能是拖动被绑定的元素,当这个jQuery UI插件与元素绑定后,可以通过调用draggable()方法,实现各种拖曳元素的效果,调用格 ...