Как найти начальный адрес приложения для редактирования процесса в памяти?

#c# #winapi #memory-editing

#c# #winapi #редактирование памяти

Вопрос:

Я хочу знать, как найти действительные адреса приложения от начала до конца, потому что я хочу знать, как редактировать память приложения, например Notepad. Должен ли я декомпилировать приложение и просматривать ассемблерный или машинный код. Потому что я вижу, что люди всегда создают моды для таких приложений, как minesweeper и некоторые компьютерные видеоигры.

P.S. Я буду использовать язык программирования C # и функции Win32 для выполнения редактирования памяти.

Комментарии:

1. вау. ваш вопрос все еще актуален для меня в 2019 году 😀 Приветствую.

Ответ №1:

Чтобы найти начальный и конечный адреса для процесса

 Process proc = Process.GetCurrentProcess();
IntPtr startOffset = proc.MainModule.BaseAddress; 
IntPtr endOffset = IntPtr.Add(startOffset ,proc.MainModule.ModuleMemorySize); 
  

http://www.ownedcore.com это хороший ресурс для изучения редактирования памяти.

Комментарии:

1. @Loman В документации говорится Gets the amount of memory that is required to load the module . Это не то, что вы хотите отсканировать при сканировании приложения. Смотрите мой ответ.

Ответ №2:

Сначала вы используете функцию GetSystemInfo Win32API, чтобы получить минимальный и максимальный виртуальные адреса, доступные приложениям. Затем вы просматриваете фрагменты памяти, начиная с минимального адреса и заканчивая максимальным доступным адресом. Но вы пропускаете (вы не сканируете их) все фрагменты, которые вы не можете прочитать. Вот сообщение на CodeProject, которое показывает, что: https://www.codeproject.com/articles/716227/csharp-how-to-scan-a-process-memory