MmMapIoSpace hooking

Тема в разделе "WASM.WIN32", создана пользователем SOUZ, 6 фев 2007.

  1. SOUZ

    SOUZ New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    19
    Адрес:
    IBSS
    Вопрос:

    ставлю хук на:
    Код (Text):
    1. typedef NTSYSAPI NTSTATUS (*ZWCREATEFILE)(
    2. ......
    3. typedef NTKERNELAPI PVOID (*MMMAPIOSPACE)(
    4.                       IN PHYSICAL_ADDRESS PhysicalAddress,
    5.                       IN SIZE_T NumberOfBytes,
    6.                       IN MEMORY_CACHING_TYPE CacheType
    7.                      );
    8.  
    9. PVOID NewMmMapIoSpace( IN PHYSICAL_ADDRESS PhysicalAddress,
    10.                IN SIZE_T NumberOfBytes,
    11.                IN MEMORY_CACHING_TYPE CacheType
    12.                      ) {
    13.  
    14. ...
    15.     PVOID ntS = (PVOID) NULL;
    16.     // call original fucntion
    17.     ntS = ((MMMAPIOSPACE)(OldMmMapIoSpace)) (
    18.             PhysicalAddress,
    19.             NumberOfBytes,
    20.             CacheType);
    21.  
    22.     return(ntS);
    Вса падает в момент постановки хука.

    В то же время хук на функции ZWCreate и т.п. прокатывает на ура.

    Винда 2003 SP1.

    В чем может быть дело?
    пасиб.
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Как ты ставишь хук?
     
  3. SOUZ

    SOUZ New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    19
    Адрес:
    IBSS
  4. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    С каким кодом? В какой момент - в момент перезаписи адреса или при первом вызове?
    Банальность про экстрасенсов уже на зубах навязла, а вопросы им все-равно адресуются :\
     
  5. SOUZ

    SOUZ New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    19
    Адрес:
    IBSS
    вот таким вот образом..., как и приведено по ссылке ниже.
    падает в момент перезаписи.
    Код (Text):
    1.     INTERRUPT_OFF;  
    2.     OldMmMapIoSpace = (MMMAPIOSPACE) (SYSTEMSERVICE(MmMapIoSpace));
    3.     (MMMAPIOSPACE) (SYSTEMSERVICE(MmMapIoSpace)) =    NewMmMapIoSpace;
    4.     INTERRUPT_ON;
     
  6. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    MmMapIoSpace не является функцией native api, поэтому ее адреса нет в KeServiceDescriptorTable. Макрос SYSTEMSERVICE вместо индекса сервиса возвращает какую-то фигню, и в результате запись
    Код (Text):
    1. (MMMAPIOSPACE) (SYSTEMSERVICE(MmMapIoSpace)) =    NewMmMapIoSpace;
    происходит в произвольную область памяти.

    Не нативные функции можно хукать сплайсингом или подменой адреса экспорта в модуле ядра

    ЗЫ: Здесь http://www.metasploit.com/users/opcode/syscalls.html находится список функций, с которыми твой перехват будет нормально работать
     
  7. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Ну в общем как я и думал =)
     
  8. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    <Не нативные функции можно хукать сплайсингом или подменой адреса экспорта в модуле ядра>

    Но даже в этом случае ты не сможешь перехватывать вызовы внутри NTOSKRNL, и в уже загруженых дровах тоже. Только в тех дровах, которые будут грузиться после. Если хочешь чтоб всё перехватывать, тут только сплайсинг.