Путь к драйверу

Тема в разделе "WASM.NT.KERNEL", создана пользователем Lord_De_Seis, 3 дек 2006.

  1. Lord_De_Seis

    Lord_De_Seis New Member

    Публикаций:
    0
    Регистрация:
    18 авг 2005
    Сообщения:
    55
    Доброго времени суток!
    Примерно такая тема уже как то поднималась как то, но всё же не совсем та....
    Зная адресс внутри драйвера(например адресс обработчика какой нить апи) можно получить информацию об этом драйвере(например ПОЛНЫЙ ПУТЬ К ФАЙЛУ), например вызовом (ZwQuerySystemInformation с классом SystemModuleInformation) и существуют программы реализующие эту технологию (например AVZ)

    Вопрос: А из каких структур такая информация может быть получена?
     
  2. fr0b-p

    fr0b-p New Member

    Публикаций:
    0
    Регистрация:
    1 окт 2006
    Сообщения:
    118
    google: PsLoadedModuleList + LDR_DATA_TABLE_ENTRY
     
  3. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    ну так в чём проблема, сам же написал как) вызывай себе ZwQuerySystemInformation с классом SystemModuleInformation, и смотри, если адресс будет больше, чем базовый_адресс_модуля, и меньше, чем базовый_адресс_модуля + его_размер, значит нужная ф-ция находится внутри него
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Cr4sh
    Он имеет ввиду откуда ZwQuerySystemInformation берет эту информацию.
     
  5. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    n0name, да действительно... сорри, невнимательно читал)
     
  6. Lord_De_Seis

    Lord_De_Seis New Member

    Публикаций:
    0
    Регистрация:
    18 авг 2005
    Сообщения:
    55
    2 fr0b-p
    БИГ сэнкс, исчерпывающий ответ, это всё что было нужно.
    по этому запросу нашлась страница:
    http://alter.org.ua/ru/docs/nt_kernel/procaddr/ - там вся нужная инфа
     
  7. Lord_De_Seis

    Lord_De_Seis New Member

    Публикаций:
    0
    Регистрация:
    18 авг 2005
    Сообщения:
    55
    Только вот ещё какой вопрос, кому нибудь известно зачем ещё и кем используются эти таблицы (которые из LDR_DATA_TABLE_ENTRY'ов) кроме получения информации о драйвере. Как может отразится удаление из этой таблицы структуры какого нибудь драйвера?
     
  8. fr0b-p

    fr0b-p New Member

    Публикаций:
    0
    Регистрация:
    1 окт 2006
    Сообщения:
    118
    для твоих целей все можно :) вариант - выгрузить драйвер
     
  9. Lord_De_Seis

    Lord_De_Seis New Member

    Публикаций:
    0
    Регистрация:
    18 авг 2005
    Сообщения:
    55
    Сори не понял тебя, это ответ на какой вопрос?
     
  10. Guest

    Guest Guest

    Публикаций:
    0
    "Как может отразится удаление из этой таблицы структуры какого нибудь драйвера?" - попробуй, если прокатит сообщи. Для начала оставь структуру как есть а измени только ассоциативные списки, это должно быть менее губительно.
    P.S. http://www.wasm.ru/print.php?article=wayround
     
  11. fr0b-p

    fr0b-p New Member

    Публикаций:
    0
    Регистрация:
    1 окт 2006
    Сообщения:
    118
    >> это ответ на какой вопрос?

    какой из ответов? там их 2 :)

    первый - на многие вопросы что у тя возникнут при дивелопменте совта такова рода ;) а в продакшн такой ахтунг конечно низя... в теории :о)
    второй - возможная альтернатива тому что хошь зделоть ты :)

    статья wayround немного не про то
     
  12. Lord_De_Seis

    Lord_De_Seis New Member

    Публикаций:
    0
    Регистрация:
    18 авг 2005
    Сообщения:
    55
    ладно я поковыряюсь, чуть позже сообщу что получилось.
    конечно не про то, но это не значит что там не оказалось того что было нужно

    единственное остался открытым вопрос: "кто ещё и с какой целью юзает эти таблицы"
     
  13. Guest

    Guest Guest

    Публикаций:
    0
    - вот нашел:
    1. PsaEnumerateProcessModules(HANDLE ProcessHandle, PPROCMOD_ENUM_ROUTINE Callback, PVOID CallbackContext)
    2. ListUserModules(PPEB peb) -> используется в IsModuleLoaded(LPSTR p) -> возвращает PDEBUG_MODULE
    3. LdrpInit(PCONTEXT Context, PVOID SystemArgument1, PVOID SystemArgument2)
    4. RtlpQueryRemoteProcessModules(HANDLE ProcessHandle, PRTL_PROCESS_MODULES ModuleInformation, ULONG Size, PULONG ReturnedSize)
    В основном для перечисления и получения информации о модулях, а также при его создании, по этим данным некоторые функции проверяют присутствие модуля (IsModuleLoaded). На что это конкретно влияет непонятно.
     
  14. Error_Log

    Error_Log New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2005
    Сообщения:
    18
    Адрес:
    Украина
    Lord_De_Seis
    FU rootkit изменяет ассоциативные списки, и ничего, работает.
    ИМХО никак, станет невидимым для ZwQuerySystemInformation и т.п. Только вопрос, нафиг это надо? руткит чтоли пишешь :)
     
  15. fr0b-p

    fr0b-p New Member

    Публикаций:
    0
    Регистрация:
    1 окт 2006
    Сообщения:
    118
    удаленый драйвер руткита мона с успехом задетектить :Р одну функцею перехватываем... Ж) )
     
  16. Lord_De_Seis

    Lord_De_Seis New Member

    Публикаций:
    0
    Регистрация:
    18 авг 2005
    Сообщения:
    55
    Сейчас я пишу не руткит но это вещь мне пригодится.
    Действительно FU удаляет из этих списков.... мне почему то всегда казалось что он удаляет другую структуру (которая из каталога первичного пространства имен)

    и какую такую функцию?
     
  17. Guest

    Guest Guest

    Публикаций:
    0
    прикольно, выходит можно убрать драйвер из списка просто убрав эту структуру (в смысле из ассоциативного списка), без перехватов, а есть софт который нетока обнаружит но еще и удалит такой драйвер?
     
  18. Lord_De_Seis

    Lord_De_Seis New Member

    Публикаций:
    0
    Регистрация:
    18 авг 2005
    Сообщения:
    55
    Вообщем ура... Полуфинал АСМ прошёл, зачёты зданы, сессия сдаётся потиху теперь можно сново дурью помаятся...
    Вообщем со структурой той вот что:
    Код (Text):
    1. typedef struct _LDR_DATA_TABLE_ENTRY {
    2.     LIST_ENTRY     LoadOrder;
    3.     LIST_ENTRY     MemoryOrder;
    4.     LIST_ENTRY     InitializationOrder;
    5.     PVOID          ModuleBaseAddress;
    6.     PVOID          EntryPoint;
    7.     ULONG          ModuleSize;
    8.     UNICODE_STRING FullModuleName;
    9.     UNICODE_STRING ModuleName;
    10.     ULONG          Flags;
    11.     USHORT         LoadCount;
    12.     USHORT         TlsIndex;
    13.     union {
    14.         LIST_ENTRY Hash;
    15.         struct {
    16.             PVOID SectionPointer;
    17.             ULONG CheckSum;
    18.         };
    19.     };
    20.     ULONG   TimeStamp;
    21. } LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;
    1) Есть там поле "FullModuleName" меняй, пиши туда любые гадости - всё работает.
    2) Есть три LIST_ENTRY (LoadOrder, MemoryOrder и InitializationOrder)
    ZwQuerySystemInformation - будет искать драйвер используя LoadOrder...
    а)Но простое удаление из списка LoadOrder влечёт за собой не стабильную работу системы - то есть всё работает но потом запускаешь какой нибудь firefox и....
    б)Удалив структуру из списков LoadOrder, MemoryOrder получим тот же эффект
    в)Удалив из InitializationOrder... сразу BSOD
    3) Но в FU всё палит....
     
  19. Lord_De_Seis

    Lord_De_Seis New Member

    Публикаций:
    0
    Регистрация:
    18 авг 2005
    Сообщения:
    55
    Так может всё таки кто нибудь знает как корректно удалить из списка структуру? И почему нельзя её удалять просто нахаляву?
     
  20. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    а чем 1 не устраивает?
    2а у меня когда то работал стабильно, сейчас уже давно таким не занимался.