#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