• Обратная связь: [email protected]

    Наш канал в telegram: https://t.me/ru_sfera

    Группа VK: https://vk.com/rusfera

    Пользователи могут писать на форуме ТОЛЬКО ЧЕРЕЗ 7 ДНЕЙ после регистрации

Информация Фантастические руткиты: И где их найти (часть 1)


offsec

Уважаемый пользователь
Форумчанин
Регистрация
12.11.2023
Сообщения
20
Репутация
17
Вот такой вопрос возник, как в автоматическом режиме узнать смещения _EPROCESS?
Что-то типо такого, не проверял особо
C++:
#include <windows.h>
#include <dbghelp.h>
#pragma comment(lib, "dbghelp.lib")

class ProcessOffsetFinder {
private:
    HANDLE hProcess;
    
public:
    ProcessOffsetFinder() {
        // baza
        SymInitialize(GetCurrentProcess(), NULL, TRUE);
    }

    DWORD64 GetEprocessOffset(const char* memberName) {
        SYMBOL_INFO symbolInfo = { 0 };
        symbolInfo.SizeOfStruct = sizeof(SYMBOL_INFO);
        symbolInfo.MaxNameLen = MAX_SYM_NAME;

        // --> базовый адрес _EPROCESS
        if (!SymFromName(GetCurrentProcess(), "_EPROCESS", &symbolInfo)) {
            printf("Failed to get _EPROCESS: %d\n", GetLastError());
            return 0;
        }

        
        TI_FINDCHILDREN_PARAMS childParams = { 0 };
        ULONG typeId = symbolInfo.TypeIndex;
        
        if (SymGetTypeInfo(GetCurrentProcess(), symbolInfo.ModBase,
                          typeId, TI_GET_CHILDRENCOUNT, &childParams.Count)) {
            childParams.Start = 0;
            
            for (ULONG i = 0; i < childParams.Count; i++) {
                WCHAR* name;
                DWORD offset;
                
                if (SymGetTypeInfo(GetCurrentProcess(), symbolInfo.ModBase,
                                 typeId, TI_GET_OFFSET, &offset)) {
                    printf("%s offset: 0x%x\n", name, offset);
                }
            }
        }
        return 0;
    }

    ~ProcessOffsetFinder() {
        SymCleanup(GetCurrentProcess());
    }
};

int main() {
    ProcessOffsetFinder finder;
    
    
    finder.GetEprocessOffset("UniqueProcessId");
    finder.GetEprocessOffset("ActiveProcessLinks");
    finder.GetEprocessOffset("ImageFileName");
    
    return 0;
}
 
Верх Низ