идентифицировать ввод кода памяти путем сброса памяти процесса или dll

Чтобы идентифицировать внедрение кода памяти (в системах Windows), я хочу хэшировать память всех процессов в системе, например, если память calc.exe всегда x, а теперь это y, я знаю, что кто-то впрыскивается в код calc.exe.

1: Правильно ли это мышление? Какая часть памяти процесса всегда остается неизменной, а какая часть изменяется?

2: Доза dll имеет отдельную память, или она в памяти exe? Другими словами, я могу сгенерировать хэш для памяти DLL?

3: Как я могу сбросить память процесса или DLL в C ++?

1

Решение

Код постоянно внедряется в процессы при запуске Windows.

Одним из примеров являются DLL с задержкой загрузки. Когда процесс запускается, загружаются только основные библиотеки DLL. Когда реализуются определенные функции, код сначала загружает новые DLL (код) с диска, а затем выполняет их.

Другой пример — приложения, управляемые .NET. Большая часть кода находится в виде некомпилированного кода на диске. Когда необходимо запустить новые части приложения, среда выполнения .NET загружает некомпилированный код, компилирует его (он же JIT) и затем выполняет его.

Проблема, которую вы пытаетесь решить, стоит, но чрезвычайно сложна. Сама ОС пытается решить эту проблему, чтобы защитить ваши процессы.

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

Удачи.

Или, может быть, у вас есть более конкретная проблема, которую вы пытаетесь решить?

3

Другие решения

1) Идея хорошая. Но пока процесс выполняется, они меняют свою память (или ничего не делают), поэтому он не будет работать. Что вы могли бы сделать, это хэшировать часть кода памяти.

2) Нет, DLL — это библиотеки, связанные с вашим кодом, а не отдельный процесс. Они просто загружаются динамически, а не статически (http://msdn.microsoft.com/en-us/library/windows/desktop/ms681914%28v=vs.85%29.aspx)

3) Обычно ваша ОС запрещает вам доступ к памяти соседних процессов. Если это позволит вашему процессу, тогда вредоносное ПО будет очень легко распространяться, и ваша система будет очень нестабильной, так как один сбойный процесс может привести к сбою всех остальных. Так что делать такие свалки будет очень и очень сложно! Но если у вашего процесса есть нужные привилегии, вы можете взглянуть на ReadProcessMemory ()

1

Я только что сделал что-то подобное, я в основном c # эти сценарии:

http://www.exploit-monday.com/2012/03/powershell-live-memory-analysis-tools.html

0
По вопросам рекламы [email protected]