проблема с NtOpenFile

Тема в разделе "WASM.NT.KERNEL", создана пользователем Andrew_Kuz, 11 фев 2009.

  1. Andrew_Kuz

    Andrew_Kuz УсамаБэнЛаден

    Публикаций:
    0
    Регистрация:
    5 июл 2007
    Сообщения:
    41
    Адрес:
    планета Земля
    После установки хук-процедуры на NtOpenFile при открытии любого файла вылазиет MessageBox в котором написанно что параметр задан неверно... как решить эту проблему?

    Собсна хук процедура в которой просто происходит вызов оригинальной функции:

    Код (Text):
    1. NtOpenFileHook:
    2.       PUSHFD
    3.       PUSHA
    4.      
    5.       LEA     EDI, [ESP+SIZEOF PUSHA_STRUCT+4+4] ; EDI -> argument list
    6.      
    7.       PUSH    [EDI + 014h]
    8.       PUSH    [EDI + 010h]        
    9.       PUSH    [EDI + 00Ch]
    10.       PUSH    [EDI + 008h]
    11.       PUSH    [EDI + 004h]
    12.       PUSH    [EDI + 000h]
    13.        
    14.       PUSH  @F
    15.       JMP [pOld_NtOpenFile]
    16. @@:
    17.            
    18.       POPA
    19.       POPFD
    20.    
    21.       RET     4 * 6
     
  2. V1lko

    V1lko New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    53
    Зачем же так всё замудрено со стэком? Передаваемые в функцию параметры теряются...
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    В отладчике прогони.
     
  4. Andrew_Kuz

    Andrew_Kuz УсамаБэнЛаден

    Публикаций:
    0
    Регистрация:
    5 июл 2007
    Сообщения:
    41
    Адрес:
    планета Земля
    почему замудрено? наоборот удобно... edi сразу указывает на параметры, че хошь с ними и делай... и никуда они не теряются... я думаю eax не стоит затирать popa'ом...
     
  5. Andrew_Kuz

    Andrew_Kuz УсамаБэнЛаден

    Публикаций:
    0
    Регистрация:
    5 июл 2007
    Сообщения:
    41
    Адрес:
    планета Земля
    n0name, придётся ))
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    наверно не стоит.
    сохраняй edi и все. флаги и остальные регистры не обязательно.
     
  7. int2eh

    int2eh Alexander Leevy

    Публикаций:
    0
    Регистрация:
    19 авг 2007
    Сообщения:
    106
    Адрес:
    Москва
    Andrew_Kuz
    Лучше использовать фрейм стека в своем коде! Вот его суть:
    Код (Text):
    1. ;начало процедуры:
    2. PUSH    EBP         ;стандартный пролог
    3. MOV     EBP,ESP
    4.  
    5. ;теперь делай что хочешь, кроме изменения EBP!!!
    6. ;а первый параметр - [EBP+8], второй - [EBP+12] и т.д.
    7. ....
    8. ....
    9.  
    10. MOV     ESP,EBP
    11. POP      EBP
    12. RET      XX       ;(или JMP OldHandler)
     
  8. int2eh

    int2eh Alexander Leevy

    Публикаций:
    0
    Регистрация:
    19 авг 2007
    Сообщения:
    106
    Адрес:
    Москва
    Всех программистов с Днем Защитника Отечества!
    Удачи, успеха и благополучия!!!