DLL inject заменить строку с известным смещением C ++

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

Из IDA: .text: 0051CA30 push 16D8h

Из REC Decompile: _push (5848);

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

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


person Brent Smith    schedule 11.08.2013    source источник
comment
Есть ли причина, по которой вам нужно внедрять DLL вместо записи в ее память с помощью _ 1_?   -  person Jerry Coffin    schedule 11.08.2013
comment
Мне не нужно вводить, но он должен быть в той же dll, что и другие мои внедренные функции.   -  person Brent Smith    schedule 11.08.2013


Ответы (1)


Вы можете использовать следующий фрагмент во внедренной 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);

Примечание. Длина новой строки должна быть меньше или равна исходной.

person Roland    schedule 24.10.2015
comment
Если на той же странице, что и строка, может быть код (некоторые компиляторы помещают константы только для чтения в сегмент кода), используйте PAGE_EXECUTE_READWRITE, в случае, если другой поток выполняет код, пока вы исправляете строку. - person Michael Karcher; 24.10.2015