Как читать виртуальную память с помощью winapi? Задание на winapi: Разработать DLL с функцией, выполняющей поиск по всей виртуальной памяти заданной строки и замену ее на другую строку.
Как можно читать всю виртуальную память и при искать в ней строку, а потом ещё и заменить её? Или хотя бы как можно получить доступ ко всей виртуальной памяти процесса и заменить в нём строку? Тогда можно dll внедрить во все процессы. И в них она выполнит всю работу.

21 Авг 2019 в 06:50
362 +1
0
Ответы
1

Для того чтобы читать виртуальную память процесса и заменять в ней строки, можно использовать функции WinAPI, такие как ReadProcessMemory и WriteProcessMemory.

Пример кода для создания DLL с функцией поиска и замены строки в виртуальной памяти:

#include <windows.h>
BOOL ReplaceStringInMemory(HANDLE hProcess, LPCVOID lpSearchString, LPCVOID lpReplaceString, SIZE_T dwSearchStringLength, SIZE_T dwReplaceStringLength)
{
MEMORY_BASIC_INFORMATION memInfo;
LPVOID lpMemAddress = 0;
while (VirtualQueryEx(hProcess, lpMemAddress, &memInfo, sizeof(memInfo)))
{
if (memInfo.State == MEM_COMMIT && (memInfo.Type == MEM_MAPPED || memInfo.Type == MEM_PRIVATE))
{
LPVOID lpMemBuffer = VirtualAlloc(NULL, memInfo.RegionSize, MEM_COMMIT, PAGE_READWRITE);
if (!lpMemBuffer)
{
return FALSE;
}
SIZE_T bytesRead;
ReadProcessMemory(hProcess, lpMemAddress, lpMemBuffer, memInfo.RegionSize, &bytesRead);
for (DWORD i = 0; i < memInfo.RegionSize - dwSearchStringLength; i++)
{
if (memcmp((BYTE*)lpMemBuffer + i, lpSearchString, dwSearchStringLength) == 0)
{
WriteProcessMemory(hProcess, (LPVOID)((DWORD)lpMemAddress + i), lpReplaceString, dwReplaceStringLength, NULL);
}
}
VirtualFree(lpMemBuffer, 0, MEM_RELEASE);
}
lpMemAddress = (LPVOID)((DWORD)lpMemAddress + memInfo.RegionSize);
}
return TRUE;
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
ReplaceStringInMemory(GetCurrentProcess(), "search_string", "replace_string", strlen("search_string"), strlen("replace_string"));
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

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

20 Апр в 13:12
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 83 852 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир