C # чтение процесса памяти, возвращающей неправильные значения - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь прочитать некоторые значения из памяти процесса с помощью нескольких указателей / смещений. в моей консоли .Net App, но я получаю неправильные последние 3 значения, я не знаю, что я делаю неправильно, я проверял код и пробовал разные способы в течение нескольких часов, но результаты все еще те же.

Я читаю эти значения из 64-битного процесса

Вот предварительный просмотр моего приложения и чит-движка одновременно (чит-движок содержит правильные значения).

enter image description here

Вот мой код для чтения этих указателей:

        Memory.OpenProcess(Data.Core.ProcessID);
        Data.Core.GameBase = (uint)Memory.BaseAddress("Game.dll");


        uint Num0 = Memory.ReadInt((int)Data.Core.GameBase + 
        (int)Data.Core.Offsets.Animation);
        uint Num1 = Memory.ReadInt((int)Num0 + (int)Data.Core.Offsets.P1);
        uint Num2 = Memory.ReadInt((int)Num1 + (int)Data.Core.Offsets.P2);
        uint Num3 = Memory.ReadInt((int)Num2 + (int)Data.Core.Offsets.P3);
        uint Num4 = Memory.ReadInt((int)Num3 + (int)Data.Core.Offsets.P4);
        uint Num5 = Memory.ReadInt((int)Num4 + (int)Data.Core.Offsets.P5);

Функция ReadInt:

 public uint ReadInt(int iMemoryAddress)
 {
    byte[] bBuffer = new byte[4];
    IntPtr lpNumberOfBytesRead;
    if (Mapi.ReadProcessMemory(this._hReadProcess, (IntPtr) iMemoryAddress, 
    bBuffer, 4U, out lpNumberOfBytesRead) == 0)
    return 0;
    return BitConverter.ToUInt32(bBuffer, 0);
 }

также:

    public uint ReadInt(int Address)
    {
        OpenProcessMemory();
        int BytesRead = 0;
        byte[] Data = new byte[4];
        ReadProcessMemory((int)PHandle, Address, Data, 4, ref BytesRead);
        CloseProcessMemory();
        return BitConverter.ToUInt32(Data, 0);
    }

Смещение enum:

    public enum Offsets : uint
    {
        Animation = 0x1494198,
        P1 = 0x68,
        P2 = 0x70,
        P3 = 0x28,
        P4 = 0x378,
        P5 = 0x522,
    }

Win API:

[DllImport("kernel32.dll")]
public static extern int ReadProcessMemory(IntPtr hProcess, IntPtr 
lpBaseAddress, [In, Out] byte[] bBuffer, uint size, out IntPtr 
lpNumberOfBytesRead);

Я пытался добавить указатели и смещения, используя IntPtr / uint / int / Int32 для каждого Pointer + Offset, но в конце все еще оставались те же странные значения. Я думаю, что я не могу сделать больше, чем это, очевидно ..

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