用C#编写内存扫描器

时间:2011-12-31 17:43:27

标签: c# windows

我正在尝试用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);

我在Google上找到的所有内存扫描仪示例都很难理解。我已经阅读了很多文章说要找到值addr你需要搜索任何内存字节。现在我需要让程序打开从内存中读取和写入的过程。

我可以使用GetProcessByName吗?

1 个答案:

答案 0 :(得分:2)

是的,就像这样:

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);

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