logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

C++

可提供的服务

暂无可提供的服务

驱动开发:内核中进程与句柄互转

在内核开发中,经常需要进行进程和句柄之间的互相转换。进程通常由一个唯一的进程标识符(PID)来标识,而句柄是指对内核对象的引用。在Windows内核中,`EProcess`结构表示一个进程,而HANDLE是一个句柄。为了实现进程与句柄之间的转换,我们需要使用一些内核函数。对于进程PID和句柄的互相转换,可以使用函数如`OpenProcess`和`GetProcessId`。OpenProcess函

文章图片
#驱动开发#微软技术
驱动开发:内核ShellCode线程注入

还记得`《驱动开发:内核LoadLibrary实现DLL注入》`中所使用的注入技术吗,我们通过`RtlCreateUserThread`函数调用实现了注入DLL到应用层并执行,本章将继续探索一个简单的问题,如何注入`ShellCode`代码实现反弹Shell,这里需要注意一般情况下`RtlCreateUserThread`需要传入两个最重要的参数,一个是`StartAddress`开始执行的内存块

文章图片
#驱动开发#windows#c++
驱动开发:内核LoadLibrary实现DLL注入

远程线程注入是最常用的一种注入技术,在应用层注入是通过`CreateRemoteThread`这个函数实现的,该函数通过创建线程并调用 `LoadLibrary` 动态载入指定的DLL来实现注入,而在内核层同样存在一个类似的内核函数`RtlCreateUserThread`,但需要注意的是此函数未被公开,`RtlCreateUserThread`其实是对`NtCreateThreadEx`的包装,

文章图片
#驱动开发#windows#c++
驱动开发:内核无痕隐藏自身分析

在笔者前面有一篇文章通过摘除驱动的链表实现了断链隐藏自身的目的,但此方法恢复时会触发PG会蓝屏,偶然间在网上找到了一个作者介绍的一种方法,觉得有必要详细分析一下他是如何实现的进程隐藏的,总体来说作者的思路是最终寻找到的入口地址,该函数的作用是将驱动信息加入链表和移除链表,运用这个函数即可动态处理驱动的添加和移除问题。那么如何找到函数入口地址就是下一步的目标,寻找入口可以总结为;搜索可定位到地址。搜

文章图片
#驱动开发#c++#c语言 +1
驱动开发:内核监视LoadImage映像回调

映像监视,当有模块被系统加载时则可以第一时间获取到加载模块信息,需要注意的是该回调函数内无法进行拦截,如需要拦截则需写入返回指令这部分内容将在下一章进行讲解,本章将主要实现对模块的监视功能。监视模块加载与卸载需要费别使用两个函数,这两个函数的参数传递都是自己的回调地址。那么如何实现监视映像加载呢,来看如下完整代码片段,首先。运行这个驱动程序,则会输出被加载的驱动详细参数。将带大家继续探索一个新的回

文章图片
#驱动开发#c++#c语言 +2
驱动开发:内核枚举PspCidTable句柄表

在上一篇文章中我们通过枚举特征码的方式找到了DPC定时器基址并输出了内核中存在的定时器列表,本章将学习如何通过特征码定位的方式寻找Windows 10系统下面的内核句柄表地址。首先引入一段基础概念;windowsPspCidTable 就是这样的一种表(内核句柄表),表的内部存放的是进程EPROCESS和线程ETHREAD的内核对象,并通过进程PID和线程TID进行索引,ID号以4递增,内核句柄表

文章图片
#驱动开发#c++#微软技术
驱动开发:实现驱动加载卸载工具

驱动程序加载工具有许多,最常用的当属KmdManager工具,如果驱动程序需要对外发布那我们必须自己编写实现一个驱动加载工具,当需要使用驱动时可以拉起自己的驱动,如下将实现一个简单的驱动加载工具,该工具可以实现基本的,安装,加载,关闭,卸载等操作日常使用完全没问题。

文章图片
#驱动开发#c语言#微软技术
驱动开发:Win10枚举完整SSDT地址表

在WinDBG中可看到完整的输出内容,当然有些函数没有被导出,起源地址是拿不到的。函数顺便把当前地址拿到,并通过循环方式得到完整的SSDT列表。根据上一章节的内容扩展,枚举完整SSDT表我们可以这样来实现。我们运行这段程序,即可得到整个系统中所有的SSDT表地址信息;得到当前地址很容易实现,只需要将函数名字符串通过。表基地址了,找到后我们可根据序号获取到指定。表信息,则可以定义字符串列表,以此循环

文章图片
#驱动开发#微软技术#c语言
驱动开发:内核遍历进程VAD结构体

树的每一个节点代表一段虚拟地址空间。程序中的代码段,数据段,堆段都会各种占用一个或多个。结构体,需要说明的是栈并不受VAD的管理。同样这是微软定义,如果想要的到最新的,自己下载WinDBG调试内核输入命令。内存块的属性,这个内存结构定义在WinDBG中可看到。结构的偏移值,每个系统都不一样,版本不同偏移值会不同。当需要得到该进程的VAD结构时,只需要使用。结构中可以找到VAD结构的相对偏移。可以看

文章图片
#驱动开发#c++#微软技术
驱动开发:运用VAD隐藏R3内存思路

成员,它是一个存放进程内存块的二叉树结构,如果我们找到了这个二叉树中我们想要隐藏的内存,直接将这个内存在二叉树中。枚举所有进程,并得到我们所需进程的EProcess地址。中的值和进程中分配的内存地址并不完全一样,这是因为。,类似于摘链隐藏进程,就可以达到隐藏的效果。而隐藏进程内特定内存段核心代码在于。得到EProcess结构。运行程序得到两个内存地址。,其实是让上一个节点的。将VAD前后节点连接。

文章图片
#c++#开发语言#c语言 +2
    共 153 条
  • 1
  • 2
  • 3
  • 16
  • 请选择