Перейти к содержанию
Авторизация  
writeer

c# ReadProcessMemory

Рекомендуемые сообщения

пытаюсь прочить int из  процесса но всегда буфер с байтами пустой

Спойлер

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using HackProcess;

namespace MemoryTest
{
    class Program
    {
        static Process process;

        static void Find(string name)
        {
            var plist = Process.GetProcesses();
            foreach (var Pprocess in plist)
            {
                if (Pprocess.ProcessName == name)
                {
                    process = Process.GetProcessById(Pprocess.Id);
                    return;
                }
            }
        }
        static void Main(string[] args)
        { 
            Find("test");
            HackP.Setproc(process);
            var add = 0x5591B7E388;
            while (true)
            {
                var iint = HackP.ReadInt(add);
                Console.WriteLine(iint);
                string s = Console.ReadLine();
                if(s == "exit")
                {
                    return;
                }
            }
            
        }
    }
}

 

 

та самая dll"ка

Спойлер

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;

namespace HackProcess
{
    public class HackP
    {
        [DllImport("kernel32.dll", SetLastError = true)]
        public static extern IntPtr OpenProcess(int processAccess, bool bInheritHandle, int processId);

        [DllImport("kernel32.dll", SetLastError = true)]
        static extern bool ReadProcessMemory(IntPtr hProcess,IntPtr lpBaseAddress,[Out] byte[] lpBuffer,int dwSize,out IntPtr lpNumberOfBytesRead);

        static Process Proc;
        static byte[] buffer = new byte[] { };
        static IntPtr handel;

        public static void Setproc(Process proc)
        {
            Proc = proc;
            handel = OpenProcess();
        }

        public static IntPtr OpenProcess()
        {
            return OpenProcess(0x001F0FFF, false, Proc.Id);
        }

        public static IntPtr Read(long addres,int byteread)
        {
            IntPtr bytereads;
            ReadProcessMemory(handel, (IntPtr)addres, buffer, byteread, out bytereads);
            return bytereads;
        }

        public static int ReadInt(long addres)
        {
            Read(addres, 4);
            if (buffer.Length != 0)
            {
                return BitConverter.ToInt32(buffer, 0);
            } else { return 0; }
            
        }

    }
}

 

 

Изменено пользователем Xipho
Большие куски кода необходимо не только выделять специальным тегом, но и убирать под спойлер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ты создаешь буфер нулевой длины. Выдели хотя бы 4 байта, и посмотри, что будет. Ну и в целом код бы переписать. Что будет, если ты на основе этого кода параллельно будет считывать значения из других адресов? У тебя буфер статичный, и он один. И постоянно будет перетираться, это не дело.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
4 часа назад, Xipho сказал:

Ты создаешь буфер нулевой длины. Выдели хотя бы 4 байта, и посмотри, что будет. Ну и в целом код бы переписать. Что будет, если ты на основе этого кода параллельно будет считывать значения из других адресов? У тебя буфер статичный, и он один. И постоянно будет перетираться, это не дело.

Спасибо помогло.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

×

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.