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

Вниз

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 вся ветка

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

Наверх




Память: 0.57 MB
Время: 0.029 c
2-1147458565
Succube
2006-05-12 22:29
2006.05.28
Сумма


2-1147187088
AlexanderMS
2006-05-09 19:04
2006.05.28
Проблема с PopupMenu в ListBox


15-1146588095
Yegorchic
2006-05-02 20:41
2006.05.28
Объяснительная


15-1145961309
Manic Mechanic
2006-04-25 14:35
2006.05.28
Сходил таки на керлинг, как приглашали


6-1138425550
Spose
2006-01-28 08:19
2006.05.28
Скачать файл с интернета