Как достать параметы перехваченной функции?

Тема в разделе "WASM.BEGINNERS", создана пользователем Ramzey, 20 янв 2009.

  1. Ramzey

    Ramzey New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2008
    Сообщения:
    15
    Перехватил в драйвере ZwOpenKey.
    Как посмотреть с какими параметрами была вызвана эта функция?
     
  2. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    В стеке.
     
  3. Ramzey

    Ramzey New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2008
    Сообщения:
    15
    Мне бы примерчик
     
  4. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    можно кинуть в DbgPrint и посмотреть в DbgView
     
  5. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    Код (Text):
    1. NTSTATUS newZwOpenKey(OUT PHANDLE  KeyHandle,IN ACCESS_MASK  DesiredAccess,IN POBJECT_ATTRIBUTES  ObjectAttributes)
    2. {
    3. DbgPrint("KeyHandle=%X, DesiredAccess=%X, ObjectAttributes=%08X",KeyHandle,DesiredAccess,ObjectAttributes);
    4. return origZwOpenKey(....);
    5. }
     
  6. Ramzey

    Ramzey New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2008
    Сообщения:
    15
    KeyHandle=7F6A0, DesiredAccess=20019, ObjectAttributes=0007F680

    И что с этим делать?
     
  7. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    Ну, судя по префиксу "Р", последний из парамов - это указатель. Указатель на структуру OBJECT_ATTRIBUTES.

    DesiredAccess = 20019h = 100000000000011001b =
    KEY_QUERY_VALUE (1h)
    KEY_ENUMERATE_SUB_KEYS (8h)
    KEY_NOTIFY (10h)
    STANDARD_RIGHTS_READ a.k.a. STANDARD_RIGHTS_WRITE a.k.a. STANDARD_RIGHTS_EXECUTE a.k.a. READ_CONTROL (20000h)

    Ну а первый - сопстно хендл.
    А что с ними всеми делать - уже твоя епархия =) Зачем-то ты их получал, правда?
     
  8. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    указатель на дворд, в который этот хендол будет записан в случае чего :)
     
  9. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    а как ты функцию перехватил, если не знаешь даже что такое стек и что такое параметры???
     
  10. Ramzey

    Ramzey New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2008
    Сообщения:
    15
    MSoft
    Ну, допустим, что такое стек и параметры я знаю.
    Дело в том, что я не программер (только остатки знаний полученных по специальности ВКСС в 2000г.).
    У меня есть задание (от коллеги по работе - заочника) написать монитор доступа к реестру на С.
    Я вроде все сделал - драйвером ловлю ProcessID тех кто стучится к реестру и отдаю пачку PID монитор...
    Оказалось надо еще знать что процесс хотел сделать, т.е. достать из параметров название ветки реестра и т.п.
    Коммерческих целей не преследую, просто мозг расшевелить хочется.
     
  11. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Ramzey
    OBJECT_ATTRIBUTES.RootDirectory - родительский раздел, напр., HKLM
    OBJECT_ATTRIBUTES.ObjectName - дочерний подраздел или ключ.

    Оттуда и доставай. Была вроде тема недавно.

    hawk разбиралсо давеча http://wasm.ru/forum/viewtopic.php?pid=289771#p289771
     
  12. Ramzey

    Ramzey New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2008
    Сообщения:
    15
    Aspire Спасибо, помогло.

    Еще ламерский вопросик в догонку, как в С указатели перемещать?

    вот кусок кода который из драйвера инфу получает - разную!
    Код (Text):
    1.           PVOID P;
    2.  
    3.          P=malloc(MemAlloc*sizeof(HANDLE));
    4.  
    5.           if (P!=NULL)
    6.             do
    7.             {
    8.               ReadFile(hDevice,P,MemAlloc*sizeof(HANDLE),&Reads,NULL);
    9.                ...
    10.            _asm
    11.                   {
    12.                         mov     eax, P
    13.                         add     eax, 4
    14.                         mov     wstr, eax
    15.                   }
    16.            
    17.               astr=wstr;
    Как мне изменить P без ассемблерных вставок?
     
  13. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.317
    хм... это очень сложный вопрос... может быть так:
    Код (Text):
    1. P = P + 4;
     
  14. Ramzey

    Ramzey New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2008
    Сообщения:
    15
    mydrv.c(155) : error C2036: 'PVOID' : unknown size
     
  15. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Код (Text):
    1. P = (PVOID)((PUCHAR)P + 4);
     
  16. Ramzey

    Ramzey New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2008
    Сообщения:
    15
    n0name
    Спасибо. То, что надо!

    Надо матчасть учить, а времени нет (((.