Альтернативы хукингу SSDT

Тема в разделе "WASM.NT.KERNEL", создана пользователем katrus, 27 янв 2008.

  1. WIN32

    WIN32 Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    338
    Clerk
    Почему ?
    katrus
    Ищи реальную функцию, и хукай её.
     
  2. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    А что мешает переписать первые байты функции, и вписать прыжок на свою функцию? я так делаю и с антивирусами живёт отлично

    Мешает, то что это нужно делать ОЧЕНЬ аккуратно. Например нужно быть уверенным, что никакой другой поток в то же самое время не исполняет изменяемый код. Одно неверное движение и Вы отетц ... ребенка зовут Блю, фамилия - Скрин. У меня нет никакой идеи как сделать пропатчить функцию безопасным образом.
     
  3. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Функция установки хука, учитывает особеность масм добавлять левую процедуру прыжка и коректирует адрес
    Код (Text):
    1. SetHookFunk proc stdcall FuncAdr:dword,NewAddr:dword,Old:dword,NoSave:word, UnHook:word
    2. LOCAL CR0Reg:ULONG
    3.  push ebx
    4.  push ecx
    5.  cli
    6.  mov eax, cr0
    7.  mov CR0Reg,eax
    8.  and eax,0FFFEFFFFh    
    9.  mov cr0, eax
    10.  mov eax,[FuncAdr]
    11.  mov eax,[eax+2]
    12.  mov eax,[eax]
    13.  mov ecx,Old
    14.     cmp UnHook,0
    15.         jnz @UH
    16.     cmp NoSave,0
    17.         jnz @NS
    18.         assume ecx:ptr _OldCode
    19.         mov bx,word ptr [eax]
    20.         mov [ecx].One,bx
    21.         push dword ptr [eax+2]
    22.         pop [ecx].TWO
    23. @NS:    mov byte ptr [eax],68h
    24.         mov ebx,[NewAddr]
    25.         mov dword ptr [eax+1],ebx
    26.         mov byte ptr [eax+5],0C3h
    27.         jmp final
    28. @UH:    mov bx,[ecx].One
    29.         mov word ptr [eax],bx
    30.         push [ecx].TWO
    31.         pop [eax+2]
    32.         assume ecx:nothing
    33. final:
    34.  mov eax, CR0Reg
    35.  mov cr0, eax
    36.  sti
    37.  pop ecx
    38.  pop ebx
    39. ret
    40. SetHookFunk endp
    Пример использования
    Код (Text):
    1. ;Установить перехват
    2. invoke SetHookFunk,offset NtOpenProcess,addr HNtOpenProcess,addr OldNtOp,0,0
    3. ;снять перехват
    4. invoke SetHookFunk,addr NtOpenProcess,addr HNtOpenProcess,addr OldNtOp,0,1
    Пример обработчика
    Код (Text):
    1. HNtOpenProcess proc  ProcessHandle:DWORD, DesiredAccess:DWORD, ObjectAttributes:DWORD, ClientId:dword
    2. LOCAL ProcessId:dword
    3. LOCAL Result:dword
    4.  mov eax,ClientId
    5.  mov eax,[eax]
    6.     cmp eax,ProcID ;хендл процесса
    7.     jne final
    8.         mov eax,STATUS_ACCESS_DENIED
    9.         ret
    10. final:
    11.  invoke SetHookFunk,addr NtOpenProcess,offset HNtOpenProcess,addr OldNtOp,0,1
    12.  invoke NtOpenProcess ,ProcessHandle, DesiredAccess,ObjectAttributes, ClientId  
    13.  mov Result,eax
    14.  invoke SetHookFunk,addr NtOpenProcess,offset HNtOpenProcess,addr OldNtOp,1,0                
    15.  mov eax,Result
    16.  ret
    17. HNtOpenProcess endp
    для хранения переписаных байт использует структуру
    Код (Text):
    1. _OldCode struct
    2.     One word   ?
    3.     TWO DWORD  ?
    4. _OldCode ends
    5.  
    6. .data?
    7. OldNtOp _OldCode <>
     
  4. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    2FED
    Извиняюсь, но мне кажется в Вашем коде нет защиты на случай если кто-то исполняет модифицируемый код. Или я чего-то не вижу?
     
  5. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Про сплайсинг сто тыщ мильёнов раз говорили. Код скопированный 2FED, не гарантирует стабильности и проч, да и вообще ничего не гарантирует. в общем удалить, чтобы не было дурным примером.
     
  6. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    как это нет защиты, почему нестабильный? в перехватчике код функции восстанавливается перед её вызовом, а по завершению опять ставится перехват, в функции установки/снятия перехвата есть команды cli и sti который запрещают прерывания во время установки перехвата, таким образом ничто не вызовет функцию когда она будет переписыватся.

    я этот код сам(ну почти) писал и очень много тестил, и работает стабильно, проверено
     
  7. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    2FED
    Этого мало -> поиск по сайту.
    Случайность. По такой же случайности может работать не стабильно.
     
  8. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Обоснуй
     
  9. sl0n

    sl0n Мамонт дзена **

    Публикаций:
    0
    Регистрация:
    26 сен 2003
    Сообщения:
    703
    Ну блин сколько раз говорилось что cli sti это для одноядерного процессора на многоядерных (коих щас не меряно)
    касяки вазможны в виде синяка
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Сплайсинг начала обработчика сервиса - слишком ненадёжно, его легко снять, не говоря уже про модификацию SST.
     
  11. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    У меня покачто один процессор, вот за одно и подскажи как запретить прерывания на всех =)
     
  12. WIN32

    WIN32 Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    338
    Надежных способов не бывает
     
  13. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    У меня нет особой проблемы, что мой хук можно снять. Главное, чтоб это не приводила к караху системы.