逆向 | 驱动挂靠进程直接读内存

news/2024/11/15 15:30:24/文章来源:https://www.cnblogs.com/Mz1-rc/p/18202644

逆向 | 驱动挂靠进程直接读内存

image
参考:https://cloud.tencent.com/developer/article/2358904
https://github.com/Whitebird0/driver_read_and_write/blob/main/04-读写内存/ReadMemory.c

代码如下:
代码不长但是有坑,比如说ExAllocatePool2的参数就跟之前不一样了,这个点我调试了好久,晕

typedef struct
{DWORD pid;                // 要读写的进程IDDWORD64 address;          // 要读写的地址DWORD size;               // 读写长度BYTE* data;               // 要读写的数据
}ReadMemoryStruct;// MDL读内存
BOOL MDLReadMemory(ReadMemoryStruct* data)
{BOOL bRet = TRUE;PEPROCESS process = NULL;PsLookupProcessByProcessId((HANDLE)data->pid, &process);//   +0x5a8 ImageFileName    : [15] UCharUCHAR* imagename = ((BYTE*)process + 0x5a8);DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "> [info] ImageFileName: %s \r\n", imagename);if (process == NULL){return FALSE;}BYTE* GetData;__try{GetData = ExAllocatePool2(POOL_FLAG_PAGED, data->size, 'qwer');if (GetData == NULL) {DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[fail] GetData ExAllocatePool2\r\n");}}__except (1){DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[err] GetData ExAllocatePool2\r\n");return FALSE;}KAPC_STATE stack = { 0 };__try {KeStackAttachProcess(process, &stack);}__except (1) {DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[err] KeStackAttachProcess\r\n");}__try{//DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[info] MmIsAddressValid(start): %x \r\n", MmIsAddressValid((PVOID)data->address));//DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[info] MmIsAddressValid(end): %x \r\n", MmIsAddressValid((PVOID)(data->address+data->size)));//DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[info] MmIsAddressValid(start): %x \r\n", MmIsAddressValid((PVOID)GetData));DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[info] ProbeForRead(%I64x,%x)\r\n", data->address, data->size);ProbeForRead((volatile VOID*)data->address, data->size, 1);RtlCopyMemory(GetData, (const void*)data->address, data->size);}__except (1){DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "[err] ProbeForRead code: %x\r\n", GetExceptionCode());bRet = FALSE;}ObDereferenceObject(process);KeUnstackDetachProcess(&stack);RtlCopyMemory(data->data, GetData, data->size);ExFreePool(GetData);return bRet;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/709378.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聊聊 JSON Web Token (JWT) 和 jwcrypto 的使用

哈喽大家好,我是咸鱼。 最近写的一个 Python 项目用到了 jwcrypto 这个库,这个库是专门用来处理 JWT 的,JWT 全称是 JSON Web Token ,JSON 格式的 Token。 今天就来简单入门一下 JWT。官方介绍:https://jwt.io/introduction 先聊聊 Token Token 的意思是令牌,通常用于身份…

CC2530 zigebee 实现低功耗

​ZigBee网络低功耗运行一直是苦逼攻城狮们要解决的问题,TI的CC2530可以说已经把终端的休眠功耗降低到了极致,现在我们就来体验这颗芯片的魅力!文章末尾分享完整源码和PCB工程文件。 一、CC2530供电模式 CC2530芯片有五种运行模式,分别为主动模式、空闲模式、PM1、PM2和PM3…

『手撕Vue-CLI』处理不同指令

前言 在上一篇『手撕Vue-CLI』添加自定义指令中,已经实现了自定义指令的添加,但是指令还是比较简单的,只是简单的打印一句话,那么在实际运用场景中,可能会有更多的需求,比如可能需要在指令中传递参数,或者需要在指令中进行一些复杂的操作,那么这个时候我们就需要对指令…

信息安全事件应急处理报告模板

一、概述 1.1 应急处理服务背景 Fesco 单位与星际和平公司签订应急服务合同。星际和平公司根据合同协议中规定的范围和工作内容为 Fesco 单位提供应急服务。2024 年 5 月 20 日 Fesco 单位网站服务器发现存在恶意文件,直接威胁网站的正常运营与使用,Fesco 单位立即拨通星际和…

linux 数据库安装配置

如果有原来的数据库,需要先卸载 摘自https://blog.csdn.net/weixin_50367873/article/details/134551859, 本文通过yum安装mysql,如需离线安装mysql,查看原文 1. 检查是否有mariadb存在,centos默认自带ps ajx | grep mariadb 查找是否存在systemctl stop mariadb.service …

无界微前端

https://zhuanlan.zhihu.com/p/657544258背景 什么是微前端 微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略 玉伯:今天看各 BU 的业务问题,微前端的前提,还是得有主体应用,然后才有微组件或微应用,解决的是可控体系下的前端协…

[MySQL]存储过程

本篇文章阐述的原则是“以吾之理解,着重之阐述”,因此没有那么细致。 如果文中阐述不全或不对的,多多交流。【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://www.cnblogs.com/cnb-yuchen/p/18032044 出自【进步*于辰的博客】存储过程的细节很多…

esp8266-01 使用介绍

一、直接使用接线esp8266USB转TTl说明TX RX ------RX TX ------EN 3.3V AT命令 需要拉高 ------3V3 3.3V ------IO0 不接 IO0接地进入烧录模式GND GND ------二、固件烧写 前提说明一般是模块固件损坏或者买回来里面可能被别人刷过固件需要擦除或者增加固件才用,在这里结合我…

[转帖]Linux内存管理基本概念

最近在学习Linux系统的内存管理,小白一枚,零散从网上收集的一些笔记如下: /proc目录提供了很多工具给我们查看当前内存情况 1. /proc/meminfo是什么 $cat /proc/meminfoMemTotal: 2052440 kB //总内存MemFree: 50004 kB //空闲内存Buffers: 1…

机器学习中的正则化技术——Python实现

在机器学习中,我们非常关心模型的预测能力,即模型在新数据上的表现,而不希望过拟合现象的的发生,我们通常使用正则化(regularization)技术来防止过拟合情况。正则化是机器学习中通过显式的控制模型复杂度来避免模型过拟合、确保泛化能力的一种有效方式。如果将模型原始的…

ConfigurationClassPostProcessor类,@Configuration注解的底层实现

概览 由前文可知,ConfigurationClassPostProcessor是作为Spring中的内置类被添加到容器中,【源码学习】Spring启动流程ConfigurationClassPostProcessor不仅实现了BeanFactoryPostProcessor(BFPP)并且实现了BeanDefinitionRegistryPostProcessor,具有比一般BFPP更高的初始…