Кто-нибудь копал уже Win8?

Тема в разделе "WASM.WIN32", создана пользователем Flasher, 14 дек 2011.

  1. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Там сервисы вызываются уже напрямик через sysenter. Например если раньше было так:
    Код (Text):
    1. ZwContinue      proc near
    2.                  mov     eax, 20h        ; NtContinue
    3.                  mov     edx, 7FFE0300h
    4.                  call    dword ptr [edx]
    5.                  retn    8
    6. ZwContinue      endp
    То теперь так:
    Код (Text):
    1. ZwContinue      proc near
    2.                  mov     eax, 166h       ; NtContinue
    3.                  call    sub_6A256445
    4.                  retn    8
    5. ZwContinue      endp
    6.  
    7. sub_6A256445    proc near
    8.                  mov     edx, esp
    9.                  sysenter
    10.                  retn
    11. sub_6A256445    endp
    Т.е минуя KiFastSystemCall/KiFastSystemCallRet

    Вот http://www.multiupload.com/L1ZSW82Z3P ntdll.dll 6.2.8102.0 если кому интересно..
     
  2. T800

    T800 Member

    Публикаций:
    0
    Регистрация:
    7 дек 2006
    Сообщения:
    293
    Адрес:
    Moscow
    Патчи весь ntdll )))
    Тоже увидел данное обстоятельство. И при тесте своей тулзы понял, что вызов через int 0x2E остался.
     
  3. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    А еще такие байты между функций 0x8B 0xFF и самое главное вопрос и ? что с этого?
     
  4. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Как что, некоторые (не будем указывать пальцем) хукали KiFastSystemCall/KiFastSystemCallRet для токо чтобы ловить много разных функций, а сейчас придётся каждую функцию отдельно хукнуть :)
     
  5. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Flasher
    Ага. Пальцев не хватит.
    P.S. А выпрыгивает из сервиса он разве в ту же функцию?
     
  6. kejcerfcrv

    kejcerfcrv New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2011
    Сообщения:
    320
    Flasher
    Патч не годно, Энди вы же знаете =); в юзермоде делать больше нечего, если конечно вы не особо завёрнуты, как я..

    l_inc
    Да, конечно в ту, куда есчо прыгать то:
    Код (Text):
    1. KiFastCallEntry:
    2.     mov ecx,KGDT_R3_DATA OR RPL_MASK
    3.     push KGDT_R0_PCR
    4.     pop fs
    5.     mov ds,cx
    6.     mov es,cx
    7.     mov ecx,PCR[PcTss]
    8.     mov esp,[ecx + TssEsp0]
    9.     push KGDT_R3_DATA or RPL_MASK
    10.     push edx
    11.     pushfd
    12.     push 2  ; EFlags mask.
    13.     add edx,8   ; Arg's
    14.     popfd
    15.     or byte ptr [esp + 1],EFLAGS_INTERRUPT_MASK/100H
    16.     push KGDT_R3_CODE OR RPL_MASK
    17.     push KeI386FastSystemCallReturn ; Eip
    18.     ...
    А в KeI386FastSystemCallReturn ядро загружае при инициализации как обычно KiFastSystemCallRet(). Тоесть код фактически не изменился, ничо нового в т-процессинге нет почти, баян.
     
  7. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    kejcerfcrv
    Так я ж об этом и говорю, что sysexit вроде должен прыгать в KiFastSystemCallRet, а не в ту же функцию. А уже KiFastSystemCallRet возвращается туда, откуда был вызван sysenter. Иначе пришлось бы сначала из юзермодного стека доставать адрес возврата, что несколько глупо.
     
  8. kejcerfcrv

    kejcerfcrv New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2011
    Сообщения:
    320
    l_inc
    Если бы я ядро пилил, то не использовал бы шлюз для возврата. Зачем, елси можно вернуться прямо в стаб, как это делаетя в KiSystemService(). Это походу какойто отладочный функционал, да и вообще эта кривая инструкция Sysexit негодная, также как и Sysenter. Бажный, кривой функционал. Тоже самое по аналогии что и шлюзы вызова(callgate), которые не робят в нт из за кривой хардварной реализации(IF).