Захват памяти из другого процесса
-
21-09-2019 - |
Вопрос
допустим, в Windows я использовал внедрение DLL для входа в другой процесс.Я также сделал несколько скриншотов памяти процесса, в который я ввел, и знаю расположение данных, которые я хочу извлечь.Допустим, в другом процессе есть данные по адресу 0xaaaaaaaa, которые содержат определенное значение.Как мне извлечь это значение из этого процесса, чтобы я мог использовать его в своем инъекционном приложении?Поскольку я вовлечен в процесс, могу ли я просто использовать что-то вроде memcpy?
memcpy(value, 0xaaaaaaaa, 10);
Я предполагаю, что это, вероятно, более сложное дело, чем это?
Редактировать:Что касается ответов ниже, я не вижу, как WM_COPYDATA помогает мне, поскольку это для отправки данных в другое приложение, а не для извлечения данных ИЗ существующего приложения.
Решение
Вы должны быть в состоянии использовать ReadProcessMemory Читать processmemory функция.
Смотрите также Как написать программу на Perl, Python или Ruby для изменения памяти другого процесса в Windows?
Другие советы
В Windows каждый процесс обращается к своей собственной памяти.Это означает, что вы не можете сделать что-то вроде memcpy, имеющего два указателя, которые указывают на память двух разных процессов.
Вы можете рассмотреть любой вариант межпроцессного взаимодействия:файлы с отображением в память, сокеты, именованные каналы, сообщения окна событий.
Вот более подробная информация о МПК
Попробуйте WM_COPYDATA и воспользуйтесь справкой из MSDN, относящейся к нему.
Следующие механизмы IPC поддерживаются Windows:
Буфер обмена
КОМ
Копирование данных
DDE
Сопоставление файлов
Почтовые слоты
Трубы
RPC
Розетки для окон
более подробная информация здесь Межпроцессные коммуникации
в вашем случае я бы использовал Сообщение WM_COPYDATA