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

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

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


person Daniel Lopez    schedule 10.11.2011    source источник
comment
Вот это да. ваш вопрос все еще актуален для меня в 2019 году :-D Ура.   -  person v1h5    schedule 06.02.2019


Ответы (2)


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

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

http://www.ownedcore.com – это хороший ресурс, где можно узнать о редактировании памяти.

person Loman    schedule 10.11.2011
comment
Именно то, что я искал! Спасибо - person Daniel Lopez; 11.11.2011
comment
@Loman В документации написано Gets the amount of memory that is required to load the module. Это не то, что вы хотите сканировать при сканировании приложения. Смотрите мой ответ. - person KulaGGin; 19.06.2020

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

person KulaGGin    schedule 19.06.2020