Форум: "WinAPI";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];
ВнизПерехват открытия файлов Найти похожие ветки
← →
Игорь (2004-06-12 17:51) [0]Ребята, подскажите plees.
Нужно отлавливать, какие определённая прога открывает файлы.
За кусочек кода, лучше на igor@dja.sf.ukrtel.net буду очень обязан.
Хотя бы просто ловить открытие файла.
Если есть разница в системе, пожалуйста объясните как ставить этот хук в 98,
например, и XP.
Хоть направление поиска!!!
← →
Burmistroff (2004-06-12 19:46) [1]По-хорошему, нужен драйвер. По-плохому, можно пробовать перехватывать API ф-ции. Доп. инфо на: http://maxcomputing.narod.ru/dev.html
← →
evvcom © (2004-06-13 01:08) [2]Все это с примерами (правда на С) подробно описано у Рихтера.
← →
Burmistroff (2004-06-13 19:35) [3]>evvcom
Вообще фильтрация API для открытия файлов - вещь сама по-себе неблагодарная (и дырявая). У Рихтера, насколько я помню описан единственный и пожалуй самый "дырявый" способ фильтрации API. Если уж и разбирать Си -- то сразу драйвера (club.shelek.com) и книгу Parsad Dabak"a (ссылка есть где-то на maxcomputing)
← →
Игорь (2004-06-14 22:57) [4]Спасибо всем за помощь.
Да, посмотрел, пощупал, - через API муторно выходит.
Ладно если одна функция - а тут на открытие дохрена перекрывать прийдётся.
Или всё же все функции открытия файлов где-то в одно место входят Ж:)?
Я вобще в начале думал, что хук простой как на клаву и мышь можно поставить.
А это всё хакерские приёмы, нестабильно всё. Неужели резидентные антивирусы так перехватывают?
Тут нужно долго экспериментировать. Не то что в DOS - переписал начало в обработчике на себя и делай что хочешь.
А вот насчёт написания своего драйвера - это что имелось ввиду?
← →
evvcom © (2004-06-15 02:07) [5]
> фильтрация API для открытия файлов - вещь сама по-себе неблагодарная (и дырявая).
А глобальная подмена в перехватываемой функции первых 6 байт - это лучше?
Дырявая - это в смысле, что не только таблицу импорта надо менять?
> Нужно отлавливать, какие определённая прога открывает файлы.
Это постоянно (шпион) или во время исследования?
← →
Игорь (2004-06-15 03:13) [6]Это не шпион, нужно контролировать караоке плеер на открытие файлов, что бы потом иметь ввиду сколько раз пели и вычислять популярные кары.
← →
nikkie © (2004-06-15 04:42) [7]а если просто воспользоваться filemon?
http://www.sysinternals.com/
← →
Игорь (2004-06-15 05:47) [8]nikkie большое спасибо!
Мысль ещё, если можно, подкиньте -
как понять, пели они этот открытый кар. или нет?
Микрофон перехватывать и анализировать уровень?
Это реально?
← →
nikkie © (2004-06-15 19:06) [9]я думаю хватит и анализа лога от filemon. там есть колоночка Other - показывает смещение и размер прочитанного блока.
← →
Burmistroff (2004-06-16 21:22) [10]>evvcom
Глобальная подмена лучше, но только в случае, если функцию одновременно вызывает максимум один поток. В противном случае - будет проблема. Правка IAT работает только для "обычных" файлов (достаточно его запаковать и ни чего работать уже не будет). Кроме того, если программа запомнит адрес процедуры до его исправления, то она будет ее вызывать без всяких фильтров.
Правка 6 байт лучше только тем, что позволяет поймать все.
>Игорь
Под написанием драйвера понималось написание драйвера WDM для WinNT на Си ;). В принципе я за 2 недели осилил.
Не очень хорошие резидентные антивирусы используют "внутреннюю IAT" (ServicesDescriptorTable) - та же таблица со ссылками на процедуры ядра WinNT. Правится кстати намного проще чем IAT. Regmon от тех же sysinternals именно так и работает. Пример с перехватом NtCreateFile (на уровне ядра) есть в упомянутой книге Parsad Dabak"а. Filemon же фильтрует вызовы DeviceIoCtl (и потому иногда перехватывает и обращения к реестру). Правда как он это делает я не знаю :)
← →
Burmistroff (2004-06-16 21:27) [11]А вообще, если прога совсем определенная - дебаггер в руки и вуаля ;)
P.S. я так Ms Visual Studio отучил задавать глупые вопросы типа "file was changed. do you really want to compile it?" при каждой попытке запуска проекта ;)
← →
evvcom © (2004-06-17 13:32) [12]
> Глобальная подмена лучше, но только в случае, если функцию
> одновременно вызывает максимум один поток. В противном случае
> - будет проблема.
Вот именно - проблема. А открытие файла будет делать не только его программа, а хотя бы еще и проводник.
> Правка IAT работает только для "обычных" файлов (достаточно
> его запаковать и ни чего работать уже не будет).
Ну почему же? Даже у запакованной в IAT имеется ну хотя бы LoadLibrary и GetProcAddress.
> Кроме того, если программа запомнит адрес процедуры до его
> исправления, то она будет ее вызывать без всяких фильтров.
Ну а кто мешает написать свой exe-шник, который и будет стартовым и запускать целевой приостановленным, внедрять туда dll, перехватывать LoadLibrary и GetProcAddress (и др., если нужно) и запускать его после всего этого?
Именно так всё это у Рихтера и описано, а глобальная подмена 6-ти байт отнесена к недостаткам из-за уже рассмотренных выше проблем.
> используют "внутреннюю IAT" (ServicesDescriptorTable) -
> та же таблица со ссылками на процедуры ядра WinNT
Здесь ничего не могу сказать, не разбирался.
← →
Burmistroff (2004-06-17 18:54) [13]>evvcom
А открытие файла будет делать не только его программа, а хотя бы еще и проводник.
Они будут это делать в разных контекстах (у каждого будет своя копия kernel32.dll и т.п.). Хотя если вспомнить, что у explorer"a 12 потоков :)
Даже у запакованной в IAT имеется ну хотя бы LoadLibrary и GetProcAddress.
Тут я согласен. Действительно это сработает, если мы внедримся в запускаемый процесс. А что делать если процесс уже запущен и одному богу известно, где находится его IAT?
А, кстати, насчет подмены, можно такой трюк сделать: если впоследствии не происходит перехода/чтения тех самых 6 байт в оригинальной функции, то JMP можно поставить раз и навсегда, и когда нужно просто продолжать выполнение по адресу оригинальная_процедура+6. Тогда недостатка с многопотоковостью (единственного недостатка) не станет ;)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.037 c