创建企业网站/网站建设推广公司
反SSDTHOOK的另一种思路-0环实现自己的系统调用
大家都知道我们在应用层使用系统api除了gdi相关的都会走中断门或者systementer进0环然后在走ssdt表去执行0环的函数
这也就导致了ssdthook可以挡下大部分的api调用,那如果我们进0环走另外一条路线的话不通过ssdt就可以做到规避掉hook而且也很难被人找到
下面我们用readprocessMemory来简单写个样例代码
思路如下:
-
驱动层
1.定义code
2.读取3环传来的pid
3.根据pid获取eprocess
4.获取目标进程的cr3
5.提升到dpcl防止被缺页中断导致线程切换,关闭中断,防止被时钟中断导致线程切换
6.修改当前进程的cr3和apcstat结构中的eprocess指针
7.恢复到原始的irql,防止后面读取目标进程内存时缺页无法换页上来,此时我们已经挂靠到了目标进程所以即便被线程切换也不会导致cr3被更新回去
8.读取目标进程的内存将要读取的内容放到0环空间暂存
9.跟之前的流程一样恢复cr3和挂靠
返回内容给三环、 -
应用层:
1.定义读取目标内存的函数
2.函数内通过deviceiocontrol和code向设备发3.送irp
4.获取目标进程内存内容
5.函数返回
驱动的样例代码如下,这里我直接用我前几个博客里用的那个架子来改了代码里也能会有一些用不到的全局变量大家不用管就行
#include <ntddk.h>
//#include <ntifs.h>
#define NTSTRSAFE_LIB
#include <ntstrsafe.h>
#include <intrin.h>extern NTSTATUS PsLookupProcessByProcessId(HANDLE ProcessId,PEPROCESS* Process
);PDEVICE_OBJECT g_pDev = NULL;
UNICODE_STRING devName = { 0 };
UNICODE_STRING symName = { 0 };
DWORD32 g_idtNum = 0;
PVOID sharedMem;
BOOLEAN g_LoopDelDebugportRun = FALSE;
HANDLE g_LoopDelProcessThreadHandle = 0;VOID Unload(PDRIVER_OBJECT pDriver) {KdPrint(("unload"));if (g_LoopDelDebugportRun) {LARGE_INTEGER time = { 0 };time.QuadPart = -100 * 10 * 1000 * 10;//10秒g_LoopDelDebugportRun = FALSE;KeWaitForSingleObject(&g_LoopDelProcessThreadHandle, Executive, KernelMode,FALSE, &time);ZwClose(g_LoopDelProcessThreadHandle);}IoDeleteSymbolicLink(&symName);IoDeleteDevice(g_pDev);}typedef struct _IDTR {UINT16 limit;UINT16 base_low;UINT16 base_hight;
}IDTR, *PIDTR;
#define DEVICE_OBJECT_NAME L"\\Device\\systest"
#define DEVICE_LINK_NAME L"\\??\\systest"
#define MAKE_WORD(a,b) ((a) + (b << 16))
#define MAKE_BASE(a) (DWORD32)(((a >> 32) & 0x00000000ffff0000) + ((a & 0x000000000000ffff)))
#define IOCTL_SYS_INJECTIDT CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, \METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_SYS_MAKE_SHAREDPAGE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, \METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_SYS_HIDEPROCESS CTL_CODE(FILE_DEVICE_UNKNOWN, 0x802, \METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_SYS_DELDEBUGPORT CTL_CODE(FILE_DEVICE_UNKNOWN, 0x803, \METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_SYS_READPROCESSSMEMORY CTL_CODE(FILE_DEVICE_UNKNOWN, 0x804, \METHOD_BUFFERED, FILE_ANY_ACCESS)NTSTATUS ReadProcessMemory(UINT32 pid, PVOID addr, PVOID buf, UINT32 len)
{NTSTATUS status = STATUS_SUCCESS;PETHREAD pEthread = NULL;PEPROCESS pEprocess = NULL;PEPROCESS attachEprocess = NULL;DWORD32 oldCr3 = 0;DWORD32 attachCr3 = 0;_asm {mov eax, fs: [0x124] //fs:[0]是kpcr + 124是ethreadmov pEthread, eaxmov eax, [eax + 0x220] //eprocessmov pEprocess, eax}__try {status = PsLookupProcessByProcessId((HANDLE)pid, &attachEprocess);if (!NT_SUCCESS(status)) {KdPrint(("failed search target eprocess!\r\n"));return status;}oldCr3 = __readcr3();attachCr3 = *(PDWORD32)((PUCHAR)attachEprocess + 0x18);KIRQL irql = KeRaiseIrqlToDpcLevel();_asm cli; //这里关闭中断是因为时钟中断比dpcl要高,此时还没有挂靠所以要避免线程切换*(DWORD32*)((PUCHAR)pEthread + 0x44) = attachEprocess;__writecr3(attachCr3);_asm sti;KeLowerIrql(irql);RtlCopyMemory(buf, addr, len);return status;}__except (1) {KdPrint(("failed ReadProcessMemory exception happened!\r\n"));}return STATUS_UNSUCCESSFUL;
}NTSTATUS DeviceControl(PDEVICE_OBJECT pDev, PIRP pIrp)
{NTSTATUS status = STATUS_SUCCESS;ULONG_PTR Informaiton = 0;ULONG ioControlCode = 0;PVOID input = NULL;ULONG inputLen = 0;PVOID output = NULL;ULONG outputLen = 0;PIO_STACK_LOCATION pIoStackLocation = IoGetCurrentIrpStackLocation(pIrp);ioControlCode = pIoStackLocation->Parameters.DeviceIoControl.IoControlCode;input = pIrp->AssociatedIrp.SystemBuffer;output = pIrp->AssociatedIrp.SystemBuffer;inputLen = pIoStackLocation->Parameters.DeviceIoControl.InputBufferLength;outputLen = pIoStackLocation->Parameters.DeviceIoControl.OutputBufferLength;switch (ioControlCode){case IOCTL_SYS_READPROCESSSMEMORY:{DWORD32* data = (PDWORD32)input;UINT32 pid = data[0];DWORD32 addr = data[1];status = ReadProcessMemory(pid, (PVOID)addr, output, outputLen);if (!NT_SUCCESS(status)) {KdPrint(("failed del process debugport!\n"));}Informaiton = outputLen;break;}default:break;}pIrp->IoStatus.Status = status;pIrp->IoStatus.Information = Informaiton;IoCompleteRequest(pIrp, IO_NO_INCREMENT);return status;
}NTSTATUS PassFunc(PDEVICE_OBJECT pDev, PIRP pIrp)
{pIrp->IoStatus.Information = 0;pIrp->IoStatus.Status = STATUS_SUCCESS;IoCompleteRequest(pIrp, IO_NO_INCREMENT);return STATUS_SUCCESS;
}NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver, PUNICODE_STRING pRegPath) {NTSTATUS status = STATUS_SUCCESS;pDriver->DriverUnload = Unload;for (size_t i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++){pDriver->MajorFunction[i] = PassFunc;}pDriver->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DeviceControl;do{KdPrint(("begin\r\n"));//创建设备对象RtlInitUnicodeString(&devName, DEVICE_OBJECT_NAME);status = IoCreateDevice(pDriver, 0, &devName, FILE_DEVICE_UNKNOWN, 0, FALSE, &g_pDev);if (!NT_SUCCESS(status)) {KdPrint(("Create Dev Object Failed!\r\n"));break;}RtlInitUnicodeString(&symName, DEVICE_LINK_NAME);status = IoCreateSymbolicLink(&symName, &devName);if (!NT_SUCCESS(status)) {KdPrint(("Create Sym Link Failed!\r\n"));IoDeleteDevice(g_pDev);break;}g_pDev->Flags |= DO_BUFFERED_IO;} while (FALSE);return status;
}
三环代码就比较简单了写这个博客时候环境已经关掉了,这里就不贴了
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
反SSDTHOOK的另一种思路-0环实现自己的系统调用
反SSDTHOOK的另一种思路-0环实现自己的系统调用 大家都知道我们在应用层使用系统api除了gdi相关的都会走中断门或者systementer进0环然后在走ssdt表去执行0环的函数 这也就导致了ssdthook可以挡下大部分的api调用,那如果我们进0环走另外一条路线的话不通过ssdt就可…...
![](https://www.ngui.cc/images/no-images.jpg)
Certbot签发和续费泛域名SSL证书(通过DNS TXT记录来验证域名有效性)
我们在使用let’s encrypt获取免费的HTTPS证书的时候,let’s encrypt需要对域名进行验证,以确保域名是你自己的 之前用默认的文件验证方式总有奇怪的问题导致失败,我也是很无奈,于是改用验证DNS-TXT记录的方式来验证,而…...
![](https://img-blog.csdnimg.cn/0c3395ddbdee4ad994eaa74d267c328a.png)
PY32F003F18之RTC
一、RTC振荡器 PY32F003F18实时时钟的振荡器是内部RC振荡器,频率为32.768KHz。它也可以使用HSE时钟,不建议使用。HAL库提到LSE振荡器,但PY32F003F18实际上没有这个振荡器。 缺点:CPU掉电后,需要重新配置RTCÿ…...
![](https://img-blog.csdnimg.cn/18d3a366037146deb3f8f1273f30036b.png#pic_center)
redis主从从,redis-7.0.13
redis主从从,redis-7.0.13 下载redis安装redis安装redis-7.0.13过程报错1、没有gcc,报错2、没有python3,报错3、[adlist.o] 错误 127 解决安装报错安装完成 部署redis 主从从结构redis主服务器配置redis启动redis登录redisredis默认是主 redi…...
![](https://img-blog.csdnimg.cn/d5e3d32d36784c698ba22f192866a917.png)
力扣-338.比特位计数
Idea 直接暴力做法:计算从0到n,每一位数的二进制中1的个数,遍历其二进制的每一位即可得到1的个数 AC Code class Solution { public:vector<int> countBits(int n) {vector<int> ans;ans.emplace_back(0);for(int i 1; i < …...
![](https://img-blog.csdnimg.cn/635aedf581d244e6956f148d006de010.png)
【Leetcode】 17. 电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入:digits "23" 输出&…...
![](https://img-blog.csdnimg.cn/6dce793361b44c8d8a56ce4e8339f0d0.png)
洛谷P1102 A-B 数对题解
目录 题目A-B 数对题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示传送门 代码解释亲测 题目 A-B 数对 题目背景 出题是一件痛苦的事情! 相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的 AB Problem,改用 …...
![](https://img-blog.csdnimg.cn/img_convert/9a221328830cd48b58acfa3cb2dbe653.png)
【Linux进行时】进程地址空间
进程地址空间 例子引入: 我们在讲C语言的时候,老师给大家画过这样的空间布局图,但是我们对它不了解 我们写一个代码来验证Linux进程地址空间 #include<stdio.h> #include<assert.h> #include<unistd.h> int g_value100; …...
![](https://img-blog.csdnimg.cn/img_convert/565de9d561dc5d1ec33fb46d066e024b.png)
批量将文件名称符合要求的文件自动复制到新文件夹:Python实现
本文介绍基于Python语言,读取一个文件夹,并将其中每一个子文件夹内符合名称要求的文件加以筛选,并将筛选得到的文件复制到另一个目标文件夹中的方法。 本文的需求是:现在有一个大的文件夹,其中含有多个子文件夹&#x…...
![](https://img-blog.csdnimg.cn/02938b4c658f41128f6b3ae104f26fef.png)
TensorFlow入门(一、环境搭建)
一、下载安装Anaconda 下载地址:http://www.anaconda.comhttp://www.anaconda.com 下载完成后运行exe进行安装 二、下载cuda 下载地址:http://developer.nvidia.com/cuda-downloadshttp://developer.nvidia.com/cuda-downloads 下载完成后运行exe进行安装 安装后winR cmd进…...
![](https://img-blog.csdnimg.cn/34eadac4e6dc4307a171edcb58563371.png)
90、Redis 的 value 所支持的数据类型(String、List、Set、Zset、Hash)---->Hash 相关命令
本次讲解要点: Hash 相关命令:是指value中的数据类型 启动redis服务器: 打开小黑窗: C:\Users\JH>e: E:>cd E:\install\Redis6.0\Redis-x64-6.0.14\bin E:\install\Redis6.0\Redis-x64-6.0.14\bin>redis-server.exe red…...
![](https://www.ngui.cc/images/no-images.jpg)
我开源了一个加密算法仓库,支持18种算法!登录注册业务可用!
文章目录 仓库地址介绍安装用法SHA512HMACBcryptScryptAESRSAECC 仓库地址 仓库地址:https://github.com/palp1tate/go-crypto-guard 欢迎star和fork! 介绍 此存储库包含用 Go 编写的全面的密码哈希库。该库支持多种哈希算法,它允许可定制…...
![](https://img-blog.csdnimg.cn/img_convert/fcfc4d9ae635392255c2ed229c33ab0e.png)
FPGA设计时序约束二、输入延时与输出延时
目录 一、背景 二、set_input_delay 2.1 set_input_delay含义 2.2 set_input_delay参数说明 2.3 使用样例 三、set_output_delay 3.1 set_output_delay含义 3.2 set_output_delay参数说明 3.3 使用样例 四、样例工程 4.1 工程代码 4.2 时序报告 五、参考资料 一、…...
![](https://img-blog.csdnimg.cn/3ffc499f046544f19edf4a69f60411e0.png#pic_center)
电阻的基础与应用
文章目录 电阻的基础与应用电阻的介绍与分类电阻介绍电阻的分类碳膜/金属膜电阻厚膜/薄膜电阻功能性电阻(光敏/热敏/压敏)特殊电阻(绕线电阻/水泥电阻/铝壳电阻) 电阻的主要厂家与介绍国外厂家VISHAY(威世)KOA(兴亚)Kyocera(京瓷)…...
![](https://www.ngui.cc/images/no-images.jpg)
5.html表格
<table><tr><th>列1标题</th><th>列2标题</th><th>列3标题</th></tr><tr><td>行1列1</td><td>行1列2</td><td>行1列3</td></tr><tr><td>行2列1</td>…...
![](https://img-blog.csdnimg.cn/18fd3e7af62b4a6da379f0fcfa4c73ad.png)
飞桨EasyDL-Mac本地部署离线SDK-Linux集成Python
前言:本文对使用飞桨EasyDL桌面版实现本地部署物体检测做一下说明 一、训练模型 如何使用飞桨EasyDL桌面版这里就不再赘述,直接参照官方文档进行物体检测模型训练。 飞桨EasyDL桌面版-用零代码开发实现物体检测https://ai.baidu.com/ai-doc/EASYDL/Tl2…...
![](https://www.ngui.cc/images/no-images.jpg)
【kubernetes】Kubernetes中的DaemonSet使用
目录 1 为什么需要DaemonSet2 DaemonSet的Yaml的关键字段3 DaemonSet的使用4 一种自行控制Pod更新的方式5 总结 1 为什么需要DaemonSet Deployment可以用于部署无状态的应用,例如系统的接口层或者逻辑层,而多个Pod可以用于负载均衡和容灾。如果有这样一…...
![](https://img-blog.csdnimg.cn/img_convert/b04cca13733e2b92955eb791f7645a14.jpeg#pic_center)
《 新手》web前端(axios)后端(java-springboot)对接简解
文章目录 <font color red>1.何为前后端对接?2.对接中关于http的关键点2.1. 请求方法2.2. 请求参数设置简解: 3.对接中的跨域(CROS)问题**为什么后端处理跨域尽量在业务之前进行?**3.总结 1.何为前后端对接? “前后端对接” 是指前端和后端两个…...
![](https://img-blog.csdnimg.cn/da5db259884c41b49811b5bb76ec376f.png)
第七章 查找 十、散列查找
一、哈希表(散列表) 哈希表的数据元素的关键字与其存储地址直接相关。 二、解决冲突的方法 三、散列表中元素的查找 总共对比了3个关键字,所以查找长度为3. 四、查找效率计算 (1)成功的概率 需要对比一次的关键字为…...
![](https://www.ngui.cc/images/no-images.jpg)
第一章 C语言知识补充
求字节数运算符:sizeof 强制类型转换运算符:(类型) 下标运算符:[ ] 函数调用运算符:( ) 算术移位指令 算术移位指令有:算术左移SAL和算术右移SAR。算术移位指令的功能描述如下:…...
![](https://www.ngui.cc/images/no-images.jpg)
【Book And Paper 】
【paper Interactive Segmentation of Radiance Fields 算法设计: 电子版...
![](https://img-blog.csdnimg.cn/42cfbdfb7ea3483dae12a00e17409fb4.png#pic_center)
计算机竞赛 深度学习疲劳检测 驾驶行为检测 - python opencv cnn
文章目录 0 前言1 课题背景2 相关技术2.1 Dlib人脸识别库2.2 疲劳检测算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手机检测3.4 抽烟检测3.5 喝水检测 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习加…...
![](https://www.ngui.cc/images/no-images.jpg)
代码随想录 动态规划 13
300. 最长递增子序列 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子…...
![](https://img-blog.csdnimg.cn/6a8fffae84a14147b2a2738bd152ed62.png)
lv6 嵌入式开发-Flappy bird项目
目录 1 项目功能总结 2 知识储备: 3 项目框图 4 Ncurses库介绍 做Flappy bird项目有什么用? 1. 复习、巩固c语言知识 2. 培养做项目的逻辑思维能力 3. 具备开发简单小游戏的能力 学会了Flappy bird项目,贪吃蛇和推房子两款小游戏也可…...
![](https://www.ngui.cc/images/no-images.jpg)
【Java】方法重写
概述 子类中出现了和父类一模一样的方法 当子类需要父类的功能,而功能主体中,子类有自己独特的内容,就可以通过重写父类中的方法,这样即延续了父类的功能,又定义了自己的特有内容 Override 是一个注解,可以…...
![](https://img-blog.csdnimg.cn/d0d2ba140ea9444597be4b6b3931f925.png#pic_center)
艺术表现形式
abstract expressionism 抽象表现主义 20世纪中期的一种艺术运动,包括多种风格和技巧,特别强调艺术家通过非传统和通常非具象的手段表达态度和情感的自由。 抽象表现主义用有力的笔触和滴落的颜料来表达情感和自发性。 简单地结合“abstract expression…...
![](https://www.ngui.cc/images/no-images.jpg)
PHP 反序列化漏洞:手写序列化文本
文章目录 参考环境序列化文本Scalar Type整数浮点数布尔值字符串 Compound Type数组数据结构序列化文本 对象数据结构序列化文本 Special TypeNULL数据结构序列化文本 手写序列化文本过程中的注意事项个数描述须于现实相符序列化文本前缀的大小写变化符号公共属性 参考 项目描…...
![](https://img-blog.csdnimg.cn/0e3b6bbbee2348a9bcf190695c3bb9d3.png)
react.js在visual code 下的hello World
想学习reacr.js ,就开始做一个hello world。 我的环境是visual code ,所以我找这个环境下的例子。参照: https://code.visualstudio.com/docs/nodejs/reactjs-tutorial 要学习react.js ,还得先安装node.js,我在visual …...
![](https://img-blog.csdnimg.cn/b5081ccda01d4f679770fab6d051f74d.png#pic_center)
CocosCreator3.8研究笔记(二十四)CocosCreator 动画系统-动画编辑器实操-关键帧实现动态水印动画效果
上一篇,我们介绍了动画编辑器相关功能面板说明,感兴趣的朋友可以前往阅读: CocosCreator3.8研究笔记(二十三)CocosCreator 动画系统-动画编辑器相关功能面板说明。 熟悉了动画编辑器的基础操作,那么再使用动…...
![](https://img-blog.csdnimg.cn/08841096280d4d64bbf560096c9e3249.gif)
第1篇 目标检测概述 —(3)YOLO系列算法
前言:Hello大家好,我是小哥谈。YOLO(You Only Look Once)系列算法是一种目标检测算法,主要用于实时物体检测。相较于传统的目标检测算法,YOLO具有更快的检测速度和更高的准确率。YOLO系列算法的核心思想是将…...
![](/images/no-images.jpg)
建设网站审批/建网站费用
甲骨文已经完成了对SUN公司的收购,于1月27日发布了对Sun各项业务的整合规划。总体上说,Oracle要成为软硬件一体化的整体解决方案的厂商。 以下就其对备受关注的Java方面的策略做个介绍。Java SE:1)推出JDK SE 7, 它将包括多个新的…...
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
网站公安备案时间/最近三天的新闻大事摘抄
一,AS开发app用,所用的数据库有限制,必须使用较小的SQLite(MySql和Sql Server想想就不显示) 但是该数据库并不需要我们单独下载,安装的SDK中已经有了,在C:\AndroidSDK\platform-tools目录下 最下…...
![](/images/no-images.jpg)
用vs做购物网站/青岛网站开发公司
题目链接 题目描述 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 说明: 所有输入只包含小写字母 a-z 。 示例 1 输入: ["flower","flow","flight"] 输出: "fl" 示例 2…...
![](/images/no-images.jpg)
网站建设的申请/东莞网站建设公司排名
史上最全 2019 ICRA顶会四足机器人文献整理一、ICRA论文集中相关文献对应subsession时间二、文献整理内容一、ICRA论文集中相关文献对应subsession时间 15:15-16:30, Subsession TuCT1-14, 220 Legged Robots I - 2.3.14 Interactive Session, 6 papers 15:15-16:30, Subses…...
![](https://img-blog.csdnimg.cn/img_convert/0b1331709591d260c1c78e86d0c51c18.png)
企业网站 数据库设计/站长工具查询网站信息
【编者按:现在许多计算机用户都习惯把软件安装在系统的默认目录下,认为方便。呵呵,是“方便”,方便了病毒和木马。稍微多花几秒钟的时间,改变应用程序的安装目录,既能养成一个良好的计算机使用习惯…...
![](https://img-blog.csdnimg.cn/20201020182603779.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3EzNjU2NzkwODU=,size_16,color_FFFFFF,t_70#pic_center)
用什么程序做资讯类网站/人工智能培训班
在机器视觉行业中,有一种叫表面缺陷检测系统的东西,相信很多朋友都不是很了解,这个系统到底有什么作用,其实表面缺陷检测系统也叫外观缺陷检测系统,主要应用在工业、纺织、薄膜、3c产品、生物制药等行业当中࿰…...