Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];

Вниз

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

Форум: "WinAPI";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.013 c
2-1147366443
BAngel
2006-05-11 20:54
2006.05.28
SaveDialog


1-1145424924
ZSergey
2006-04-19 09:35
2006.05.28
Как избавиться от библиотеки-паразита qtinft70.dll ...


15-1146420362
Meson_
2006-04-30 22:06
2006.05.28
Вопрос по железу. Принтер HP 2610: ошибка при включении


2-1147406779
Elen
2006-05-12 08:06
2006.05.28
Права сеанса


15-1146657828
alxx
2006-05-03 16:03
2006.05.28
Нужен программист в СПб на неполный (удаленка) рабочий день





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский