CreateRemoteThread, WriteProcessMemory, VirtualAllocEx - зачем их использовать? - PullRequest
0 голосов
/ 15 ноября 2011

Недавно я читал статьи о внедрении DLL и довольно хорошо их понимаю.

Однако я не понимаю, почему были реализованы такие API, как CreateRemoteThread, WriteProcessMemory (для возможности записи в память другого процесса) и VirtualAllocEx (для возможности выделения памяти в контексте другого процесса). во-первых.

Что изначально требовалось для таких API? Просто любопытно.

1 Ответ

4 голосов
/ 15 ноября 2011

WriteProcessMemory был создан для отладчиков ring3, которым необходимо безопасно записывать память процесса, чаще всего для INT 3 точек останова или пользовательских изменений памяти.

в том же ключе, CreateRemoteThread также можно использовать для отладки, однако MSDN может рассказать нам о CreateRemoteThread немного больше:

Обычно эта функция используется для добавления потока в процесс. это отлаживается, чтобы сделать перерыв. Тем не менее, это использование не рекомендуется, потому что лишняя нить сбивает с толку человека отладка приложения и есть несколько побочных эффектов от использования эта техника:

  • Преобразует однопоточные приложения в многопоточные приложения.
  • Изменяет временные параметры и расположение памяти процесс.
  • В результате вызывается точка входа каждой DLL в процесс.

IIRC, CreateRemoteThread также используется отладчиками для перехвата собственных обработчиков ожиданий приложения, обычно устанавливаемых SetExceptionHandler, что требует вызова из целевого процесса, поскольку обработчик хранится в PEB.

VirtualAllocEx - это то, как работает система виртуальной памяти Windows, ей требуется контекст для выделения, будь то текущий процесс, дочерний процесс или удаленный процесс. VirtualAlloc на самом деле является не более чем проходом через оболочку варианта Ex, он просто передает специальную константу, которая указывает, что должен использоваться дескриптор процесса вызывающего.

...