Механизмы сокрытия Hook'ов

Тема в разделе "WASM.WIN32", создана пользователем SCRTR, 20 ноя 2011.

  1. SCRTR

    SCRTR New Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2011
    Сообщения:
    2
    Устанавливаю ловушку WH_GETMESSAGE на определённый поток в чужом процессе.

    Как сделать так, чтобы чужой процесс гарантированно не мог ничего об этом узнать?

    Насколько я понимаю, при установке хука моя dll-ка загружается в адресное пространство чужого процесса. Поэтому, чтобы заподозрить неладное, чужому процессу достаточно получить список модулей (dll), которые загружены в его адресное пространство, и если там есть какие-то чужие dll, то значит, что установлены какие-то ловушки.

    Пока мыслю в сторону перехвата API-функции, отвечающей за информацию о загруженных модулях. Как я понимаю, эту API-функцию надо модифицировать так, чтобы если её вызывает чужой процесс, то она не возвращала бы никакой информации о моей dll. Есть вопросы:
    1. Возможно ли вообще такое сделать?
    2. Какую именно API функцию стоит перехватывать?
    3. Кроме сокрытия загруженной dll от процесса, надо ли ещё что-то делать?
    4. Может быть есть более простые способы.
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    да...

    наверное LdrGetDllHandle... но лучше пройтись по базе данных загрузщика и удалить свою либу из двусвязного списка... NT_TIB -> TEB -> PEB -> PEB_LDR_DATA и так далее... в интернете куча примеров...

    можно найти ловушк, установленную на WH_GETMESSAGE (как противодействие - не использовать хуки)... можно найти PE-файлу, котоых нет в базе данных загрузщика и выгружать их (как противодействие - трешить PE-заголовок после загрузки)... можно похукать загрузку модулей или какой-нить BaseThreadStart так, что инжект у вас не пройдет... да много чего можно придумать...
     
  3. SCRTR

    SCRTR New Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2011
    Сообщения:
    2
    Спасибо за советы. Буду думать.
    Не ожидал такой быстрой реакции :)
    У меня задача такая. Я ловлю определённые (нестандартные) сообщения, которые сам "чужой процесс" посылает в свои окна, и при получении одного из таких сообщений считываю данные из памяти "чужого процесса". Т.е. привязка по времени критична - мне необходимо считать данные из памяти до того, как сообщение будет обработано.
    Можно ли такую задачу решить без использования хуков?
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    ну например сплайсинг GetMessage, PeekMessage...
     
  5. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    можно скрыть через пеб длл, но это не решает проблемы, нужно копать - перекапывать шадов, как это делает рку...
     
  6. karabas_barabas

    karabas_barabas Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    168
    не советую, могут вылезти побочные эффекты - есть подозрение что и хуки не будут доставляться тогда этой либе, к тому же некоторые тулзы определяют hidden module
     
  7. Euler

    Euler New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2009
    Сообщения:
    56
    Сабклассинг(SetWindowLong(GWL_WNDPROC))? А длл, наверно, проще не подгружать, чем скрыть :).
     
  8. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    вообще, если ничего не путаю, то GWL_WNDPROC может установить только тот поток, с которым ассоциировано окно (в общем случае поток, который создал окно)...
     
  9. Euler

    Euler New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2009
    Сообщения:
    56
    Т.е. изменить может любой поток, принадлежащий тому же процессу, что и окно.
     
  10. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    SCRTR
    А ты напиши простейший вызов мессажбокса на асме так чтобы там стопудово ничего лишнего не было, запусти его и посмотри тем же Процесс Эксплорером сколько туда будет всякой всячины напихано. Так что имхо такая параноидальность захватываемого процесса тупо приведёт к его неработоспособности на большинстве машин.