32 bit TO 64 bit

Тема в разделе "WASM.X64", создана пользователем sasha_s, 7 дек 2006.

  1. sasha_s

    sasha_s New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2005
    Сообщения:
    165
    Адрес:
    Belarus
    Есть у меня драйверок, в нем разные манипуляции с хуками ф-ций через SDT и вставкой jmp. Что надо чтобы его перевести под 64 битную XP?

    - 64 битная OS
    - компилер под 64 битную OS
    - и вероятно переделка кода

    кто сталкивался именно переделкой 32 в 64 подскажите чего и как?
     
  2. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    1) Читай статью - там все про портирование обычных драйверов на х64 http://msdn.microsoft.com/msdnmag/issues/06/05/x64/default.aspx
    2) Не сможешь хукать функции через SDT - только сплайсингом
    3) Нужно обходить PatchGuard
    4) Нужно учитывать всегда включенный DEP
    Вроде бы больше ничего страшного нет...

    ЗЫ: 1+) Если пишешь на Visual, то придется убрать весь inline assembler - it`s not supported now
     
  3. sasha_s

    sasha_s New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2005
    Сообщения:
    165
    Адрес:
    Belarus
    под 64 бита в принципе нельзы хукать через SDT?
    Т.е. никому сие не под силу, или только тем драйверам, которые изначально под 32 бита писались?
     
  4. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    SDT какая-то левая в 64
    то есть там мусор какой-то (на первый взгляд, я не понял что там)
    и еще она не используется
    а хукать-то можно и SDT и IAT и сплайсингом
    только через пару минут получишь BSOD
     
  5. Guest

    Guest Guest

    Публикаций:
    0
    - это еще давно хотели сделать чтоб не хакерили, в Висте там вообще дофига убрали. С другой стороны нафиг тебе SDT. Некоторые проги умеют получать Shadow SDT или правильные адреса из ntoskrnl на харде, так что сплайсинг все же предпочтительнее, но не стабильнее (хотя проблем небыло).
    P.S. кое-какие проги проверяют перые 5 байт функции, так что осторожнее.
     
  6. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    В SDT теперь хранятся RVA от начала таблицы. Это связано не с защитой, а с оптимизацией. Нет смысла хранить 8 байт абсолютного адреса, если достаточно 4-х относительного. Вряд ли ядро скоро вылезет за размер 4 гига :)
    Хукать через SDT теперь очень проблематично, потому что нужно найти свободную память в пределах плюс-минус 2 гига от начала SDT. Вероятность, что система там ее выделит крайне невелика
     
  7. Guest

    Guest Guest

    Публикаций:
    0
    Весело, но все равно хукать SDT не актуально, КАСП именно поэтому и обходят, он дофига мутит c SDT и Shadow SDT (перемещает их, создает свои SDT) :)
     
  8. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Ну а для защиты там вполне бы и PatchGuard хватило бы, если б его до конца доделали. Только глупо это, имхо, чтоб от каждого тупого виря система в синий экран падала
     
  9. tylerdurden

    tylerdurden New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    322
    Необязательно сплайсить адреса в SDT. Ее можно подменить, т.к. ее адрес хранится в PEB (но в одном из новых патчей ее оттуда убрали... Куда ? Кто знает ?)
     
  10. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    fluderast
    см.
     
  11. tylerdurden

    tylerdurden New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    322
    Так патчгард не проверяет TEB PEB и проч. И можно подменить адрес SDT.
     
  12. sasha_s

    sasha_s New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2005
    Сообщения:
    165
    Адрес:
    Belarus
    а на VMWare можно поставить 64-битную Windows?
    кто-нидь ставил?
     
  13. apple

    apple Виктор

    Публикаций:
    0
    Регистрация:
    26 апр 2005
    Сообщения:
    907
    Адрес:
    Russia
    Если стоит 32-битная (даже на x64 процессоре) - нет
     
  14. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    fluderast
    Пост №6. Напрямую хукать SDT не выйдет.

    tylerdurden
    Для перехвата вызовов из ядра надо подменять адрес в структуре KeServiceDescriptorTable, а она защищается. Опять нужен обход PatchGuard.
    Можно. Только не думаешь, что это добавит геморроя?
     
  15. tylerdurden

    tylerdurden New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    322
    > Можно. Только не думаешь, что это добавит геморроя?
    Та не, я не то хотел сказать, В описателе потока KTHREAD лежит адрес SDT, туда прописать
     
  16. Guest

    Guest Guest

    Публикаций:
    0
    Согласен с тобой. Все же лучше сплайсинг, PatchGuard - обход, все мы прекрасно знаем что нет ничего невозможного, http://www.uninformed.org/?v=3&a=3
     
  17. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    tylerdurden
    Да я так и понял. Имхо, не самый простой путь. Да и сам же говоришь, что указатель на SDT оттуда утянули. Хотя у себя посмотрел сейчас на WinXP64 - все на месте. Не знаешь, когда эту штуку удалили?
    Где-то краем глаза видел информацию, что обход PatchGuard через KeBugCheckEx прикрыли. Может быть этим же патчем?
     
  18. tylerdurden

    tylerdurden New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    322
    Хз, не копал... В pdb файлах структуру KTHREAD начиная с этого патча вообще поменяли хорошо.
     
  19. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Можно, если проц 64битный. И не важно, на какой системе стоит варя.
     
  20. wr123

    wr123 New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2008
    Сообщения:
    6
    а вы не могли бы чуть поподробнее объяснить как реализовать сплайсинг или дать линков где можно про него почитать?

    также не до конца понял, получается что хук функций через SDT реализованный для 32битной ОС после реализации обхода KPP работать под 64битную ОС не будет?