Инъекция DLL в свой процесс C++

224
01 июня 2018, 02:00

Учу С++. Интересен способ инъекции DLL в свой процесс. Нашёл библиотеку смотреть на codepad, делает Inject в сторонний процесс, посредством вызова CreateProcess

 CreateProcessW(NULL, Path, NULL, NULL, FALSE, CREATE_DEFAULT_ERROR_MODE | CREATE_SUSPENDED, NULL, NULL, &si, &pi);
 if (ok)
            {
                DbgPrint("CreateProcessW ok, %d", pi.dwProcessId);
                ok = (NO_ERROR == AcInjectDll(&pi, CREATE_SUSPENDED, TRUE));
                //AcInjectDll(&pi, CREATE_SUSPENDED, TRUE);
                DbgPrint("AcInjectDll %s", ok ? "ok" : "FAIL");
                CloseHandle(pi.hThread);
                CloseHandle(pi.hProcess);
            }
            else
                DbgPrint("CreateProcessW FAIL");

Но, функция после отработки отдает fail. Конечно, при этом никакой DLL'ки не прогрузилось, а поток остался зависшим у вызываемого процесса.

Где может быть ошибка? За ранее спасибо!

Answer 1

Чтобы загрузить DLL в свой процесс, не нужна никакая "инъекция". Для этого достаточно использовать функцию LoadLibrary.

Об "инъекции DLL" говорят, когда нужно заставить чужой процесс загрузить вашу DLL. Для этих целей нельзя использовать CreateProcess (эта функция делает только то, что написано - создает процесс). Это можно сделать несколькими способами, например с использованием WriteProcessMemory и CreateRemoteThread или RtlRemoteCall.

READ ALSO
Как преобразовать тип bool в enum?

Как преобразовать тип bool в enum?

Есть перечисление:

257
Можно ли как-либо обратиться к терминалу на mac os при помощи языка c++

Можно ли как-либо обратиться к терминалу на mac os при помощи языка c++

Например ввести команду ls, и считать список файлов в директории

183
Добавление и удаление значений в QVector

Добавление и удаление значений в QVector

Мне нужно написать функции которые добавляют и удаляют значения в QVector

206