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

Вниз

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

 
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 ты можешь выполнить сабжевую задачу.


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

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


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

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


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


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

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


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

The_scorpion ©


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


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

Rouse_ ©   (29.12.05 18:18) [40]


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


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


 
Rouse_ ©   (2005-12-30 01:20) [45]


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

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


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

sysenter/sysext
IDA 4.6 <- ntdll.dll


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


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

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


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


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


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


 
Rouse_ ©   (2005-12-30 11:33) [49]


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

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


 
Rouse_ ©   (2005-12-30 13:16) [50]

call edx
  ret xxxxx

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


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

Rouse_ ©   (30.12.05 13:16) [50]


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


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


 
Rouse_ ©   (2005-12-30 13:48) [52]

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


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


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


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


 
Rouse_ ©   (2005-12-30 14:01) [54]


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

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


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

В 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.


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

n0name   (30.12.05 21:47) [55]


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


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

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

Rouse_ ©   (30.12.05 14:01) [54]

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


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


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

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


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

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

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


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

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



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

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

Наверх




Память: 0.58 MB
Время: 0.029 c
1-1145370011
Darvin
2006-04-18 18:20
2006.05.28
Отловить изменение текстовых свойств компонента


4-1141928957
Tristania
2006-03-09 21:29
2006.05.28
Добавление пункта меню


2-1147154902
Sergey Masloff
2006-05-09 10:08
2006.05.28
Проблема с кодировками. Написал плагин к Outlook но сабж...


2-1147451903
Vitalik__
2006-05-12 20:38
2006.05.28
Ищу компонент делфи


2-1147336472
kyn66
2006-05-11 12:34
2006.05.28
Запутался в запросе