Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];

Вниз

file hooks   Найти похожие ветки 

 
oleggar ©   (2005-12-23 19:51) [0]

а этот вопрос нелегок,но все же буду рад любой информации.
мне нужно в Delphi отследить и занести в файл
следующую информацию
1)какие файлы были изменены ,созданы ,перенесены или удалены (имя файла входное и выходное ,имя каталога входное и выходное ,дата и время) (на NTFS /win 2000) и каким приложением ,действия пользователя не интересны (вообще следить нужно за одним приложением ,то есть перехватывать его файловые операции ,но если можно за всеми ,я буду фильтровать имена приложений).


 
Eraser ©   (2005-12-23 19:56) [1]


> oleggar ©   (23.12.05 19:51)

http://sysinternals.com/
см. FileMon
Возможно немного поможет компонент TShellChangeNotifier из закладки Samples.


 
oleggar ©   (2005-12-23 20:21) [2]

хммм ...я думал про этот компонент ,но у него 2 проблемы
1)как я узнаю ,какое приложение мучало файл ?
2) что-то он мне сообщает об этом после изменения ,а я хотел бы перехватить попытку обращения ,и ,желательно,запретить его или ликвидировать приложение до того ,как оно глюкнет и удалит важный файл .с сортировщиками почты такое случалось при мне ..


 
Eraser ©   (2005-12-23 20:36) [3]


> oleggar ©   (23.12.05 20:21) [2]

тогда только через драйвер см. [1]


 
oleggar ©   (2005-12-23 20:56) [4]

я уже скачал этот filemon..замечательная вещь и цены бы ему не было ..если бы он хоть в лог-файл сохранял ,а он же все только на экране!придется следить своей утилитой за экраном ;(( в общем ,если кто знает ,как самому сделать аналог filemon на Delphi ,пишите.


 
Eraser ©   (2005-12-23 21:25) [5]


> oleggar ©   (23.12.05 20:56) [4]


> в общем ,если кто знает ,как самому сделать аналог filemon
> на Delphi ,пишите.

Я знаю как - никак.
А на сайте http://www.sysinternals.com/Utilities/Filemon.html дано общее описание "как оно работает" и ссылки на литературу.


 
The_scorpion ©   (2005-12-24 01:32) [6]


> Я знаю как - никак.

ИМХО Если ты не знаешь, это не значит, что это нельзя сделать.

> )какие файлы были изменены ,созданы ,перенесены или удалены
> (имя файла входное и выходное ,имя каталога входное и выходное
> ,дата и время) (на NTFS /win 2000) и каким приложением ,
> действия пользователя не интересны (вообще следить нужно
> за одним приложением ,то есть перехватывать его файловые
> операции ,но если можно за всеми ,я буду фильтровать имена
> приложений).

Перехвати все winapi функции работающие с файловой системой, и получишь всю информацию и полный контроль над ней.


 
Rouse_ ©   (2005-12-24 01:35) [7]


> Перехвати все winapi функции работающие с файловой системой,
>  и получишь всю информацию и полный контроль над ней.

ой ли?
к такого плана заявлениям желательно добавлять слово "ИМХО"


 
The_scorpion ©   (2005-12-24 01:42) [8]


> ой ли?
> к такого плана заявлениям желательно добавлять слово "ИМХО"

Это не заявление, это факт. Я это делал, но только с функциями реестра.
ИМХО Если ты не можешь этого сделать, это не значит, что этого нельзя сделать.


 
Eraser ©   (2005-12-24 02:42) [9]


> The_scorpion ©   (24.12.05 01:42) [8]

поизвращаться можно, например при помощи http://www.madshi.net/ , но даю 95%, что всё не перехватишь, и всю эту байду можно будет запускать только под админом и не факт, что её не бужет "палить" антивирус.


 
The_scorpion ©   (2005-12-24 11:29) [10]


> "палить" антивирус.

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

> под админом

А если подгружать DLL с использованием ловушек, вроде им доступ админа и не нужен.

> но даю 95%, что всё не перехватишь,

А я да 100% что перехватишь(это долго, но возможно:))) )

> например при помощи http://www.madshi.net/

Лучше самому написать. Это интереснее и дешевле:)))


 
Rouse_ ©   (2005-12-26 13:20) [11]


>  Если ты не можешь этого сделать, это не значит, что этого
> нельзя сделать.

Хочешь об этом поговорить? Или тебе рассказать как эти чтуки твои с перехватом обходяться на раз?


 
Игорь Шевченко ©   (2005-12-26 13:38) [12]


> Перехвати все winapi функции работающие с файловой системой,
>  и получишь всю информацию и полный контроль над ней.


Filemon вообще-то работает по несколько иному принципу, но никто не мешает повторить его идеологию, драйвер, правда, на C придется писать, но этоне самая большая беда, верно ?


 
VirEx ©   (2005-12-26 16:36) [13]

http://kladovka.net.ru/download.cgi?id=300


 
The_scorpion ©   (2005-12-28 00:16) [14]


> Хочешь об этом поговорить? Или тебе рассказать как эти чтуки
> твои с перехватом обходяться на раз?

Расскажи...посмеюсь...:)))


 
Rouse_ ©   (2005-12-28 10:45) [15]


> Расскажи...посмеюсь...:)))

Банальной проеркой адреса вызываемой функции, веселый ты наш. :)


 
The_scorpion ©   (2005-12-28 10:58) [16]


> адреса вызываемой функции

А откуда ты этот адрес узнаешь? Уж надеюсь, не будешь использовать GetProcAddress? Ведь я ее одну из первых перехвачу...


 
Игорь Шевченко ©   (2005-12-28 11:47) [17]


> А откуда ты этот адрес узнаешь? Уж надеюсь, не будешь использовать
> GetProcAddress? Ведь я ее одну из первых перехвачу...


"Жаба хитра, но маленький хрущ с винтом много хитрее ее" (с)

Спорить не надо, практика - критерий истины.


 
xShadow ©   (2005-12-28 11:49) [18]


> А откуда ты этот адрес узнаешь?

Из таблицы экспорта файла kernel32.dll


 
The_scorpion ©   (2005-12-28 19:59) [19]


> > А откуда ты этот адрес узнаешь?
>
> Из таблицы экспорта файла kernel32.dll

А как ты обратишься к этой таблицы? Через GetProcAddress, но она уже работает только по моему велению.


 
Arazel ©   (2005-12-28 20:58) [20]

Удалено модератором


 
Игорь Шевченко ©   (2005-12-29 10:53) [21]

The_scorpion ©   (28.12.05 19:59) [19]

Не надо быть таким наивным. К таблице экспорта можно обратиться как минимум двумя способами, минуя GetProcAddress. Причем от одного из них ты никаким боком не сможешь защититься.


 
Rouse_ ©   (2005-12-29 11:01) [22]


> А как ты обратишься к этой таблицы? Через GetProcAddress,
>  но она уже работает только по моему велению

Ну что ты как маленький то?

Кроме GetProcAddress других способов не знаешь?
Учись студент :)



var
 ImportEntry: PImageImportDescriptor;
 Thunk: PImageThunkData;
 Protect, newProtect: DWORD;
 ImageBase: Cardinal;
 DOSHeader: PImageDosHeader;
 NTHeader: PImageNtHeaders;
begin
 Result := False;
 if OldProc = nil then Exit;
 if NewProc = nil then Exit;
 ImageBase := GetModuleHandle(nil);

 // Зная структуру PE заголовка - находим начало таблицы импорта
 DOSHeader := PImageDosHeader(ImageBase);
 if IsBadReadPtr(Pointer(ImageBase), SizeOf(TImageNtHeaders)) then Exit;
 if (DOSHeader^.e_magic <> IMAGE_DOS_SIGNATURE) then Exit;
 NTHeader := PImageNtHeaders(DWORD(DOSHeader) + DWORD(DOSHeader^._lfanew));
 if NTHeader^.Signature <> IMAGE_NT_SIGNATURE then Exit;
 ImportEntry := PImageImportDescriptor(DWORD(ImageBase) +
     DWORD(NTHeader^.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress));
 if DWORD(ImportEntry) = DWORD(NTHeader) then Exit;

 if ImportEntry <> nil then
 begin
   // Бежим по записям таблицы ...
   while ImportEntry^.Name <> 0 do
   begin
       Thunk := PImageThunkData(DWORD(ImageBase) +
         DWORD(ImportEntry^.FirstThunk));
       // ... пока таблица не кончится ...
       while Thunk^._function <> nil do
       begin
         // тут работаем с Thunk^._function          
         // к примеру через ImageRvaToVa или по другому
         Inc(PChar(Thunk), SizeOf(TImageThunkData32));
       end;
     ImportEntry := Pointer(Integer(ImportEntry) + SizeOf(TImageImportDescriptor));
   end;
 end;
end;


 
BiN ©   (2005-12-29 11:23) [23]

По-моему, попытки перехвата/предупреждения оного приводят к "состоянию гонок", когда ни одна из сторон не имеет какого-либо преимущества, кроме опыта и знаний в предметной  области.


 
Rouse_ ©   (2005-12-29 11:26) [24]

Попытки перехвата с целью мониторинга изменений файловой системы вообще ни к чему не приведут т.к. случаи модификации из RING0 через драйвер фильтр они вообще не поймают...


 
Игорь Шевченко ©   (2005-12-29 11:30) [25]


> т.к. случаи модификации из RING0 через драйвер фильтр они
> вообще не поймают...


переведи


 
Rouse_ ©   (2005-12-29 11:35) [26]

Есть драйвер который по аналогии в sysinternal-овским мониторит обращения к ФС и создает отдельный лог, к примеру... :)


 
Игорь Шевченко ©   (2005-12-29 11:47) [27]

Rouse_ ©   (29.12.05 11:35) [26]

И что ? Нельзя отловить создание его лога или что ?


 
Rouse_ ©   (2005-12-29 12:13) [28]

Да, перехватом АПИ из RING3 нельзя...


 
Игорь Шевченко ©   (2005-12-29 12:37) [29]

Rouse_ ©   (29.12.05 12:13) [28]

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


 
Rouse_ ©   (2005-12-29 12:53) [30]

Игорь, ну так я про это и речь веду :)


 
oleggar ©   (2005-12-29 12:58) [31]

по поводу одного сообщения -
"Есть драйвер который по аналогии в sysinternal-овским мониторит обращения к ФС и создает отдельный лог, к примеру... :)".
Как называется и где искать ?
Я нашел пока один ,alfamonitor ,так он стоит 2000 долл и там глюков немало .Удаления файлов не перехватываются ,переименования не перехватываются,хотя такое событие в копмоненте есть.
Потому пользуюсь драйвером для перехвата чтения/записи и перехватом сообщений для распознавания удалений и переименований.


 
Rouse_ ©   (2005-12-29 13:00) [32]


> Как называется и где искать ?

Переписывается из sysinternal-овского, просто функционал записи лога в код добавь и все :)


 
oleggar ©   (2005-12-29 15:30) [33]

там исходник на C++ .если бы бы очень рад .к сожалению,синтаксис С++ знаю в общем ,но реально на нем писать мне тяжело.


 
BiN ©   (2005-12-29 15:54) [34]


> oleggar ©   (29.12.05 15:30) [33]
>
> там исходник на C++ .если бы бы очень рад .к сожалению,синтаксис
> С++ знаю в общем ,но реально на нем писать мне тяжело.

А где там? Ссылкой не поделишься.
На sysinternals исходников filemon-а нету давно.


 
oleggar ©   (2005-12-29 16:07) [35]

и правда ,исходников и я не вижу .просто они все пишут на С++ ,если где и остался исходник ,он на С наверняка.


 
Rouse_ ©   (2005-12-29 17:08) [36]


> Причем от одного из них ты никаким боком не сможешь защититься.

случаем не про KeServiceDescriptorTable речь?


 
Игорь Шевченко ©   (2005-12-29 17:09) [37]

Rouse_ ©   (29.12.05 17:08) [36]

Она к GetProcAddress не относится


 
Rouse_ ©   (2005-12-29 17:20) [38]

Эээ, я чуть не о том. Я про пресловутый перехват :)

У Шрайбера кажется было:

  mov eax, Номер ZwXXX из KeServiceDescriptorTable
  lea edx, [esp+04h]
  int 2eh


Сответсвенно перехват вызовов ZwCreateFile, IoCreateFile, ZwOpenFile и т.п. может помочь "Отцам Русской Демократии" :)
Естественно через драйвер :)


 
The_scorpion ©   (2005-12-29 18:08) [39]


> mov eax, Номер ZwXXX из KeServiceDescriptorTable
>   lea edx, [esp+04h]
>   int 2eh

Можно про это по подробнее.


> Rouse_ ©

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


 
Rouse_ ©   (2005-12-29 18:18) [40]

Получу настоящий адрес вызываемой функции и выполню ее.
Также смотри хелп по ImageRvaToVa...

> Можно про это по подробнее.
Шрайбера под рукой нет.

Если в общих чертах то:

Почти все подобные вызовы (Zw*) имеют в теле функции следующее:

  mov eax, NumberFunction
  lea edx, [esp+04h]
  int 2eh

где NumberFunction есть номер вызываемой функции в таблице системных сервисов, которая находится по адресу, содержащемуся в глобальной переменной KeServiceDescriptorTable. Данная переменная указывает на следующую структуру:

  typedef struct SystemServiceDescriptorTable
  {
    SSD   SystemServiceDescriptors[4];
  } SSDT, *LPSSDT;

Соответсвенно перехватом системных вызовов ядра, таких как:
ZwCreateFile, ZwOpenFile, IoCreateFile, ZwQueryDirectoryFile, ZwClose ты можешь выполнить сабжевую задачу.



Страницы: 1 2 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.015 c
2-1147596208
Алена
2006-05-14 12:43
2006.05.28
TRichEdit


1-1145336420
Alextp
2006-04-18 09:00
2006.05.28
Выравнивание shortcut-ов в меню


2-1147166724
seleman
2006-05-09 13:25
2006.05.28
xpmanifest


3-1143620446
Rule
2006-03-29 12:20
2006.05.28
Как заставить recordset в ADO открывать запрос с таймаутом ?


15-1146758657
Axis_of_Evil
2006-05-04 20:04
2006.05.28
реестр + запуск программы с параметром





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский