zoukankan      html  css  js  c++  java
  • 32位程序读写64位程序内存

      32位程序可以通过NtWow64ReadVirtualMemory64,NtWow64WriteVirtualMemory64读写64程序内存。

      步骤:

      1.自定义函数参数结构,获取模块中的函数指针:

    typedef NTSTATUS(NTAPI *LPFN_NTWOW64READVIRTUALMEMORY64)(
    	IN  HANDLE   ProcessHandle,
    	IN  ULONG64  BaseAddress,
    	OUT PVOID    BufferData,
    	IN  ULONG64  BufferLength,
    	OUT PULONG64 ReturnLength OPTIONAL);
    
    
    typedef NTSTATUS(NTAPI *LPFN_NTWOW64WRITEVIRTUALMEMORY64)(
    	IN  HANDLE   ProcessHandle,
    	IN  ULONG64  BaseAddress,
    	OUT PVOID    BufferData,
    	IN  ULONG64  BufferLength,
    	OUT PULONG64 ReturnLength OPTIONAL);
    
    
    NtdllModuleBase = GetModuleHandle(L"Ntdll.dll");
    	if (NtdllModuleBase == NULL)
    	{
    		return FALSE;
    	}
    	
    	__NtWow64ReadVirtualMemory64 = (LPFN_NTWOW64READVIRTUALMEMORY64)GetProcAddress(NtdllModuleBase,
    		"NtWow64ReadVirtualMemory64");
    
    	__NtWow64WriteVirtualMemory64 = (LPFN_NTWOW64WRITEVIRTUALMEMORY64)GetProcAddress(NtdllModuleBase,
    		"NtWow64WriteVirtualMemory64");
    

      2.获取进程ID和64进程中想要读写处的地址,调用函数读写目标进程内存

    			NTSTATUS Status = __NtWow64ReadVirtualMemory64(ProcessHandle,
    				BaseAddress, BufferData, BufferLength, &ReturnLength);
    			if (NT_SUCCESS(Status))
    			{
    				printf("%s
    ", BufferData);
    				ZeroMemory(BufferData, BufferLength);
    				memcpy(BufferData, "LIUDADA", strlen("LIUDADA"));
    				__NtWow64WriteVirtualMemory64(ProcessHandle,
    					BaseAddress, BufferData,  strlen("LIUDADA")+1, (PULONG64)&ReturnLength);
    				
    			}
    

      

  • 相关阅读:
    View载入具体解释
    七、备忘录模式Memento(行为型模式)
    排序算法之直接插入排序
    IOS
    Matlab得到二值图像中最大连通区域
    MVC模式利用xib文件定制collectionCell
    五大算法思想—贪心算法
    jQuery鼠标悬停显示提示信息窗体
    J2EE基础总结(5)——EJB
    iOS 打开扬声器以及插入耳机的操作
  • 原文地址:https://www.cnblogs.com/lsh123/p/7445296.html
Copyright © 2011-2022 走看看