Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.01;
Скачать: CL | DM;

Вниз

Перехват открытия файлов   Найти похожие ветки 

 
Игорь   (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 вся ветка

Текущий архив: 2004.08.01;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.054 c
1-1090260090
k-sergey
2004-07-19 22:01
2004.08.01
у динамич. созд. TImage отловить событие onCliсk и получть его им


1-1090096184
Огромное Кулясищще
2004-07-18 00:29
2004.08.01
Скопировать в буфер обмена несколько строк.


4-1087750974
Damager
2004-06-20 21:02
2004.08.01
Открыть каталог в проводнике


1-1089969997
Горбатов В.Ю.
2004-07-16 13:26
2004.08.01
Одновременное перемещение нескольких окон


3-1089195030
sniknik
2004-07-07 14:10
2004.08.01
Не запускается сервис базы (оракле)