Передача аргумента структуры в CreateThread () и отсутствие получения переменной char * - PullRequest
0 голосов
/ 09 декабря 2018

Я рефлекторно внедряю dll в память других процессов, и мне нужно явно вызвать CreateThread ().Я передаю определенные параметры в DLL, которую я внедряю, используя мою структуру loader_data.У меня есть определенные переменные, которые мне нужно передать, такие как размеры порции памяти и т. Д. Все они успешно доставляются в мою введенную dll, однако при передаче char * в мою структуру она оказывается пустой для моей введенной dll в зарезервированнойпараметр DllMain.

loader_data_t *parameter = new loader_data_t();
... initialize variables.

lpRemoteLibraryBuffer3 = VirtualAllocEx(proc, NULL, sizeof(loader_data_t), MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);

WriteProcessMemory(proc, lpRemoteLibraryBuffer3, parameter, sizeof(loader_data_t), NULL);

Вот как я выделяю пространство для параметра.

typedef struct loader_data_t {
    char *chunk;
    int chunk_size;
    ULONG_PTR reloc_address;
};

И это структура, которую я передаю.Я определенно инициализирую это правильно, я проверил, чтобы убедиться, что все настроено правильно.Однако когда он передается зарезервированному параметру в DllMain, все остальные переменные верны, кроме переменной char * chunk.Я действительно запутался, извините за возможно смутное название.

1 Ответ

0 голосов
/ 09 декабря 2018

Предполагая, что вы установили 'chunk' в коде инициализации данных, указатель в удаленном адресном пространстве будет ссылаться на адрес в локальном процессе.

Самый простой способ обойти это - сделать chunkмассив (вероятно, последний член структуры) и выделить достаточно большой блок для хранения данных чанка.

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

...