WinXP SP3 ring3->ring0

Тема в разделе "WASM.NT.KERNEL", создана пользователем BiSHOPsCastle, 4 июн 2008.

  1. BiSHOPsCastle

    BiSHOPsCastle New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2008
    Сообщения:
    8
    Надо было сегодня покапатся в Native API, обнаружил странную хрень:
    вроде раньше, в SP2 переход в ring0 осуществлялся через шлюз INT 2Eh(или какойто там, точно не помню), но сейчас там что-то другое, а конкретнее - сначала, как обычно, выполняется загрузка смещения обработчика сисьвызова, а потом вместо прерывания выполнятся прыжок на 7FFE0300h. Гм ну ладно, решил глянуть чвойто там у нас по этому адресу. лучше бы я этого не делал потому что ступор пришел быстро - во-первых у этой секции разрешения на исполнения нет, только для чтения (мне вспомнилось, что Рихтер что-то писал про эти верхнии 64кб - они мол заблокированы, чтобы облегечить детекцию виндами кода, который может попытатся произвести запись в память ядра). Код в этой секции оказался еще тупее
    Код (Text):
    1. in al,90h
    2. jmp FFFFFFF9h   ; Хм-м-м...
    3. in al,90h
    Отцы спасайте) остается вероятность того, что руки у меня кривые, я не отрицаю, но я проверял и дизасемблировал несколько раз - все одно и тоже.
     
  2. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    BiSHOPsCastle
    Там просто вызов sysenter. Отладчик у тебя его просто неправильно отображает..
    А 2Eh - это вроде в 2000 было. В ХР - sysenter.
     
  3. BiSHOPsCastle

    BiSHOPsCastle New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2008
    Сообщения:
    8
    Aspire
    Можешь по-подробнее про sysenter или ссылку на инфу кинуть?
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Да ты опоздал. В SP2 уже был SYSENTER.
    Не прыжок, а оттуда адрес вынимается. Ты адрес (4 байта) интерпретировал выше как код.

    UPD:
    Попродробнее - маны интела.
    первый запрос в гугле "sysenter site:ru" выдает
    http://www.securitylab.ru/analytics/241543.php
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Точно руки кривые та и ещё и дизасмить надо уметь. Так в SP1, там код: mov edx,esp/sysenter как и обычно, вместо KiFastSystemCall и KiFastSystemCallRet, та винда как и SP3 кривая.
     
  6. Clerk

    Clerk Забанен

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

    BiSHOPsCastle New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2008
    Сообщения:
    8
    в ФАКе накалякано:

    <...>NT API помещает номер системного вызова (syscall) в EAX и вызывает память по адресу 7FFE0300h:
    7FFE0300 8BD4 MOV EDX,ESP
    7FFE0302 0F34 SYSENTER
    7FFE0304 C3 RETN

    OllyDbg выдал:
    7FFE0300 F0E4907CF4E4907C

    что соответственно продизасемблировалось в вышеприведенное.
    Обьясните тупому?
     
  8. BiSHOPsCastle

    BiSHOPsCastle New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2008
    Сообщения:
    8
    Great
    не понял. Кто куда вынимается? там калл чистой воды

    mov eax, xxxxh ; syscall
    mov edx, 7FFE0300h
    call dword ptr [edx]
    retn xxh
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Читай ман про то, что делает call dword ptr [edx]
    Ты сильно заблуждаешься в том, что он делаешь прыжок на 7FFE0300
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    http://openfile.ru/56496
    Ты не тот адрес дизасмишь.
    [Ктонибудь подскажите как картинку приаттачить.]
     
  11. BiSHOPsCastle

    BiSHOPsCastle New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2008
    Сообщения:
    8
    я более чем на 100% уверен что адрес тот, могу приатачить картинку минут через 5-10
     
  12. BiSHOPsCastle

    BiSHOPsCastle New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2008
    Сообщения:
    8
    вот он, дизасемблировать в ольке не могу - я не вшториваю как ей указать, откуда дизасмить, а она начинает не с 7FFE0300 а с 7FFE02FF, там криво получается
    http://openfile.ru/i/photo/51/b146bdddcbf1a4fa1a95a5ff32c9c815.jpg
     
  13. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    BiSHOPsCastle
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Во, я туплю, сразу не посмотрел на код, думал у тебя SP1.
    По адресу 7FFE0300h находится указатель на KiFastSystemCall, следующее слово - указатель на KiFastSystemCallRet:
    7FFE0300 : ntdll.7C90E4F0 - по этому адресу должны быть инструкции mov edx,esp/sysenter
    7FFE0304 : ntdll.7C90E4F4 - ret
    Имена функций наверно как выше, у меня нет на чём проверить, в SP2 адреса другие.
     
  15. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Кстати говоря, а в чём фишка косвенного вызова в переходниках:
    Код (Text):
    1.   mov eax, ##
    2.   mov edx, 7FFE0300
    3.   call [edx]
    4.   ret XX
    5.  
    6. ...
    7. 7FFE0300:
    8.   KiFastSystemCall
    9.  
    10. ...
    11. KiFastSystemCall:
    12.   mov edx,esp
    13.   sysenter
    14.   ret
    Ведь можно(?) было бы использовать что-нибудь вроде:
    Код (Text):
    1.   mov eax, ##
    2.   push @F
    3.   mov edx, esp
    4.   sysenter
    5. @@:
    6.   ret XX
     
  16. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    а фишка в том, что если немного дальше продизасмить, то можно увидеть не только инструкцию SysEnter/intel, но и инструкцию SysCall/amd. Там для этого и условный переход есть, что по фичам проца выбирается какую веточку с какой инструкцией вызывать. Хотя хз.. мне так это представилось.
     
  17. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    в том, что в тот дворд можно записать адрес KiFastSystemCall или KiIntSystemCall (вызовы через sysenter и int 2e) соответственно в зависимости от возможностей машинки
     
  18. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    k3internal
    Это начиная с каких винов syscall появился там? В 64 битных версиях хр?
     
  19. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
     
  20. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    2FED
    Не путайтесь, спрашиваю о syscall, а не о sysenter.