Проблемы с перехватом API из wininet.dll

Тема в разделе "WASM.WIN32", создана пользователем Stub, 4 июл 2005.

  1. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
    В общем ставлю хук на ф-ции из этой dll. Также перехватываю ф-ции (через IAT) ntdll.LdrLoadDll, kernel32.GetProcAddress (попробовал хукать ntdll.LdrGetProcedureAddress - вылетает все нафик :dntknw:), приостанавливаю потоки и т.д.

    Для пробы хукаю user32.MessageBoxA/W - все нормально.

    Пробую хукнуть ф-ции wininet.dll - облом.

    Нашел через поиск только одну тему, подобную моей, но там так ничего и не решилось :dntknw:...
     
  2. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
    Исправил глюк с перехватом ntdll.LdrGetProcedureAddress, потому убрал kernel32.GetProcAddress. Результат остался прежним - ф-ции wininet.dll не перехватываются.

    Потому вопрос: как правильно организовать перехват ф-ций wininet.dll из драйвера? Интересует теоретическая часть, с практической и сам разберусь, но если вдруг кто будет столь любезен, то канеш не откажусь :)... Просто накидайте примерный алгоритм действий и т.д.
     
  3. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Мне кажется, из драйвера перехватывать 3 кольцевые апи бессмыслено. А для юзермода самый надежный способ перехвата - сплайсинг. Я проверил, с помошью dll injection и сплайсинга все прекрасно перехватывается.
     
  4. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
    10x Ms Rem за совет.

    Оч странно, но если хукать ф-ции ntdll.LdrGetProcedureAddress и ntdll.LdrLoadDll, то IE идет в обход их местами... Я заменил их перехват на набор ф-ций из kernel32.dll и все заработало!!!
     
  5. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow


    Это почему ??? вставил в начало кода функции какой нить 0xcd70(сам же и говорил) и лови прерывание, в драйвере его и обрабатывай, только для этого надо будет дескриптор описать подобно Int2e чтоб не заклинило при переключении режимов. еще надо будет решить проблему с реентерабельностью, поскольку контексты свопиться один хрен будут, и пока наш драйвер будет обрабатывать инт, кто нить другой вызовет прерывание, но это всё просто решается. Мне кажется вообще намного проще будет осуществить перехват именно из драйвера :)Единственная замутка будет только со стеком, но и она решается довольно просто.
     
  6. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"




    В некоторых случаях проще, а иногда вообще неприменимо (из за тормозов при переключении в кернелмод), к тому же апишки часто хукаются для изменения их результатов работы, причем в обработчике может быть один или несколько вызовов оригинальной функции. Можно конечно и в таком случае замутить обработку в драйвере, но зачем наживать геморрой, если можно просто повесить юзермодную длл в которой такие обработчики делаются куда проще.

    Имхо драйвера проще и удобнее применять при перехвате в кернелмоде, а в юзермоде они годятся только для очень простых случаев, когда обработчику не нужны юзермодные апи.
     
  7. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow


    Хм, что то я тебя не совсем понимаю, я пользовал данн6ый метод и всегда он отрабатывал превосходно, тормоза припереключении режимов ???? какие ??? Данные функции будут так часто вызываться, что суммарное время к примеру вызова int2e будет меньше к примеру чем вызов нашего обработчика?? Это глупости.





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





    Так с этого и надо было начинать, а если там никаких API не юзается, а к примеру требуется всего лишь отмониторить или повлиять на параметры, но почему бы и нет ???? мы получим глобальный обработчик, недосягаемый для остального UM кода и практически нерушимый, это нечто как с обработчиком #UD для NTVDM к примеру.
     
  8. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"


    Вызов прерывания с изменением СPL, переключением стека и.т.д. всегда будет занимать гораздо больше времени чем простой call на юзермодный обработчик.





    Это справедливо только в простейших случаях, сложные обработчики могут содержать множество вызовов других API.







    Разве? Во-первых мы ставим обработчик изменяя память юзермодного кода, а значит он сможет ее перезаписать и убрать вызов прерывания. Также программа может обнаружить обработчик и работать в обход перехватываемой апи.
     
  9. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow


    в исходном задании о сложности упоминания не велось







    Прям настолько уж много ???? Когда стэк дров KAV тормозит при каждом прогоне irp это нормально и все терпят, а тут какой то вызов шлюза и в результате куча потерянного времени :))







    это вряд ли:) если только об этом не стоит задача у перехватываемого кода, а если так, то ты можешь отследить это и исправить в случае чего. Ты что то слишком сложно уж смотришь на вещи :))
     
  10. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow


    а ты не дай ей переписать память, во первых мы будем иметь дело с кодовой секцией, а это значит, что изменять код по умолчанию не дозволено, можно поменять аттрибуты страницы для осуществления задуманного, а делается это дело вызовом VirtualProtect, ну и перехвати соответствующий аналог в NTDLL.DLL и проконтролируй, ничего твой юзермод код в этом случае сделать не сможет, только если для этого не установит свой драйвер и не попросит тот сделать для него эту работу, ну а это уже сам понимаешь, больше напоминает научную фантастику в данном контексте :)) никаких траблов я тут не вижу, сам же статьи написал, а теперь за голову хватаешься :)))
     
  11. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"




    Во-первыз ntdll - юзерможная длл, нужно перехватывать ZwProtectVirtualMemory в ядре, иначе приложение сможет обойти эту функцию мимо.

    И вторая ВЕСОМАЯ причина не использовать драйвер для перехвата юзермодных апи в том, что для запуска драйвера понадобятся права администратора.

    Говорю я это все потому, что мне приходилось делать программу перехватывающую функции работы с реестром и заставляющую программу думать что она обращается к HKEY_LOCAL_MACHINE, хотя она на самом деле обращалась к подветке HKEY_CURRENT_USER. Цель этой программы - запускать без прав администратора игрушки требующие такие права и при этом избежать засорения реестра. Так вот, программа должна устанавливатся и работать без прав администратора в системе и при этом обработчики функций были весьма не простейшими. Драйвер для такого случая не подходит совершенно.

    Я не пытаюсь сказать, что драйвер нельзя для юзермодного перехвата использовать, просто в некоторых случаях это нецелесообразно и весьма геморройно.
     
  12. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    Ничего не понимаю, ты преследуешь цели в каких то идеализированных условиях. Наверняка то , что ты пишешь, будет являться существенным продуктом. Ну и что, попроси инсталяции в админмод, засунешь туда драйвер, а затем пусть народ дальше юзает тачку с юзерправами. И всё будет так как надо. Единственный гемор в данном вопросе, это использование кучи апи в обработчике перехватчика, больше проблем я не вижу.