• 2024-10-24ReactOS系统中平衡二叉树。给定地址超导其所属区块MmFindRegion()
    系列文章目录PMM_REGIONNTAPIMmFindRegion(PVOIDBaseAddress,PLIST_ENTRYRegionListHead,PVOIDAddress,PVOID*RegionBaseAddress);宏函数//给定地址找到其中所属区块#defineCONTAINING_RECORD(address,type,field)((typeFAR*\(PCHAR)(address)-(PCH
  • 2024-10-22ReactOS系统中EPROCESS结构体的声明
    ReactOS系统中EPROCESS结构体的声明ReactOS系统中EPROCESS结构体的声明文章目录ReactOS系统中EPROCESS结构体的声明EPROCESSEPROCESS////ExecutiveProcess(EPROCESS)//typedefstruct_EPROCESS{KPROCESSPcb;EX_PUSH_LOCKProcessLock;LA
  • 2024-08-20使用微软Detours库进行模块枚举
    Detours是微软开发的一个强大的WindowsAPI钩子库,用于监视和拦截函数调用。它广泛应用于微软产品团队和众多独立软件开发中,旨在无需修改原始代码的情况下实现函数拦截和修改。Detours在调试、监控、日志记录和性能分析等方面表现出色,已成为开发者的重要工具。本章将指导读者运
  • 2024-05-18内核APC执行过程
    3.内核APC执行过程说明未文档化但是导出,所以需要提前声明具体看下面的代码中的struct.hKeInitializeApc参数//初始化apc函数VOIDKeInitializeApc( __outPRKAPCApc,//使用`PKAPCpKapc`初始化 __inPRKTHREADThread,//内核中填当前线程即可 __inKAPC_ENVIRONMENTEnv
  • 2024-05-18APC挂靠
    5.APC挂靠用户态apc和上一课的内核apc几乎一致,唯一的变动就是这个//插入当前线程 KeInitializeApc(pKapc,eThread,OriginalApcEnvironment,KernelAPCRoutineFunc,NULL,0x4011d0,UserMode,NULL);改成了UserMode函数地址改成了进程的地址0x4011d0完整代码Driver-main
  • 2024-01-2300000030.ReverseAnalysis.ring0层注册表监控
    00000030.ReverseAnalysis.ring0层注册表监控links深入理解注册表监控从0环监测注册表机制...好像还是有点门槛的如何监控注册表是windows的重要数据库,存放了很多重要的信息以及一些应用的设置,对注册表进行监控并防止篡改是十分有必要的。在64位系统下微软提供了CmRegiste
  • 2023-12-016.8 Windows驱动开发:内核枚举Registry注册表回调
    在笔者上一篇文章《内核枚举LoadImage映像回调》中LyShark教大家实现了枚举系统回调中的LoadImage通知消息,本章将实现对Registry注册表通知消息的枚举,与LoadImage消息不同Registry消息不需要解密只要找到CallbackListHead消息回调链表头并解析为_CM_NOTIFY_ENTRY结构即可实现枚举
  • 2023-11-255.7 Windows驱动开发:取进程模块函数地址
    在笔者上一篇文章《内核取应用层模块基地址》中简单为大家介绍了如何通过遍历PLIST_ENTRY32链表的方式获取到32位应用程序中特定模块的基地址,由于是入门系列所以并没有封装实现太过于通用的获取函数,本章将继续延申这个话题,并依次实现通用版GetUserModuleBaseAddress()取远程进程中
  • 2023-11-239.9 Windows驱动开发:内核远程线程实现DLL注入
    在笔者上一篇文章《内核RIP劫持实现DLL注入》介绍了通过劫持RIP指针控制程序执行流实现插入DLL的目的,本章将继续探索全新的注入方式,通过NtCreateThreadEx这个内核函数实现注入DLL的目的,需要注意的是该函数在微软系统中未被导出使用时需要首先得到该函数的入口地址,NtCreateThreadEx
  • 2023-11-184.5 Windows驱动开发:内核中实现进程数据转储
    多数ARK反内核工具中都存在驱动级别的内存转存功能,该功能可以将应用层中运行进程的内存镜像转存到特定目录下,内存转存功能在应对加壳程序的分析尤为重要,当进程在内存中解码后,我们可以很容易的将内存镜像导出,从而更好的对样本进行分析,当然某些加密壳可能无效但绝大多数情况下是可以
  • 2023-11-07Windows ObjectType Hook 之 SecurityProcedure
    1、背景  ObjectTypeHook是基于ObjectType的一种深入的Hook,比起常用的SSDTHook更为深入。  有关ObjectType的分析见文章《Windows驱动开发学习记录-ObjectTypeHook之ObjectType结构相关分析》。  这里进行的Hook为其中之一的SecurityProcedure。文章实
  • 2023-11-05Windows ObjectType Hook 之 OkayToCloseProcedure
    1、背景  ObjectTypeHook是基于ObjectType的一种深入的Hook,比起常用的SSDTHook更为深入。  有关ObjectType的分析见文章《Windows驱动开发学习记录-ObjectTypeHook之ObjectType结构相关分析》。  这里进行的Hook为其中之一的OkayToCloseProcedure。文
  • 2023-11-01Windows ObjectType Hook 之 OpenProcedure
    1、背景  ObjectTypeHook是基于ObjectType的一种深入的Hook,比起常用的SSDTHook更为深入。  有关ObjectType的分析见文章《Windows驱动开发学习记录-ObjectTypeHook之ObjectType结构相关分析》。  这里进行的Hook为其中之一的OpenProcedure。文章分两部
  • 2023-10-13多线程逆向
    一.资料检索以及归纳XDBG调试时默认是只运行下断调试的线程其它线程处于暂停挂起状态属于单线程调试。打开线程窗口可以查看线程挂起计数(+号-号快捷键可以挂起恢复线程)双击线程可进入选择线程,如果要调试指定线程的话我的理解是应该在线程代码中下断(线程的各种系统CALL),线程会自
  • 2023-09-278.10 TLS线程局部存储反调试
    TLS(ThreadLocalStorage)用来在进程内部每个线程中存储私有的数据。每个线程都会拥有独立的TLS存储空间,可以在TLS存储空间中保存线程的上下文信息、变量、函数指针等。TLS其目的是为了解决多线程变量同步问题,声明为TLS变量后,当线程去访问全局变量时,会将这个变量拷贝到自己线程中的
  • 2023-09-19挂接API
    //hook.cpp:Definestheentrypointfortheconsoleapplication.//#include"stdafx.h"#include<windows.h>PVOIDHookAPI(LPBYTEpbModule,PCSTRpszName,PVOIDpvOrg,PVOIDpvNew){ PIMAGE_THUNK_DATAr; PIMAGE_NT_HEADERSp; PIMAGE_IMPOR
  • 2023-09-14KdMapper扩展实现之Huawei(Phymemx64.sys)
    1.背景  KdMapper是一个利用intel的驱动漏洞可以无痕的加载未经签名的驱动,本文是利用其它漏洞(参考《【转载】利用签名驱动漏洞加载未签名驱动》)做相应的修改以实现类似功能。需要大家对KdMapper的代码有一定了解。 2.驱动信息 驱动名称Phymemx64.sys 时间戳5835
  • 2023-06-25驱动开发:内核远程线程实现DLL注入
    在笔者上一篇文章《内核RIP劫持实现DLL注入》介绍了通过劫持RIP指针控制程序执行流实现插入DLL的目的,本章将继续探索全新的注入方式,通过NtCreateThreadEx这个内核函数实现注入DLL的目的,需要注意的是该函数在微软系统中未被导出使用时需要首先得到该函数的入口地址,NtCreateThreadEx
  • 2023-06-16驱动开发:内核RIP劫持实现DLL注入
    本章将探索内核级DLL模块注入实现原理,DLL模块注入在应用层中通常会使用CreateRemoteThread直接开启远程线程执行即可,驱动级别的注入有多种实现原理,而其中最简单的一种实现方式则是通过劫持EIP的方式实现,其实现原理可总结为,挂起目标进程,停止目标进程EIP的变换,在目标进程开启空间,并
  • 2023-06-05驱动开发:内核实现SSDT挂钩与摘钩
    在前面的文章《驱动开发:内核解析PE结构导出表》中我们封装了两个函数KernelMapFile()函数可用来读取内核文件,GetAddressFromFunction()函数可用来在导出表中寻找指定函数的导出地址,本章将以此为基础实现对特定SSDT函数的Hook挂钩操作,与《驱动开发:内核层InlineHook挂钩函数》所使用
  • 2023-05-29驱动开发:内核解析内存四级页表
    当今操作系统普遍采用64位架构,CPU最大寻址能力虽然达到了64位,但其实仅仅只是用到了48位进行寻址,其内存管理采用了9-9-9-9-12的分页模式,9-9-9-9-12分页表示物理地址拥有四级页表,微软将这四级依次命名为PXE、PPE、PDE、PTE这四项。关于内存管理和分页模式,不同的操作系统和体系结构
  • 2023-04-18驱动保护 -- 读取被保护的数据(第二种方法)
    一、获取被保护数据,驱动块源码(第二种方法)BOOLEANKReadProcessMemory2(INPEPROCESS目标进程,INPVOID目标地址,INUINT32目标长度,INPVOID返回数据){KAPC_STATEapc_state;RtlZeroMemory(&apc_state,sizeof(KAPC_STATE));//创建MDL来读取内存PMDL映射内
  • 2023-04-18驱动保护 -- 读取被保护的数据(第二种方法)
    一、获取被保护数据,驱动块源码(第二种方法)BOOLEANKReadProcessMemory2(INPEPROCESS目标进程,INPVOID目标地址,INUINT32目标长度,INPVOID返回数据){KAPC_STATEapc_state;RtlZeroMemory(&apc_state,sizeof(KAPC_STATE));//创建MDL来读取内存PMDL映射内
  • 2023-04-18驱动保护 -- 读取被保护的数据(第二种方法)
    一、获取被保护数据,驱动块源码(第二种方法)BOOLEANKReadProcessMemory2(INPEPROCESS目标进程,INPVOID目标地址,INUINT32目标长度,INPVOID返回数据){KAPC_STATEapc_state;RtlZeroMemory(&apc_state,sizeof(KAPC_STATE));//创建MDL来读取内存PMDL映射内
  • 2023-04-18驱动保护 -- 读取被保护的数据(第二种方法)
    一、获取被保护数据,驱动块源码(第二种方法)BOOLEANKReadProcessMemory2(INPEPROCESS目标进程,INPVOID目标地址,INUINT32目标长度,INPVOID返回数据){KAPC_STATEapc_state;RtlZeroMemory(&apc_state,sizeof(KAPC_STATE));//创建MDL来读取内存PMDL映射内