из r3 -> r0 и обратно

Тема в разделе "WASM.NT.KERNEL", создана пользователем agent007, 13 июн 2007.

  1. agent007

    agent007 New Member

    Публикаций:
    0
    Регистрация:
    3 фев 2007
    Сообщения:
    166
    требуется перехватить юзермодный кодес, обработать его в дровине и вернутся обратно... как это можно реализовать? в мой моск единственное пришло, сделать в юзермодном коде типа:
    mov eax,1234h
    int 2e

    далее написал обработчик 2e прерывания, смотрю номер, если 1234h восстанавливаю юзермодный потертый код и пытаюсь передать управление, тупо jmp API ... дело работает до первого JMP дальше там нет памяти и падает в итоге :) ... подскажите в какую сторону капнуть?
     
  2. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    В первую очередь копать необходимо в сторону орфографического словоря... ;)
    А вообще, мало ли что там. Стек может рушится. Ты код лучше бы показал.
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Что значит обработать код?

    Для вызова r3->r0 лучше не хукать 2E, а добавить новое прерывание, допустим, 0xEC и с ним уже колбаситься. Или сделать call gate

    Вообще такие прыжки между уровнями привилегий к добру не приведут.
     
  4. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Я думаю автор задумал что-то вроде перехвата сплайсингом юзермодного кода с помещением обработчика в ядро.
    Но что-то сильно пахнет гемороем...
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Вот и я о чем ;)
     
  6. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    Код (Text):
    1. address: dd 0
    2.  
    3. handler:
    4. ; тут твои действия
    5.     jmp near [address]
    6.  
    7. init_handler:
    8.     sidt fword [esp - 6]
    9.     mov eax, [esp - 4]
    10.     lea eax, [eax + 0x2E SHL 3]
    11.     mov bx, word [eax + 6]
    12.     ror ebx, 16
    13.     mov bx, word [eax]
    14.     mov dword [address], ebx
    15.     mov ebx, handler
    16.     pushfd
    17.     cli
    18.     mov word [eax], bx
    19.     shr ebx, 16
    20.     mov word [eax + 6], bx
    21.     popfd
    22.     ret
     
  7. Deyton

    Deyton Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    94
    хукай в том же user-mode, если нужна помощь драйвера - используй коммуникацию user-mode обработчика хука с дровом, хотябы через DeviceIoControl(); для перехвата можно использовать наработки Microsoft Research - Detours.
    Мне кажется так будет правильнее, не то эти изобретения пахнут уязвимостями повышения привилегий и еще непонятно чем :)