Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

file hooks [D6]


Страницы:   1 2 3

oleggar ©   (2005-12-23 19:51:00) 

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


Rouse_   (2005-12-29 17:20:00) [21]

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

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

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


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


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

Rouse_ ©   (29.12.05 17:08) [36]

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


Rouse_   (2005-12-29 17:08:00) [23]


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

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


oleggar   (2005-12-29 16:07:00) [24]

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


BiN   (2005-12-29 15:54:00) [25]


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

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


oleggar   (2005-12-29 15:30:00) [26]

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


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


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

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


oleggar   (2005-12-29 12:58:00) [28]

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


Rouse_   (2005-12-29 12:53:00) [29]

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


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

Rouse_ ©   (29.12.05 12:13) [28]

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


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

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


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

Rouse_ ©   (29.12.05 11:35) [26]

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


Rouse_   (2005-12-29 11:35:00) [33]

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


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


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


переведи


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

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


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

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


Rouse_   (2005-12-29 11:01:00) [37]


> А как ты обратишься к этой таблицы? Через 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;


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

The_scorpion ©   (28.12.05 19:59) [19]

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


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

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


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


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

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


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо