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) и каким приложением ,действия пользователя не интересны (вообще следить нужно за одним приложением ,то есть перехватывать его файловые операции ,но если можно за всеми ,я буду фильтровать имена приложений).


pilot   (2006-03-07 11:36:00) [1]

http://forum.vingrad.ru/index.php?showtopic=21411&view=findpost&p=343749


n0name   (2005-12-31 08:05:00) [2]


> С наступающим!

Тебе того же, чтоб все твои желания сбылись =)


> Это факт. Вот только отслеживать номера сервисов от сервис-
> пака к сервис паку дело очень утомительное.

Динамический дизасм ntdll.dll, для этого можно использовать простой дизасм длин.

PS: Всех форумчан с НГ =)


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

n0name   (30.12.05 21:47) [55]


> В WinXP можно юзать и Int 2Eh, никто не запретит %)


Это факт. Вот только отслеживать номера сервисов от сервис-пака к сервис паку дело очень утомительное.

С наступающим!

Rouse_ ©   (30.12.05 14:01) [54]

Взаимно, Саша, удачи во всем!


n0name   (2005-12-30 21:47:00) [4]

В WinXP можно юзать и Int 2Eh, никто не запретит %)
Вот пример для SP0.
program Int2EhInterface;

type
DWORD = Cardinal;
PChar = Pointer;
NTSTATUS = Integer;

PDWORD = ^DWORD;

function MessageBoxA(HWND: DWORD; Msg, Capt: PChar; uType: DWORD): Integer; stdcall; external 'user32.dll';

const
Msg: array [0..8] of char = 'Test Msg'#0;
Capt: array [0..9] of char = 'Test Capt'#0;

function DoInt2Eh(SysN: Integer): NTSTATUS; stdcall; assembler;
asm
mov eax, [ebp + 8]
lea edx, [ebp + 20]
int 2Eh
end;

function ZwTerminateProcess(hProcess: DWORD; uCode: DWORD): NTSTATUS; stdcall; assembler;
asm
push 101h
call DoInt2Eh;
end;

function ZwWriteVirtualMemory(hProcess: DWORD; BaseAddress: Pointer; Buffer: Pointer; Size: DWORD; bw: PDWORD): NTSTATUS;
stdcall; assembler;
asm
push 115h
call DoInt2Eh
end;

procedure DoMessage;
begin
MessageBoxA(0, @Msg, @Capt, 0);
end;

var
Buf: DWORD;

begin
Buf := $6C6F6F43;
DoMessage;
ZwWriteVirtualMemory(DWORD(-1), @Msg, @Buf, 4, nil);
DoMessage;
ZwTerminateProcess(DWORD(-1), 0);
end.


Rouse_   (2005-12-30 14:01:00) [5]


> Праздник в разгаре, однако

:)))
С наступающим :)


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


> Как было отмечено в ондом из постом


Праздник в разгаре, однако


Rouse_   (2005-12-30 13:48:00) [7]

О как...
Век живи - век учись, а все равно дураком помрешь :) Пасибо...


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

Rouse_ ©   (30.12.05 13:16) [50]


> Секунду, а где вызов   int 2eh?


а его нету. Как было отмечено в ондом из постом, адрес, на который ссылается edx, является адресом команды sysenter


Rouse_   (2005-12-30 13:16:00) [9]

call edx
  ret xxxxx

Секунду, а где вызов   int 2eh? Это же шлюз между кольцами...


Rouse_   (2005-12-30 11:33:00) [10]


> Игорь Шевченко ©   (30.12.05 10:50) [48]

Ааа, ну это тогда не сильно принципиально - подход тотже остался :) Пасибо :)


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


> Просто хочется быть в курсе нововведений


   mov eax,function_number
   mov edx,7FFE0300h
   call edx
   ret xxxxx


n0name   (2005-12-30 07:15:00) [12]


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

NtQuerySysemInformation(SystemHandleInformation, ...)
NtQueryObject(ObjectTypeInformation, ...)
TypeName -> 'File'
NtQueryObject(ObjectNameInformation, ...)
ObjectName -> FileName


n0name   (2005-12-30 07:08:00) [13]

sysenter/sysext
IDA 4.6 <- ntdll.dll


Rouse_   (2005-12-30 01:20:00) [14]


> Уже не имеют. Уже другое содержимое.

Мммм, можно ссылочку? Или собственные исследования? Просто хочется быть в курсе нововведений, а времени как обычно не хватает по вечерам...


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

The_scorpion ©


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


Узнавать даже не требуется. Я сравню адрес с тем, что мне выдал GetProcAddress, если отличается, значит перехвачена либо GetProcAddress либо искомая функция.

Rouse_ ©   (29.12.05 18:18) [40]


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


Уже не имеют. Уже другое содержимое.


Rouse_   (2005-12-29 18:28:00) [16]


> А если и ImageRvaToVa перехватить?

Как сказал Игорь Шевченко - ""Жаба хитра, но маленький хрущ с винтом много хитрее ее" (с)"
Пойдем другим путем :)


Rouse_   (2005-12-29 18:26:00) [17]

Собственно что обьяснять, вот тебе пример драйвера реализующий такой функционал: http://rouse.front.ru/keservicedescriptortable.zip


The_scorpion   (2005-12-29 18:26:00) [18]

Так и думал что в ImageRvaToVa дело...хотел сейчас посмотреть, но sdk меня покинул, сюрприз блин.
А если и ImageRvaToVa перехватить?


Rouse_   (2005-12-29 18:18:00) [19]

Получу настоящий адрес вызываемой функции и выполню ее.
Также смотри хелп по 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 ты можешь выполнить сабжевую задачу.


The_scorpion   (2005-12-29 18:08:00) [20]


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

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


> Rouse_ ©

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


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

Наверх

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