DLL инъекция с C ++ - PullRequest
       44

DLL инъекция с C ++

0 голосов
/ 06 марта 2020
#include <Windows.h>
HANDLE h = OpenProcess(PROCESS_CREATE_THREAD, FALSE, 34808); //Creating a remote thread 
int main() {
    LPVOID path = "MessageBoxDLL.dll";
    CreateRemoteThread(h, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, path, 0, NULL);
}

Когда я пытаюсь запустить свой код, он возвращает ошибку "не могу преобразовать из константного символа в lpvoid". Я немного растерялся из-за того, что он не позволяет мне дать ему пустой путь или даже почему ему нужно преобразовать мое значение , Я играл немного больше, но не смог найти жизнеспособных решений. https://i.stack.imgur.com/Ne0bp.png <--- Изображение ошибки </p>

1 Ответ

1 голос
/ 06 марта 2020

Почему конвертируется в LPVOID? Потому что ты сказал это. Давайте обрежем это и заметим, что ошибка остается:

int main() {
    void* x = "characters";
}

ошибка C2440: «инициализация»: невозможно преобразовать из «const char [11]» в «void *»

Я хочу быть ясным, я просто отвечаю на вопрос. Я не претендую на остальную часть кода.

Обычно приведение к старому стилю считается плохой практикой, но для функции старого стиля, которая ожидает void *, go для нее:

#include <Windows.h>
int main() {
    const char *path = "MessageBoxDLL.dll";
    HANDLE h = OpenProcess(PROCESS_CREATE_THREAD, FALSE, 34808); //Creating a remote thread 
    CreateRemoteThread(h, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, (LPVOID)path, 0, NULL);
}

Поскольку функция не выполняет никакой проверки типов, вы сами можете передать ей правильные аргументы. Документация и пример кода должны помочь. Преобразование в void * имеет смысл для функции потока ОС, поскольку ОС не знает, что вы собираетесь передать.

...