精华内容
下载资源
问答
  • 利用原神驱动读写内存demo
  • 易语言过驱动读写内存源码,过驱动读写内存,Lx_驱动通信,Lx_获取驱动句柄,Lx_加载驱动,Lx_卸载驱动,CTL_CODE,十六到十,读整数,读文本,写整数,写文本,NtQuerySystemInformation,LocalAlloc,LocalFree,SYSTEM_MODULE_...
  • 易语言驱动读写内存模块源码,驱动读写内存模块,DriverUnload,DispatchCreate,DispatchClose,DispatchDeviceControl,DriverEntry,OnLoad,UnLoad,ReadMemory,WriteMemory,IoGetCurrentIrpStackLocation,...
  • dnf驱动读写模块

    2014-02-09 23:10:17
    dnf驱动读写模块 
  • X64驱动读写内存源码

    2020-11-20 10:47:32
    X64驱动读写内存源码,驱动基于VS2019编写,只支持64位,驱动未签名需要自行开启测试模式加载,R3层基于易语言编写无模块 编译即可用,所有源码都在压缩包里自行下载即可
  • 花开驱动读写模块4.3

    2016-04-08 11:10:51
    花开驱动读写模块4.3
  • 易语言驱动读写源码

    2013-05-22 09:47:49
    易语言驱动读写源码
  • 易语言源码易语言驱动读写内存模块源码.rar 易语言源码易语言驱动读写内存模块源码.rar 易语言源码易语言驱动读写内存模块源码.rar 易语言源码易语言驱动读写内存模块源码.rar 易语言源码易语言驱动读写内存模块...
  • 易语言源码易语言过驱动读写内存源码.rar 易语言源码易语言过驱动读写内存源码.rar 易语言源码易语言过驱动读写内存源码.rar 易语言源码易语言过驱动读写内存源码.rar 易语言源码易语言过驱动读写内存源码.rar ...
  • 易语言驱动-驱动读写内存。源码和例程,很不错哦
  • 内存驱动读写模块源码,写辅助
  • 花开驱动读写4.2.ec

    2015-08-23 21:46:50
    花开驱动读写4.2.ec
  • 花开驱动读写4.0.ec

    2015-05-21 23:35:47
    花开驱动读写4.0.ec
  • 驱动读写应用程序内存

    千次阅读 2019-08-26 03:47:42
    驱动读写应用程序的内存

    驱动读内存

    先定义一个结构,方便应用层调用读写

    typedef struct DATA
    {
    	DWORD pid;//不用HANDLE类型也可以,个人觉得用DWORD方便应用层调用
    	unsigned __int64 address;
    	int data;
    }Data;
    

    读内存

    1.使用通过进程ID获取进程对象PsLookupProcessByProcessId,此时内核对象引用数会加1
    2.KeStackAttachProcess进入进程的地址空间
    3.ProbeForRead检查内存地址是否有效
    4.RtlCopyMemory将指定的内存Copy到一个缓冲区,至此,内存已经读到
    5.收尾:
    调用KeUnstackDetachProcess解除与进程的绑定,退出进程地址空间,
    调用ObDereferenceObject使内核中对象引用数减1

    BOOL ReadMemory(Data* data)
    {
    	PEPROCESS process=NULL;
    	//获取进程对象
    	NTSTATUS status = PsLookupProcessByProcessId(data->pid,&process);
    
    	if (process == NULL)
    	{
    		DbgPrint("获取进程对象失败,PID:%d",data->pid);
    		return FALSE;
    	}
    
    	KAPC_STATE state = { 0 };
    	//绑定进程对象,进入进程地址空间
    	KeStackAttachProcess(process, &state);
    
    	__try
    	{
    		//读取内存
    		ProbeForRead(data->address, sizeof(data->data), 1);
    		RtlCopyMemory(&(data->data), data->address, sizeof(data->data));
    	}
    	__except(1)
    	{
    		//解除绑定
    		KeUnstackDetachProcess(&state);
    		//让内核对象引用数减1
    		ObDereferenceObject(process);
    		DbgPrint("读取进程 %d 的地址 %x 出错", data->pid, data->address);
    		return FALSE;
    	}
    
    	//解除绑定
    	KeUnstackDetachProcess(&state);
    	//让内核对象引用数减1
    	ObDereferenceObject(process);
    	DbgPrint("进程 %d 地址 %x 数据:%d", data->pid, data->address, data->data);
    
    	return TRUE;
    }
    

    写内存

    1.使用通过进程ID获取进程对象PsLookupProcessByProcessId,此时内核对象引用数会加1
    2.KeStackAttachProcess进入进程的地址空间
    3.IoAllocateMdl创建地址描述符
    4.MmBuildMdlFornon将该内存与我们的驱动绑定
    5.调用MmMapLockedPages将MDL映射到我们驱动里的一个变量,对该变量读写就是对MDL对应的物理内存读写
    6.用RtlCopyMemory来修改对应内存储存的数值
    7.收尾:
    MmUnmapLockedPages解除映射,
    KeUnstackDetachProcess解除与进程的绑定,退出进程地址空间,
    ObDereferenceObject使内核中对象引用数减1

    BOOL WriteMemory(Data* data)
    {
    	PEPROCESS process=NULL;
    	//获取进程对象
    	PsLookupProcessByProcessId(data->pid, &process);
    
    	if (process == NULL)
    	{
    		DbgPrint("获取进程对象失败");
    		return FALSE;
    	}
    
    	KAPC_STATE state = { 0 };
    	//绑定进程
    	KeStackAttachProcess(process, &state);
    
    	//创建MDL
    	PMDL mdl = IoAllocateMdl(data->address, sizeof(data->data), 0, 0, NULL);
    	if (mdl == NULL)
    	{
    		DbgPrint("创建MDL失败");
    		return FALSE;
    	}
    
    	//使MDL与驱动进行绑定
    	MmBuildMdlForNonPagedPool(mdl);
    
    	int* ChangeData = NULL;
    
    	__try
    	{
    		//将内存映射到ChangeData
    		ChangeData = MmMapLockedPages(mdl, KernelMode);
    	}
    	__except (1)
    	{
    		DbgPrint("映射内存失败");
    		IoFreeMdl(mdl);
    		KeUnstackDetachProcess(&state);
    		//让内核对象引用数减1
    		ObDereferenceObject(process);
    		return FALSE;
    	}
    
    	RtlCopyMemory(ChangeData, &(data->data), sizeof(data->data));
    	DbgPrint("进程ID:%d 地址:%x 写入数据:%d",data->pid, data->address,*ChangeData);
    
    	//让内核对象引用数减1
    	ObDereferenceObject(process);
    	MmUnmapLockedPages(ChangeData, mdl);
    	KeUnstackDetachProcess(&state);
    	return TRUE;
    }
    

    新手一个,如有错误,望指教

    展开全文
  • 驱动读写内存.e

    2012-09-27 08:46:53
    驱动读写内存.e
  • 驱动读写超时处理

    2019-06-09 17:40:00
    关于驱动读写异步超时的处理,网络上的资料相对稀少,正好最近在工作上遇到了这个问题,所以就研究了一下,发现还是有些门道的。如果完全按照应用层读写超时的处理逻辑来处理驱动层的话就会出现蓝屏等问题 只要涉及...

    关于驱动读写异步超时的处理,网络上的资料相对稀少,正好最近在工作上遇到了这个问题,所以就研究了一下,发现还是有些门道的。如果完全按照应用层读写超时的处理逻辑来处理驱动层的话就会出现蓝屏等问题

    只要涉及到读写超时,那么我们第一印象肯定会想到事件和事件等待相关操作与函数的调用,那么我们来看一下驱动的几个文件操作函数声明:

    首先是打开操作

    NTSTATUS ZwCreateFile(
      _Out_    PHANDLE            FileHandle,
      _In_     ACCESS_MASK        DesiredAccess,
      _In_     POBJECT_ATTRIBUTES ObjectAttributes,
      _Out_    PIO_STATUS_BLOCK   IoStatusBlock,
      _In_opt_ PLARGE_INTEGER     AllocationSize,
      _In_     ULONG              FileAttributes,
      _In_     ULONG              ShareAccess,
      _In_     ULONG              CreateDisposition,
      _In_     ULONG              CreateOptions,
      _In_opt_ PVOID              EaBuffer,
      _In_     ULONG              EaLength
    );

    根据应用层的经验,如果要实现超时读写,我们需要以异步的方式打开文件,而驱动默认即是异步打开操作,如果你需要同步打开,需要设置下面的值(两个需要同时设置)
    DesiredAccess:SYNCHRONIZE
    CreateOptions:FILE_SYNCHRONOUS_IO_NONALERT

    然后是读写函数,两个类似

    NTSTATUS ZwReadFile(
      _In_     HANDLE           FileHandle,
      _In_opt_ HANDLE           Event,
      _In_opt_ PIO_APC_ROUTINE  ApcRoutine,
      _In_opt_ PVOID            ApcContext,
      _Out_    PIO_STATUS_BLOCK IoStatusBlock,
      _Out_    PVOID            Buffer,
      _In_     ULONG            Length,
      _In_opt_ PLARGE_INTEGER   ByteOffset,
      _In_opt_ PULONG           Key
    );
    
    NTSTATUS ZwWriteFile(
      _In_     HANDLE           FileHandle,
      _In_opt_ HANDLE           Event,
      _In_opt_ PIO_APC_ROUTINE  ApcRoutine,
      _In_opt_ PVOID            ApcContext,
      _Out_    PIO_STATUS_BLOCK IoStatusBlock,
      _In_     PVOID            Buffer,
      _In_     ULONG            Length,
      _In_opt_ PLARGE_INTEGER   ByteOffset,
      _In_opt_ PULONG           Key
    );

    这里根据应用层的经验,我们会找关于事件(Event)的参数,根据文档声明,正好第二个参数涉及到了事件,查阅文档后确定该参数可以用于异步超时等待。这个时候我们需要创建一个事件,关于驱动中创建事件的函数我们首先会想到 KeInitializeEvent ,但是此处需要的是 HANDLE 类型,所以我们需要使用下面的方法来创建:

    ZwCreateEvent(&g_hEvent, GENERIC_ALL, NULL, SynchronizationEvent, FALSE);

    然后我们自然想到以Zw开头来搜索相关的等待函数

    status = ZwWaitForSingleObject(g_hEvent, FALSE, &time);

    这个时候如果status返回的是 STATUS_TIMEOUT ,那么就代表文件读写超时,这时候我们就关闭事件句柄和文件句柄然后返回。如果你真的这么做了,那么等数据真正的返回的时候,就会出现蓝屏问题。

    经过分析发现是因为我们在使用 ZwClose 函数关闭句柄后,windows并没有停止对文件的操作,由于是是异步的,所以后台仍然在等待数据的返回,如果这时候我们销毁了资源,但是数据在超时后返回,那么就会出现 0xc0000005 这种内存访问错误蓝屏。那么我们理所当然想到是否有一个函数用来取消文件IO操作,答案是有的,但是是未文档化函数,函数声明如下:

    typedef
    NTSTATUS
    (NTAPI *MyZwCancelIoFile)(
        IN HANDLE               FileHandle,
        OUT PIO_STATUS_BLOCK    IoStatusBlock);

    这个函数即可用来取消文件IO,当我们读写超时后,我们先要取消文件后台IO操作,然后再关闭相关句柄。我们可以这样获得该函数地址:

    UNICODE_STRING funcname = RTL_CONSTANT_STRING(L"ZwCancelIoFile");
    ZwCancelIoFile = (MyZwCancelIoFile)MmGetSystemRoutineAddress(&funcname);
    if (ZwCancelIoFile == NULL)
    {
        return FALSE;
    }

    ~完毕~

    转载于:https://www.cnblogs.com/magicdmer/p/10994140.html

    展开全文
  • 本工具里的驱动可能会报毒(驱动我自己写的,反正我的报了...),如果不信任可以删除,删除后除了驱动读写不可用其他功能均正常 功能详细请看 https://blog.csdn.net/weixin_44286745/article/details/100118584
  • 今天发布一个易语言驱动读写内存模块有兴趣的朋友下载试用,功能强大,直接驱动读写内存
  • 永远不非法的驱动读写模块。不蓝屏,支持所有系统!包括64位 可读写T X旗下所有游戏,其它游戏也可以正常读写!
  • 驱动读写内存,易语言写驱动入门例程,很有学习价值
  • E语言驱动读写类源码

    2013-01-22 22:59:16
    E语言驱动读写类源码,安装()卸载(),可以过很多保护~达到自己的目的!
  • sys驱动读写.rar

    2019-08-05 08:46:44
    dnf读写驱动、源码,学习使用、仅供参考,编译可用;dnf读写驱动、源码,学习使用、仅供参考,编译可用
  • VB通过驱动读写内存的例子,DllTO屋哥_DLL Demo原创作品,直接编译即可。再此说明一下,因操作Windows驱动,因此有些杀毒软件可能会报警,比如360杀毒或木马防火墙等,觉得有问题的就不要下载了,想研究一下的就下载...
  • 驱动读写(只有读)

    千次阅读 2019-03-31 16:48:17
    哈哈 今天看见女装大佬 看我们 这群猪头太菜了了 然后出了一个驱动读写的教程 然后这里是链接 https://www.bilibili.com/video/av26193169?t=992&p=19 这篇博客是根据 这个 教程写的 然后 大佬 说了一个函数...

    这里是参考链接

    https://www.bilibili.com/video/av26193169?t=992&p=19

    这篇博客是根据 这个 教程写的

    然后 大佬 说了一个函数 感觉挺有必要注意的

    	if (!MmIsAddressValid(DbgDir))
    		break;

    这样判断内存是否可用 其实是不对的 

    这个内存 只会判断 这个地址是否有效  而 我们读入的内存是r3层的

    如果 这个 内存 转换进了 物理层 而出现了缺页  

    那么 这个函数 判断不出来  结果会让我们 蓝屏 

    正确的应该这样写

    __try
    			{	 
    				ProbeForRead((processbaseaddr+offset),sizeof(readcode),1);
    				RtlCopyMemory((PVOID)readcode, (PVOID)(processbaseaddr + offset), sizeof(readcode));
    
    			}
    			__except (1)
    			{
    				DbgPrint("Memory is error\n");
    			}

    这样就能看这个内存可读不可读了

    然后整体代码就是

    #include<ntifs.h>
    #include<windef.h>
    
    NTKERNELAPI
    PVOID
    PsGetProcessSectionBaseAddress(
    __in PEPROCESS Process
    );
    
    BYTE        readcode[4] = {0};
    
    ULONG       offset = 0x10;
    
    VOID        MyProcessNotift(HANDLE ParentId,HANDLE ProcessId,BOOLEAN Create)
    {
    	if (Create&&ProcessId!=4&&ProcessId!=0)
    	{
    		PEPROCESS tempEp = NULL;
    		NTSTATUS  status = STATUS_SUCCESS;
    		PUCHAR    processbaseaddr = NULL;
    		KAPC_STATE  temp_stack = { 0 };
    		status = PsLookupProcessByProcessId(ProcessId,&tempEp);
    		if (tempEp)
    		{
    			ObDereferenceObject(tempEp);
    			processbaseaddr = (PUCHAR)PsGetProcessSectionBaseAddress(tempEp);
    
    			if (!processbaseaddr)
    			{
    				DbgPrint("get  process addr file!\n");
    				return;
    			}
    			RtlZeroMemory(readcode, sizeof(readcode));
    
    			KeStackAttachProcess(tempEp, &temp_stack);
    			__try
    			{	 
    				ProbeForRead((processbaseaddr+offset),sizeof(readcode),1);
    				RtlCopyMemory((PVOID)readcode, (PVOID)(processbaseaddr + offset), sizeof(readcode));
    
    			}
    			__except (1)
    			{
    				DbgPrint("Memory is error\n");
    			}
    			KeUnstackDetachProcess(&temp_stack);
    			for (int i = 0; i < sizeof(readcode); i++)
    			{ 
    				DbgPrint("read %x", readcode[i]);
    			}
    			return;
    		}
    
    	}
    
    
    
    }
    
    VOID        Unload(PDRIVER_OBJECT driver)
    {  
    
    	PsSetCreateProcessNotifyRoutine(MyProcessNotift, TRUE);
    	DbgPrint("Unload\n");
    }
    
    NTSTATUS      DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
    {
    	NTSTATUS   status = STATUS_SUCCESS;
    	status = PsSetCreateProcessNotifyRoutine(MyProcessNotift, FALSE);
    	driver->DriverUnload = Unload;
    	if (!NT_SUCCESS(status))
    	{
    		DbgPrint("creat processNotify Failed\n");
    	}
    	return STATUS_SUCCESS;
    }

    我们获取的是 基地址 也就是   400010

    我们来看一下

    在这里 就能看的出来 

    然后我们看一下  内存读出的结果

    正确读出。。。

    展开全文
  • 超级模块驱动读写1,过非法模块

    热门讨论 2013-03-07 00:25:03
    驱动读写1过非法模块,使用之后添加过非法说明,可以加载驱动过掉dnf非法模块
  • 高仿内存_驱动读写1源码 BY风雨无阻.e
  • windows内核驱动条件下文件的创建、读、写等功能实现源码。适用于驱动调试和运行观察的日志打印输出,比Windbg和reaceview更方便。
  • VB驱动读写内存做的简易外挂 。。。。。。。。。
  • 驱动读写进程

    2020-04-20 10:33:13
    NTSTATUS KeReadVirtualMemory(PEPROCESS Process, PVOID SourceAddress, PVOID TargetAddress, SIZE_T Size) { PSIZE_T Bytes; if (NT_SUCCESS(MmCopyVirtualMemory(Process, SourceAddress, PsGetCurrentProcess...
    NTSTATUS KeReadVirtualMemory(PEPROCESS Process, PVOID SourceAddress, PVOID TargetAddress, SIZE_T Size)
    {
    	PSIZE_T Bytes;
    	if (NT_SUCCESS(MmCopyVirtualMemory(Process, SourceAddress, PsGetCurrentProcess(),
    		TargetAddress, Size, KernelMode, &Bytes)))
    		return STATUS_SUCCESS;
    	else
    		return STATUS_ACCESS_DENIED;
    }
    
    NTSTATUS KeWriteVirtualMemory(PEPROCESS Process, PVOID SourceAddress, PVOID TargetAddress, SIZE_T Size)
    {
    	PSIZE_T Bytes;
    	if (NT_SUCCESS(MmCopyVirtualMemory(PsGetCurrentProcess(), SourceAddress, Process,
    		TargetAddress, Size, KernelMode, &Bytes)))
    		return STATUS_SUCCESS;
    	else
    		return STATUS_ACCESS_DENIED;
    }
    
    if (NT_SUCCESS(PsLookupProcessByProcessId(WriteInput->ProcessId, &Process)))
    KeWriteVirtualMemory(Process, &WriteInput->Value,
    				WriteInput->Address, WriteInput->Size);
    KeReadVirtualMemory(Process, ReadInput->Address,
    				&ReadInput->Response, ReadInput->Size);
    
    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,949
精华内容 3,579
关键字:

驱动读写