Вопрос Защита в реальном времени


Spectrum735

Просветленный
Просветленный
Регистрация
21.02.2019
Сообщения
271
Репутация
146
В юзермоде мне кажется врядли так можно, не делая уже хуков нужных функций в самом процессе.
выходит нужно инжектить .dll в процессы? Это уже руткит какой-то)
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 098
Репутация
8 221
выходит нужно инжектить .dll в процессы? Это уже руткит какой-то)
Да если хочешь в юзермоде сделать поведенческий детект, тогда тебе нужно что-то такое:User-mode rootkit for windows: Скрытие файлов и процессов от пользователя

Таким образом, ты можешь захукать нужные функции в каждом процессе и уже понимать что делает именно конкретный процесс.

И-да, это уже руткит.)
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 098
Репутация
8 221
Может кому пригодится, интересный код, как определить какой процесс подгрузил DLL:

C:
#include <Windows.h>
#include <iostream>

BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
    switch (ul_reason_for_call) {
        case DLL_PROCESS_ATTACH: {
            HANDLE hProcess = nullptr;
            DWORD dwProcessId = 0;
            if (GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, reinterpret_cast<LPCWSTR>(&DllMain), &hProcess)) {
                dwProcessId = GetProcessId(hProcess);
                if (dwProcessId != 0) {
                    WCHAR szProcessName[MAX_PATH];
                    DWORD dwSize = MAX_PATH;
                    if (QueryFullProcessImageName(hProcess, 0, szProcessName, &dwSize)) {
                        // Извлекаем имя файла из полного пути
                        WCHAR *pszFileName = wcsrchr(szProcessName, L'\\');
                        if (pszFileName != nullptr) {
                            std::wcout << L"The process ID loading this DLL is: " << dwProcessId << std::endl;
                            std::wcout << L"The process name is: " << pszFileName + 1 << std::endl;
                        } else {
                            std::cerr << "Failed to extract process name." << std::endl;
                        }
                    } else {
                        std::cerr << "Failed to get process image name." << std::endl;
                    }
                } else {
                    std::cerr << "Failed to get the process ID." << std::endl;
                }
                CloseHandle(hProcess);
            }
            break;
        }
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
            break;
    }
    return TRUE;
}
 

Spectrum735

Просветленный
Просветленный
Регистрация
21.02.2019
Сообщения
271
Репутация
146
@X-Shar, Я нашел простое решение, можно подписаться на события WMI
 
Верх Низ