сборка — DLL-инъекция заменяет строку с известным смещением переполнения стека

Простой вопрос, я не так хорош с C ++ или Windows API, но мне удалось написать DLL для инъекций. По сути, у меня есть известное смещение памяти строки, которую я хотел бы заменить.

Из МАР:
.text: 0051CA30 push 16D8h

От REC декомпилировать:
_push (5848);

5848 или 16D8h — это не что иное, как значение, считанное из файла. Все, что я хочу сделать, это перехватить смещение и напечатать свой собственный текст. Это должно быть очень просто, но я не могу понять это на всю жизнь, и все, что я пытаюсь, просто продолжает сбивать программу. Замена текста в файле, к сожалению, не вариант, так как его легко заменить и использовать для обмана.

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

0

Решение

Вы можете использовать следующий фрагмент в вашей внедренной DLL, если вы хотите заменить строку в целевом процессе.

char* buffer = reinterpret_cast<char*>(base + 0x16D8);
size_t length = strlen(buffer) + 1;

char myStr[length] = "...";

DWORD oldProtect;
VirtualProtect(buffer, length, PAGE_EXECUTE_READWRITE, &oldProtect);
memcpy(buffer, myStr, length);
VirtualProtect(buffer, length, oldProtect, nullptr);

Замечания: Длина новой строки должна быть меньше или равна оригинальной.

0

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

Других решений пока нет …

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