от
Я пытаюсь создать инструмент для выполнения
DLL по написанию DLL в памяти запущенного процесса с помощью VirtualAclloc()
API и затем найти смещение точки входа и передать его
CreateRemoteThread()
API, добавив точки входа смещение к базовому адресу
VirtualAlloc
функции. Так как у меня нет никаких аргументов, который должен быть передан
lpStartAddress
при вызове
CreateRemoteThread()
, я
lpParameter
инициализируется как null.

LPVOID lpParameter = NULL;

...
...
thread_handle = CreateRemoteThread(process_handle, NULL, 0, (LPTHREAD_START_ROUTINE)(base_address   offset), lpParameter, 0, NULL);

При компиляции кода я получаю ошибку : Lpvoid в: неизвестный размер" и сообщением "выражение должно быть указателем на тип объекта. Есть ли способ я могу передать значение
lpParameter
как null?

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

2 Ответы

0 голосов
от
base_address   offset
добавляет
offset*sizeof *base_address
байт на
base_address
указатель. Но если тип
base_address
это
LPVOID
тогда
*base_address
не имеет размера, так это ошибки. Взгляните на раздел арифметики указателей в вашей книге с . Из контекста я предполагаю, что вы должны изменить
base_address
быть
char*
вместо
LPVOID
. Или вы могли бы добавить гипс, как это
(LPTHREAD_START_ROUTINE)((char*)base_address   offset)
.
0 голосов
от
В этом случае вы должны следовать ниже процесс: Получить дескриптор функции LoadLibraryA в kernel32.dll Выделить и инициализировать память в адресном пространстве целевого процесса с помощью VirtualAllocEx Напишите путь к DLL, которые вы хотите внедрить в целевом адресном пространстве процессов с помощью записи памяти процесса Инжектировать DLL с помощью CreateRemoteThread и передаете адрес LoadLibraryA как lpStartAddress ниже приведен пример кода:
char* dllPath = "C:\\testdll.dll";

int procID = 16092;
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procID);
if (!hProcess) {
    printf("Error: Process not found.\n");
}

LPVOID lpvLoadLib = (LPVOID)GetProcAddress(GetModuleHandle(L"kernel32.dll"), "LoadLibraryA");       /*address of LoadLibraryA*/
if (!lpvLoadLib) {
    printf("Error: LoadLibraryA not found.\n");
}

LPVOID lpBaseAddress = (LPVOID)VirtualAllocEx(hProcess, NULL, strlen(dllPath) 1, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);     /*Initialize and Allocate memory to zero in target process address space*/
if (!lpBaseAddress) {
    printf("Error: Memory was not allocated.\n");
}
SIZE_T byteswritten;
int result = WriteProcessMemory(hProcess, lpBaseAddress, (LPCVOID)dllPath, strlen(dllPath) 1,
...