Перейти к содержанию

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

пытаюсь прочить 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 байта, и посмотри, что будет. Ну и в целом код бы переписать. Что будет, если ты на основе этого кода параллельно будет считывать значения из других адресов? У тебя буфер статичный, и он один. И постоянно будет перетираться, это не дело.

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

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

×
×
  • Создать...

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

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