gpt4 book ai didi

c# - 64 位 ReadProcessMemory 访问被拒绝

转载 作者:太空宇宙 更新时间:2023-11-03 12:43:17 25 4
gpt4 key购买 nike

我试过使用 Process.EnterDebugMode() 运行它,但它也不起作用。

我想读出Notepad-memory但我不知道如何访问它,或者64位系统是否有问题。

这是我所做的:

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Text;

public class MemoryRead
{

[DllImport("kernel32.dll")]
static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);

[DllImport("kernel32.dll")]
static extern bool ReadProcessMemory(int hProcess, Int64 lpBaseAddress, byte[] buffer, int size, ref int lpNumberOfBytesRead);

[DllImport("kernel32.dll")]
static extern bool CloseHandle(IntPtr hObject);

static void Main(string[] args)
{
var pid = 10956; //notepad.exe
var processHandle = OpenProcess(0x10, false, pid);

byte[] buffer = new byte[24];
int bytesRead = 0;
ReadProcessMemory((int)processHandle, 0x21106B35770, buffer, buffer.Length, ref bytesRead); //0x21106B35770 is the address where "hello world" is written in notepad

Console.WriteLine(Encoding.Unicode.GetString(buffer) +
" (" + bytesRead.ToString() + "bytes)");
Console.ReadLine();
CloseHandle(processHandle);

Console.ReadLine();
}
}

最佳答案

您的 ReadProcessMemory 的 PInvoke 声明是不正确的(虽然它应该在 32 位系统上工作)。

从这个函数的原生声明可以看出

BOOL WINAPI ReadProcessMemory(
_In_ HANDLE hProcess,
_In_ LPCVOID lpBaseAddress,
_Out_ LPVOID lpBuffer,
_In_ SIZE_T nSize,
_Out_ SIZE_T *lpNumberOfBytesRead
);

它的第一个参数是HANDLEit is一个 PVOID:

A pointer to any type.

This type is declared in WinNT.h as follows:

typedef void *PVOID;

并且指向 64 位进程中任何内容的指针都是 64 位值 - IntPtr .

sizelpNumberOfBytesRead 参数基本上相同 - 它们在 64 位进程中也是 64 位的。

因此你的声明应该是这样的:

[[DllImport("kernel32.dll", SetLastError = true)]]
[return: MarshalAs(UnmanagedType.Bool)]
static extern Boolean ReadProcessMemory(
[In] IntPtr hProcess,
[In] IntPtr lpBaseAddress,
[Out] Byte[] lpBuffer,
[In] UIntPtr nSize,
[Out] out UIntPtr lpNumberOfBytesRead
);

附注:还有一点无耻的 self 推销——如果你不得不经常使用 PInvoke,那么有一个 few good recommendations我学到了很多东西。

关于c# - 64 位 ReadProcessMemory 访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38160335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com