Написание сканера памяти на C # - PullRequest
0 голосов
/ 31 декабря 2011

Я пытаюсь сделать сканер памяти в C #. Я слышал, что мне нужны функции API WriteProcessMemory и ReadProcessMemory.

Я назвал их:

 [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 Ответ

2 голосов
/ 31 декабря 2011

Да, вот так:

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

Вы должны проверить, правда ли успех.Если нет, то вы ничего не прочитали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...