И еще раз про API-Hooking...

Тема в разделе "WASM.BEGINNERS", создана пользователем Pinkbyte, 4 ноя 2006.

  1. Pinkbyte

    Pinkbyte Member

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    106
    На этот раз меня интересует глобальный API-Hooking под Ring-0. Как человек, никогда не видевший подобных техник в режиме ядра предположу, что это делается так:

    Определяется физический адрес ф-ции API(к примеру MessageBoxA в драйвере)
    Каким-нибудь образом осуществляется запись в ФИЗИЧЕСКУЮ память напрямую(без виртуальной памяти) с целью сплайсинга ф-ции(ИМХО при изменении физ-памяти, изменится и виртуальная память всех процессов, куда спроецирована библиотека с этой ф-цией)
    Где-нибудь в памяти размещается ф-ция перехватчик

    Отсюда сразу 2 вопроса: 1)как напрямую писать в физическую память из драйвера и 2) где бы разместить ф-цию перехватчик, чтобы она была видна всем процессам сразу?

    Честно говоря у меня нет ни необходимых пособий(кроме статей Four-F нет вообще ничего), ни опыта, чтобы докопаться самому, посему и прошу помощи...
     
  2. _Serega_

    _Serega_ New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    288
    1) в физическую память можно писать даже из прикладной программы в Ринг3, через объект ядра-секцию: ФизикалМемору
    ЗЫ:Но не факт что нужная функция будет в памяти, а не в свопе.
    2) В оперативной памяти :) где ж еще.
    ЗЗЫ:Но не факт, что проекций ДЛЛ, в физической памяти только одна :)
     
  3. Pinkbyte

    Pinkbyte Member

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    106
    1) а разве такие библиотеки как kernel32.dll и user32.dll кидаются в своп? они же одни из самых часто запрашиваемых...
    2) Про то, что писать надо в память я понял. Не понял я только, почему будет несколько копий dll? из-за локального API-Hooking'а(пресловутое copy-on-write)? И если так, то как тогда перехватить API глобального не перебирая все процессы и одновременно не выбрасывая из перехватываемых приложений консоли???
     
  4. Pinkbyte

    Pinkbyte Member

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    106
    да и еще - когда я нахожусь в процедуре DispatchControl драйвера, тогда все происходит в контексте вызвавшего драйвер процесса. Как перебрать другие процессы, переключиться на нужный и, что самое главное, вернуться обратно?
     
  5. _Serega_

    _Serega_ New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    288
    1.
    Если у тя щас стоит Сайс то проверь бит "презент" всех дескрипторов страниц (возможно есть более объективный способ, может бит "ж" проверить? ) и вопрос отпадет сам собой, но имхо должны кидаться. Я щас проверить не могу.
    2.
    Ну это один из случаев, я знаю еще пару, например если имя ДЛЛ не в формате 8.3 то при указании ДОС имени грузится еще одна копия :)
     
  6. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    Хукай не сплайсингом, а сразу ядерные функции через SDT
     
  7. Pinkbyte

    Pinkbyte Member

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    106
    Сайс у меня не стоит, точнее не ставится. Ни тот, который под Win2000, ни тот, который под XP. Скачивал туеву хучу патчей - не помогает :dntknw:

    FreeManCPM
    Не подскажешь как? Ну или ссылочку на примерчик? Я с таблицами дескрипторов не работал, даже толком int trick для получения Ring-0 в старой винде не разобрал...
     
  8. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine