Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
14-1089600249
Думкин
2004-07-12 06:44
2004.08.01
С днем рождения! 12 июля


1-1089845649
Vetalich
2004-07-15 02:54
2004.08.01
Создание папки


3-1089098006
TransparentGhost
2004-07-06 11:13
2004.08.01
Нужно ли отрубать всех пользователей при BackUp?


9-1081717014
Werwolf
2004-04-12 00:56
2004.08.01
Продолжение темы "Пиратов бесконечности"


8-1084527750
NickKBR
2004-05-14 13:42
2004.08.01
Создание видео файла без использования DirectX, OpenGL и т.п.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский