Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2020, 20:52   #1
JuniorSrgt
Новичок
Джуниор
 
Регистрация: 22.01.2018
Сообщений: 2
По умолчанию Работа с статическим адресом и указателями

Доброго времени суток написал программу для записи значений в память процесса
Она полностью готова но работает некорректно
Проблема в том, что когда к адресу начинается присвоение указателяи
Адрес просто заменяется указателем
то есть
есть статический адрес 00632388
и указатели 4B8, 19C, 57C, 3B4, 88
И по итогу должно получаться вот так
00632388 + 4B8 = xxxxxx1
xxxxxx1 + 19C = xxxxxx2
xxxxxx2 + 57c = xxxxxx3
xxxxxx3 + 3B4 = xxxxxx4
xxxxxx4 + 88 = xxxxxx5
а по итогу он выдает вместо хххххх5, последнее значение указателя, то есть 88

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices;


namespace test
{
    public partial class Form1 : Form
    {

        [DllImport("kernel32.dll", SetLastError = true)]
        public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int processId);

        [DllImport("kernel32.dll", SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool CloseHandle(IntPtr hObject);

        [DllImport("kernel32.dll", SetLastError = true)]
        public static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out UIntPtr lpNumberOfBytesWritten);

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

        public int pID;
        public Form1()

        {
            InitializeComponent();
            GetProcess("1");
            var addres = 16036510;
            var offsets = new short[] { 0x88, 0x3B4, 0x57C, 0x19C, 0x4B8 };
            ReadBytes(addres, offsets);
            //WriteBytes();   
        }

        public void GetProcess(string name)

        {
            var pList = Process.GetProcesses();
            if (pList.Count() != 0)
            {
                foreach (var process in pList)
                {
                    if (process.ProcessName == name)
                    {
                        pID = process.Id;
                        MessageBox.Show("Proc Fd");
                        return;
                    }
                }
            }
            return;
        }

        public int ReadBytes(int baseAddres, short[] offsets)
        {
            if (pID != 0 && baseAddres != 0 && offsets.Length != 0)
            {
                byte[] buffer = new byte[5];
                var bytesread = new UIntPtr();
               // int bytesread;
                var handle = OpenProcess(0x001F0FFF, false, pID);
                ReadProcessMemory(handle, (IntPtr)baseAddres, buffer, 5, out bytesread);
                for (var i = 0; i < offsets.Length; i++)
                {
                    baseAddres = BitConverter.ToInt32(buffer, 0);
                    baseAddres += offsets[i];
                    ReadProcessMemory(handle, (IntPtr)baseAddres, buffer, 5, out bytesread);
                }
                byte[] accBytes = { 0x71, 0x3D, 0x0A, 0xD7, 0xA3, 0x70, 0xE5, 0x3F };
                var size = 8;
                var dummy = new UIntPtr();
                WriteProcessMemory(handle, (IntPtr)baseAddres, accBytes, (uint)size, out dummy);
                var result = BitConverter.ToInt32(buffer, 0);
                CloseHandle(handle);
                return BitConverter.ToInt32(buffer, 0);
            }
            return 0;
        }

    }
}
JuniorSrgt вне форума Ответить с цитированием
Старый 17.06.2020, 08:21   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Чего чего??
Базовый адрес то в 16х или в 10чной системе задан??
Можете пример с числами дать а не ххххх
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с указателями MaidDragon Паскаль, Turbo Pascal, PascalABC.NET 0 14.05.2020 12:16
работа с указателями compiler90 Visual C++ 1 04.06.2012 18:52
Работа с указателями. Alex Cones Общие вопросы Delphi 8 06.07.2010 18:34
работа со статическим органом управления nevidimka Win Api 3 28.10.2009 08:02
Работа с указателями (C) pixel_ Помощь студентам 1 28.08.2009 14:07