Перенаправление экспортируемых сервисов ntdll.dll

Тема в разделе "WASM.NT.KERNEL", создана пользователем retmas, 8 фев 2010.

  1. retmas

    retmas New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2005
    Сообщения:
    100
    Господа! Знаком ли кому-нибудь способ перехвата ф-ий ntdll исключая сплайсинг? ntdll мапируется на начальном этапе инициализации ОС, т.к. во всех процессах используется существующий объект-секция. Возможно ли относительно стабильно модифицировать таблицу экспорта в памяти? возможно существуют другие более приятные методы реализации?
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Запостил у себя в блоге:
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Это селектор сегмента данных перезагружается(Ds).
     
  4. retmas

    retmas New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2005
    Сообщения:
    100
    Clerk

    если можно, по-подробнее) и еще я не знаком, к сожалению, я вашим блогом. плз, адрес.
    Это вообще реализуемо на практике? thx
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    retmas
    Конечно реализуемо, никаких проблем не вижу, хотя мне всегда хватало хардварных точек останова. Создаём дескриптор в LDT, селектор его и загружается в регистр Ds. Ставим VEH и захватываем apfn(можно тоже сепшены использовать, сделав не валидным указатель).
     
  6. retmas

    retmas New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2005
    Сообщения:
    100
    спасибо. ваш блог?
    данный метод не работает на AMD64?
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    retmas
    На x64 системные стабы содержат ссылку на верхнюю страницу памяти ?
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Одна проблема возникла:
     
  9. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    retmas
    >данный метод не работает на AMD64?
    Разумеется нет. SharedUserData по-прежнему спроецирована по адресу 0x7FFE0000 во всех процессах (и, таким образом, адресное пространство при использовании метода сократилось бы до 2х ГБ), системные стабы чистые и одинаковые для всех процессоров (см. далее; SharedUserData.SystemCall и SharedUserData.SystemCallReturn содержат нули), да и добавление дескриптора в LDT не поддерживается. (Но, как бы то ни было, метод интересен).

    Код (Text):
    1. ntdll!ZwWaitForSingleObject:
    2. 00000000`7793fef0 4c8bd1          mov     r10,rcx
    3. 00000000`7793fef3 b801000000      mov     eax,1
    4. 00000000`7793fef8 0f05            syscall
    5. 00000000`7793fefa c3              ret
     
  10. retmas

    retmas New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2005
    Сообщения:
    100
    Sol_Ksacap

    ага, я тоже уже глянул, конечно.
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Тестовый пример простой:
    Код (Text):
    1. DS_LIMIT    equ 7FFDFH  ; ..0x7FFDFFFF
    2.  
    3. TABLE_MASK  equ 100B
    4. RPL_MASK    equ 011B
    5.  
    6. DS_SELECTOR equ (8H or RPL_MASK or TABLE_MASK)
    7.  
    8. .data
    9. CallCount   ULONG ?
    10.  
    11. .code
    12. AccessDispatch proc uses esi edi ExceptionPointers:PEXCEPTION_POINTERS
    13. Local BarrierEntry:PVOID, PageSize:ULONG, OldProtect:ULONG
    14.     mov eax,ExceptionPointers
    15.     mov esi,EXCEPTION_POINTERS.ExceptionRecord[eax]
    16.     assume esi:PEXCEPTION_RECORD
    17.     mov edi,EXCEPTION_POINTERS.ContextRecord[eax]
    18.     assume edi:PCONTEXT
    19.     cmp [esi].ExceptionFlags,NULL
    20.     jne Chain
    21.     cmp [esi].ExceptionCode,STATUS_ACCESS_VIOLATION
    22.     je @f
    23.     cmp [esi].ExceptionCode,STATUS_SINGLE_STEP
    24.     jne Chain
    25.     and [edi].regEFlags,NOT(EFLAGS_TF)
    26.     mov [edi].regSegDs,DS_SELECTOR
    27.     inc CallCount
    28.     jmp Continue
    29. @@:
    30. ; [ExceptionInformation]:
    31. ; +0 R/W
    32. ; +4 Line address(-1).
    33.     cmp [esi].ExceptionInformation,ACCESS_TYPE_READ
    34.     mov eax,[esi].ExceptionInformation + 4
    35.     jne Chain
    36.     mov [edi].regSegDs,KGDT_R3_DATA or RPL_MASK
    37.     or [edi].regEFlags,EFLAGS_TF
    38. Continue:
    39.     mov eax,EXCEPTION_CONTINUE_EXECUTION
    40. Exit:
    41.     ret
    42. Chain:
    43.     xor eax,eax
    44.     jmp Exit
    45. AccessDispatch endp
    46.  
    47. Entry proc
    48.     invoke ZwSetLdtEntries, DS_SELECTOR, 0FFDFH, 0C7F200H, 0, 0, 0
    49.     .if !Eax
    50.     invoke RtlAddVectoredExceptionHandler, 1, addr AccessDispatch
    51.     .if !Eax
    52.     mov eax,STATUS_UNSUCCESSFUL
    53.     .else
    54.     push DS_SELECTOR
    55.     pop ds
    56.     invoke ZwYieldExecution ; Break!
    57.     .endif
    58.     .endif
    59.     ret
    60. Entry endp
    61. end Entry
    Блокировка VEH(обсудили с Фрименом в конфе, обработчик всегда находится в начале списка): http://indy-vx.narod.ru/Bin/Barrier.zip
    С остальным проблем нет(apfn etc.).
     
  12. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
  13. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Мм, сори, код меня мало вразумил. Я считал что речь идет о х64, где лимиты сегментов пофигу, вижу только 32 бит код.Кто то внятно объяснит цели и задачи?
     
  14. d2k9

    d2k9 Алексей

    Публикаций:
    0
    Регистрация:
    14 сен 2008
    Сообщения:
    325
    Ну развлекается народ, бывает :)
    Нету хуков в х64 без отключения ПГ и точка.
     
  15. retmas

    retmas New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2005
    Сообщения:
    100
    Хуки системных сервисов в x64 существуют и без отключения PG: mapped image and hook ET
     
  16. d2k9

    d2k9 Алексей

    Публикаций:
    0
    Регистрация:
    14 сен 2008
    Сообщения:
    325
    Мне это ниочём не сказало. Набор слов ;)
    Если есть код устанавливающий хук на какую-либо функцию в ядре на х64 платформе приведите его либо укажите порядок действий для его достижения, иначе баян.
     
  17. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    medstrax1
    Причём тут x64, это совершенно иная архитектура. А этот способ не единственный, который не затранивает изменение кода, есть есчо, но тормознутые и мне не нравятся ;)
     
  18. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Скомпилел нормальный код(пермут., на XP работает).
     
  19. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    retmas
    Можно поподробнее? Никак не получается выполнить сопоставление "hook ET".
     
  20. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Туплю? Выше было про AMD64, че то мой детский мозг отказывается делать различие между x64 и amd64, амд64 какая то новая ох..нная технология? ))))