информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяАтака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / operating systems
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[NT] при вызове ZwCreateFile() из хука система виснет 05.01.03 01:57  
Автор: vim Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Я перехватил ZwCreateFile().
Внутри моего перехватчике мне нужно прочитать содержимое директории. Для этого я открываю ее с помощью настоящего ZwCreateFile().
На этом, собственно, все и заканчивается. Система виснет.

Вкратце, это выглядит так. Упростил все до предела.
Перехватчик ничего не делает, просто вызывает вначале MyRead(), а затем оригинальный обработчик.

Без обращения к MyRead() все работает стабильно.

// my hooked function:
ZwCreateFileHandler(...)
{
  MyRead();
  g_ZwCreateFileOrig(...)
};

---

Метод MyRead()
В методе MyRead() я пытаюсь открыть директорию, и если она открылась успешно, то тут же закрываю ее.

void MyRead()
{
	UNICODE_STRING Path1;
	OBJECT_ATTRIBUTES DirectoryAttributes;
	NTSTATUS NtStatus;
	HANDLE hDir;
	IO_STATUS_BLOCK IoStatusBlock;

	DLogStr("\n\nMyRead()");

	RtlInitUnicodeString( &Path1, L"\\??\\C:\\" );

	// Initialize directory name and attributes
	InitializeObjectAttributes(&DirectoryAttributes, &Path1,
							   OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, 0, 0);

	NtStatus = g_ZwCreateFileOrig(&hDir, GENERIC_READ | SYNCHRONIZE,
		&DirectoryAttributes, &IoStatusBlock, 0, 0, 
		FILE_SHARE_READ, FILE_OPEN, 
		FILE_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT, 
		0, 0);
	
	DLogStr("\n");
	if (!NT_SUCCESS(NtStatus)) 
	{
		DLogStr("<FONT COLOR=RED> Failed, NtStatus = ");
		DLogHex( NtStatus );
		DLogStr("</FONT>");
	}
	else 
	{
		DLogStr("<FONT COLOR=BLUE>Directory opened successfully, NtStatus = ");
		DLogHex( NtStatus );
		DLogStr("</FONT>");
	}

	if (NtStatus == STATUS_SUCCESS) ZwClose( hDir );
};

---

Сам по себе метод MyRead() тоже работает нормально.
Я вызывал его из DriverEntry() - все работает.

Выходит, что внутри ZwCreateFile() нельзя вызывать ZwCreateFile() дважды?

Пробовал запускать его внутри WorkItem, но тоже виснет

Есть какие-нибудь мысли?
[NT] а ты уверен, что g_ZwCreateFileOrig у тебя правильный? 05.01.03 05:17  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
и на момент вызова ни чем не затерся?

Как ты его получаешь, и где хранишь?
нашел ошибку, ZwCreateFile() здесь не причем 08.01.03 18:28  
Автор: vim Статус: Незарегистрированный пользователь
<"чистая" ссылка>
К хуку ZwCreateFile() это никакого отношения не имеет.
Там просто в функция одна была, в ней поинтер не всегда занулялся.
Функция вроде старая, работала давно и стабильно, баг не проявлялся
А сейчас добавил новый код, очевидно по другому скомпановалось, вот и стало проявляться.
Такие баги поди найди, хрен поймешь, повыкидывал все что дописал, оставил старый код что до сих пор стабильно работал, все равно начало виснуть. Ладно б если сразу черный экран и на перезагрузку, а то ведь не сразу падает, работает еще некоторое время, на каком-нить действии - раз, и черный экран
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach