Форум: "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.02 c