Страницы

Поиск по вопросам

среда, 10 июля 2019 г.

dll инъекция в windows 8

Здравствуйте! Я так понял, что начиная с 8-ки dll инъекции нельзя делать, а есть этому альтернатива?


Ответ

Все отлично делается! И на 8 и на 8.1 и на 10. Если нужен пример простой инъекции кода, могу помочь с кодом (обновлю сообщение).
UPD
Способов загрузки dll превеликое множество, прочитать о них можно в книге Рихтера, вот один из простейших (работает на win8 100%, только для x86 приложений!!!):
bool load(const tstring & dllPath, const tstring & processName) { // Получение дескриптора процесса HANDLE process = OpenProcess(PROCESS_ALL_ACCESS, false, t_proc.getID(processName)); if (process == NULL) {
msg_er_full; return false; } //Из модуля kernel32.dll этого же процесса вытягиваем адрес функции LoadLibraryA LPVOID fp = (LPVOID)GetProcAddress(GetModuleHandleA("kernel32.dll"), "LoadLibraryA"); if (fp == NULL) {
msg_er_full;
if (!CloseHandle(process))msg_er_full;
return false; } // Выделение участка памяти размером dll_name для последующей записи в память процесса. LPVOID alloc{}; if ((alloc = VirtualAllocEx(process, 0, dllPath.size(), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE)) == NULL) {
msg_er_full;
if (!CloseHandle(process))msg_er_full;
return false; } // Запись Dll в память if (WriteProcessMemory(process, alloc, dllPath.c_str(), dllPath.size(), 0) == NULL) {
msg_er_full;
if (!CloseHandle(process))msg_er_full;
return false; } // Создание "удаленного" потока в адресном пространстве открытого процесса и последующая подгрузка нашей Dll if (CreateRemoteThread(process, 0, 0, (LPTHREAD_START_ROUTINE)fp, alloc, 0, 0) == NULL) {
msg_er_full;
if (!CloseHandle(process))msg_er_full;
return false; }
return true; }

Комментариев нет:

Отправить комментарий