Как мне получить базовый адрес процесса и отредактировать этот указатель вместе с ним? - PullRequest
0 голосов
/ 16 февраля 2020

Я думал, что базовые адреса там, где это должно быть похоже на 0x00 , но когда я использую кнопку, чтобы дать мне базовый адрес, я получаю это 1966604288 . Я использую Vam Memory DLL. Проблема также может быть в том, что я не знаю, как использовать ida для получения адресов памяти. Примечание: я пробовал kernel32.dll и user32.dll






        public IntPtr GetModuleBaseAddress(string processName, string moduleName)
        {

            Process process;

            try
            {
                process = Process.GetProcessesByName(processName)[0];
            }

            catch (IndexOutOfRangeException)
            {

                throw new ArgumentException($"No process with name {processName} is currently running");
            }



            var module = process.Modules.Cast<ProcessModule>().SingleOrDefault(m => string.Equals(m.ModuleName, moduleName, StringComparison.OrdinalIgnoreCase));


            return module?.BaseAddress ?? IntPtr.Zero;
        }






        private void button3_Click(object sender, EventArgs e)
        {
            vam.processName = "the process im using";
            IntPtr baseaddy = GetModuleBaseAddress("the process im using", "user32.dll");
            int addy = 0xFD1117;
            vam.WriteInt32((IntPtr)baseaddy + addy, 1000);
            richTextBox1.Text = baseaddy.ToString();
        }
    }
}



Это не весь мой код, но этого должно быть достаточно .

1 Ответ

1 голос
/ 16 февраля 2020

Адрес, начинающийся с 0x , представляет собой значение Hex , на которое вы ссылаетесь, которое можно получить с помощью суффикса, например BaseAddress.ToString("x8")

Выходные данные : Базовый адрес основного модуля процесса: 0x00a80000


Фрагмент : Извлекает базовый адрес каждого модуля, связанного с Блокнотом Обработка и печать Основные модули Базовый адрес в шестнадцатеричном представлении

using (Process myProcess = new Process())
{
   ProcessStartInfo myProcessStartInfo = new ProcessStartInfo("notepad.exe");
   myProcess.StartInfo = myProcessStartInfo;
   myProcess.Start();
   System.Threading.Thread.Sleep(1000);
   ProcessModule myProcessModule;

   Console.WriteLine("Base addresses of the modules associated "+"with 'notepad' are:");
   for (int i = 0; i < myProcess.Modules.Count; i++)
   {
      myProcessModule = myProcess.Modules[i];
      Console.WriteLine(myProcessModule.ModuleName + " : " + (IntPtr)myProcessModule.BaseAddress);
   }

   Console.WriteLine("The process's main module's base address is: 0x"+myProcess.MainModule.BaseAddress.ToString("x8"));
   myProcess.CloseMainWindow();
}

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