用 C# 编写内存扫描程序

本文关键字:扫描 程序 写内存 | 更新日期: 2023-09-27 18:19:13

我正在尝试用 C# 制作内存扫描器。我听说我需要API函数WriteProcessMemoryReadProcessMemory

我称他们为:

 [DllImport("kernel32.dll")]
    public static extern bool ReadProcessMemory(
        IntPtr hProcess,
        IntPtr lpBaseAddress,
        byte[] lpBuffer,
        UInt32 nSize,
        ref UInt32 lpNumberOfBytesRead
    );
    [DllImport("kernel32.dll", SetLastError = true)]
    static extern bool WriteProcessMemory(
        IntPtr hProcess, 
        IntPtr lpBaseAddress,
        byte[] lpBuffer,
        uint nSize,
        out UIntPtr lpNumberOfBytesWritten);

我在谷歌上找到的所有内存扫描仪的例子都很难理解。我读过很多文章,说要找到值地址,您需要在任何内存字节进行搜索。现在我需要让程序打开从内存读取和写入的过程。

我可以用GetProcessByName做到这一点吗?

用 C# 编写内存扫描程序

是的,像这样:

Process[] process = Process.GetProcessesByName("cmd");
byte[] memory = new byte[255];
uint bytesRead =0;
bool succes = ReadProcessMemory(
             process[0].Handle,  
             process[0].MainModule.BaseAddress , 
             memory , 
             (uint) memory.Length , 
             ref bytesRead);

你必须检查成功是否属实。如果没有,你什么也没读过。