c/c++/易语言驱动内存无痕读写源码-包含易语言调用示例代码

  • c++驱动源码文件目录

  • 易语言调用驱动示例代码

  •  

     

  • Windows驱动程序是一种特殊的系统程序,它可以访问和控制系统资源,并且不受其他应用程序的限制。它可以获取系统资源,进行更深入的系统控制,包括读取其他进程的内存以及修改其他进程内存。Windows驱动程序可以被用于不少有用的操作,例如实现系统的高级安全性保护、增强系统的性能、自动执行某些指定的任务,甚至还可以实现一些资源的共享。其中,读取其他进程内存以及修改其他进程内存是Windows驱动程序的一项重要功能。Windows驱动程序可以使用系统API来读取其他进程的内存,也可以使用系统API来修改其他进程的内存。使用系统API来读取其他进程的内存,可以获取进程的信息,例如进程的句柄、线程的ID、进程的ID,以及系统提供的其他信息。使用系统API来修改其他进程的内存,可以更改进程的状态,例如修改进程的优先级,改变进程的代码段和数据段,以及系统提供的其他功能。Windows驱动程序可以使用系统API来读取其他进程的内存以及修改其他进程的内存,从而达到实现一些特殊功能的目的,例如实现系统的高级安全性保护、增强系统的性能、自动执行某些指定的任务,甚至还可以实现一些资源的共享。同时,使用Windows驱动程序来读取和修改其他进程的内存也需要严格遵守系统安全规则,以避免发生安全漏洞。

1.加载驱动:

extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver, PUNICODE_STRING path) {

    /*关闭未引用参数的警告*/
    UNREFERENCED_PARAMETER(path);
    /*指向创建的卸载函数*/
    pDriver->DriverUnload = DriverUnload;
    UNICODE_STRING NotExportedFunctionAddress = { 0 }, altitude = { 0 };
    /*获取未导出函数的地址*/
    RtlInitUnicodeString(&NotExportedFunctionAddress, L"PsGetProcessWow64Process");
    pPsGetProcessWow64Process = (PsGetProcessWow64Process)MmGetSystemRoutineAddress(&NotExportedFunctionAddress);
    RtlInitUnicodeString(&NotExportedFunctionAddress, L"PsGetProcessPeb");
    pPsGetProcessPeb = (PsGetProcessPeb)MmGetSystemRoutineAddress(&NotExportedFunctionAddress);
    /*创建注册表回调*/
    NTSTATUS Status = STATUS_SUCCESS;
    RtlInitUnicodeString(&altitude, L"321000");
    Status = CmRegisterCallbackEx((PEX_CALLBACK_FUNCTION)Callback, &altitude, pDriver, NULL, &Cookie, NULL);
    if (!NT_SUCCESS(Status)) DbgPrint("创建注册表回调失败.\n"); else DbgPrint("驱动已加载.\n");
    return STATUS_SUCCESS;
}

2.卸载驱动:

extern "C" VOID DriverUnload(PDRIVER_OBJECT pDriver) {
	UNREFERENCED_PARAMETER(pDriver);
	/*卸载注册表回调*/
	CmUnRegisterCallback(Cookie);
	DbgPrint("驱动已卸载.\n");
}

3.读物理内存:厉害的点在于不修改本身程序的完整性实现写内存

NTSTATUS ReadPhysicalAddress(PVOID address, PVOID buffer, SIZE_T size, SIZE_T* BytesTransferred)
{
    MM_COPY_ADDRESS Read = { 0 };
    Read.PhysicalAddress.QuadPart = (LONG64)address;
    return MmCopyMemory(buffer, Read, size, MM_COPY_MEMORY_PHYSICAL, BytesTransferred);
}

4.写物理内存:

/*写入物理内存*/
NTSTATUS WritePhysicalAddress(PVOID address, PVOID buffer, SIZE_T size, SIZE_T* BytesTransferred)
{
	if (!address) return STATUS_UNSUCCESSFUL;
	PHYSICAL_ADDRESS Write = { 0 };
	Write.QuadPart = (LONG64)address;
	PVOID map = MmMapIoSpaceEx(Write, size, PAGE_READWRITE);
	if (!map) return STATUS_UNSUCCESSFUL;
	RtlCopyMemory(map, buffer, size);
	*BytesTransferred = size;
	MmUnmapIoSpace(map, size);
	return STATUS_SUCCESS;
}

4.切换R3 R3模式已经很牛逼了 最主要的是无痕。

ULONG64 TransformationCR3(ULONG64 cr3, ULONG64 VirtualAddress) {
	cr3 &= ~0xf;
	ULONG64 PAGE_OFFSET = VirtualAddress & ~(~0ul << 12);
	SIZE_T BytesTransferred = 0;
	ULONG64 a = 0,b = 0,c = 0;
	ReadPhysicalAddress((PVOID)(cr3 + 8 * ((VirtualAddress >> 39) & (0x1ffll))), &a, sizeof(a), &BytesTransferred);
	if (~a & 1) return 0;
	ReadPhysicalAddress((PVOID)((a & ((~0xfull << 8) & 0xfffffffffull)) + 8 * ((VirtualAddress >> 30) & (0x1ffll))), &b, sizeof(b), &BytesTransferred);
	if (~b & 1) return 0;
	if (b & 0x80) return (b & (~0ull << 42 >> 12)) + (VirtualAddress & ~(~0ull << 30));
	ReadPhysicalAddress((PVOID)((b & ((~0xfull << 8) & 0xfffffffffull)) + 8 * ((VirtualAddress >> 21) & (0x1ffll))), &c, sizeof(c), &BytesTransferred);
	if (~c & 1) return 0;
	if (c & 0x80) return (c & ((~0xfull << 8) & 0xfffffffffull)) + (VirtualAddress & ~(~0ull << 21));
	ULONG64 address = 0;
	ReadPhysicalAddress((PVOID)((c & ((~0xfull << 8) & 0xfffffffffull)) + 8 * ((VirtualAddress >> 12) & (0x1ffll))), &address, sizeof(address), &BytesTransferred);
	address &= ((~0xfull << 8) & 0xfffffffffull);
	if (!address) return 0;
	return address + PAGE_OFFSET;
}

易语言代码示例:

 

 有感兴趣的私聊源码开源(包含c++ 易语言调用驱动方法,以及易语言操作sys程序示例代码)

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: c/c++易语言都是常用的编程语言,可以用来编写驱动内存无痕读写源码。 1. C/C++驱动内存无痕读写源码: C/C++可以使用Windows提供的驱动开发工具包(Windows Driver Kit,简称WDK)编写驱动程序。在编写驱动程序时,可以使用设备驱动程序接口(Device Driver Interface,简称DDI)函数来读写内存。 首先,需要创建一个设备驱动程序,定义驱动程序的入口点,在其中初始化驱动程序,并注册读写内存的回调函数。在回调函数中,可以使用DDI函数来访问和修改内存。 2. 易语言驱动内存无痕读写源码: 在易语言中,可以使用EasyAnti提供的驱动内存读写接口来实现驱动内存无痕读写的功能。EasyAnti是一个易语言开发的驱动内核模块,提供了一系列的读写内存函数。 首先,需要加载EasyAnti驱动模块,并进行初始化。然后,使用EasyAnti提供的读写内存函数来访问和修改内存。 无论是使用C/C++还是易语言驱动内存无痕读写都需要特殊的权限和操作系统支持。此外,在进行驱动内存无痕读写时,需要确保程序安全可靠,避免对系统造成损害。 ### 回答2: C/C++易语言都是编程语言,可以用来编写驱动内存无痕读写源码驱动内存无痕读写是指在操作系统内核层面进行内存读写操作,不留下任何痕迹,不受应用程序或者防护软件的检测和干扰。 在C/C++中,可以使用Windows内核编程技术来实现驱动内存无痕读写。具体步骤如下: 1. 创建一个内核模式的驱动程序,可以使用Visual Studio等开发工具。 2. 在驱动程序中,使用操作系统提供的API函数来打开、读取和写入进程的内存。 3. 在驱动程序中,通过提权来获得对内核空间的访问权限。 4. 使用内核模式的I/O函数来读取和写入指定进程的内存。 在易语言中,可以使用Win32扩展库来实现驱动内存无痕读写。具体步骤如下: 1. 创建一个易语言项目,导入Win32扩展库。 2. 使用Win32扩展库提供的函数和接口,来打开、读取和写入进程的内存。 3. 通过调用Windows API函数来获得对内核空间的访问权限。 4. 使用Win32扩展库提供的函数来读取和写入指定进程的内存。 无论是使用C/C++还是易语言,实现驱动内存无痕读写都需要对操作系统内核有一定的了解,并且需要具备驱动开发和内核编程的相关知识和技能。此外,如此高级的技术也可能涉及到系统安全和法律合规性的问题,需慎重使用。 ### 回答3: C/C++易语言都是常用的编程语言,可以用于编写驱动程序和进行内存读写操作。下面分别讨论这两种语言的驱动内存无痕读写源码实现。 对于C/C++语言来说,可以通过直接调用操作系统提供的API函数来实现驱动内存无痕读写。例如,在Windows平台上,可以使用Windows内核编程接口(Kernel-Mode Driver Framework,简称KMDF)和Windows驱动开发包(Windows Driver Kit,简称WDK)来编写驱动程序。具体实现的步骤包括以下几个方面: 1. 首先,需要通过注册驱动程序等步骤将编写的驱动程序加载到操作系统中。 2. 然后,驱动程序使用C/C++语言编写,并通过调用API函数来获取目标进程的句柄,进而访问进程的内存。 3. 在获取目标进程的内存句柄之后,可以通过调用API函数读取或写入目标进程的内存数据。 相比之下,易语言编写驱动程序则较为简单。由于易语言的语法和开发方式相对于C/C++来说更加简洁,易于上手和理解,因此许多初学者也会选择使用易语言编写驱动程序。易语言的编程环境自带了驱动开发模块,可以直接在集成开发环境中编写驱动程序,无需独立的驱动开发包。然而,易语言编写驱动程序的功能和灵活性相对较弱,对于一些高级操作可能存在限制。 综上所述,C/C++易语言都可以用于编写驱动程序和进行内存无痕读写操作。相比而言,C/C++提供了更为底层、灵活和功能丰富的编程能力,适合于对性能和功能有较高要求的应用场景;而易语言则更适合初学者或对功能需求较简单的场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值