ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #11  
Старый 06.12.2006, 17:24
sn0w
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме:
1290766

Репутация: 1236


По умолчанию

2Proteus: прикинь чувак, Руссинович терь на мелкомягких хостится) В принципе иначе случиться и не могло)
__________________


snow white world wide
 
Ответить с цитированием

  #12  
Старый 06.12.2006, 17:25
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

А все таки, это меня плюсчит или там обработки исключений нет?))
 
Ответить с цитированием

  #13  
Старый 06.12.2006, 18:26
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

на вмваре выскакивает driver_irql_not_less_or_equal
интересно отчего. походу я там чето намутил, хотя... irql я не трогал
 
Ответить с цитированием

  #14  
Старый 06.12.2006, 18:35
sn0w
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме:
1290766

Репутация: 1236


По умолчанию

ес не срабатывает видимо есть на то предпосылки, сижу с сайсом смотрю)
__________________


snow white world wide
 
Ответить с цитированием

  #15  
Старый 06.12.2006, 18:40
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

у меня сайса нету на вмваре, ставить влом+)
но на реальном компе все работает.

Правда, под вмварей пришлось слегка изменить код маппинга секции, потому что там косяк какой-то был). Я пропатчил, калгейт вызывается нормально, но, видимо, при вызове ExAllocateWithPoolTag слетает винда. Почему-то irql выше, чем надо. Надо бы разобраться, конечно.. а может просто впихнуть KeLowerIrql? +)

Насколько я понял, у кода в режиме ядра с какого-то хрена стоит IRQL выше или равен DPC/Dispatch, на котором доступа только неподкачиваемая память, а ExAllocatePoolWithTag пытается выделить подкачиваемую память. Может просто снизить IRQL до APC или Passive?

Последний раз редактировалось _Great_; 06.12.2006 в 18:45..
 
Ответить с цитированием

  #16  
Старый 06.12.2006, 18:48
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

Хм.. у тебя первый аргумент к ExAllocatePoolWithTag был равен 1 (подкачиваемый пул) - я сменил на 0 (неподкачиваемый пул) и все равно BSoD

updated: Попытка вызова KeGetCurrentIrql закончилась BSoD'ом с багчеком 8E

updated2: fuck
#define KERNEL_MODE_EXCEPTION_NOT_HANDLED ((ULONG)0x0000008EL)

updated3: поставил __try/__except, исключение перехватывается +)
Однако все равно вылетает driver_irql_not_less_or_equal
Видимо, что-то не то происходит не при выделении памяти... а наверное при возврате из прерывания

Последний раз редактировалось _Great_; 06.12.2006 в 19:03..
 
Ответить с цитированием

  #17  
Старый 06.12.2006, 20:12
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

Вообщем-то итог расследования - в вмваре вылетает БСоД при вызове R0_GetProcAddress с bugcheck-кодом DRIVER_IRQL_NOT_LESS_OR_EQUAL

Только я не секу, где в этой функции что-либо, что использует IRQL хоть как-нибудь.. там только арифметические операции по поиску экспорта ядра и функции в ней.
Правда, там есть вызов strcmp... может в нем дело.. попробую переписать, чтобы не юзать сишний рантайм

Последний раз редактировалось _Great_; 06.12.2006 в 20:17..
 
Ответить с цитированием

  #18  
Старый 06.12.2006, 21:18
ProTeuS
HARDstasy
Регистрация: 26.11.2004
Сообщений: 1,367
Провел на форуме:
4226592

Репутация: 2175


Отправить сообщение для ProTeuS с помощью ICQ
По умолчанию

>>2Proteus: прикинь чувак, Руссинович терь на мелкомягких хостится) В принципе иначе случиться и не могло)
ога, была новость...
продался )
 
Ответить с цитированием

  #19  
Старый 07.12.2006, 00:21
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

уря, все работает =)

повторил подвиг криса касперски и написал программулину, которая лочит KeBugCheck и KeBugCheckEx, просто делая ret.
После явного вызова KeBugCheckEx процесс продолжает выполняться.
При исключении поток виснет в ринг 0, но винда все равно продолжает относительно стабильно работать.

Кому интересно - вот код.
Программа при первом запуске ставит блокировку на KeBugCheckEx (записывает просто RET по адресу точки входа, хотя там слегка сложнее. KeBugCheckEx & KeBugCheck вызывают спец. внутреннюю функцию, которая и выполняет всю работу. Вот лок ставится именно на нее, чтобы вызовы и KeBugCheckEx и KeBugCheck и прямые вызовы этой функции шли лесом), при втором вызывает явно KeBugCheckEx и выводит в окошке результат:
Код:
int flag=-1;
DWORD bugcheck=0;

//
// WARNING! This routine should be executed in KERNEL MODE ONLY
//
void R0_DISCOVER_AND_EXECUTE()
{
	__try
	{
		bugcheck = (DWORD)R0_GetProcAddress("KeBugCheckEx");
		g_Address = (bugcheck + 0x1B) + *(DWORD*) (bugcheck + 0x17);

#define OPCODE 0x000018C2
		// Is hook already set?
		if(*(DWORD*)g_Address == OPCODE) // yes, hook is already set
		{
			__asm
			{
				push 4
				push 3
				push 2
				push 1
				push 0x2e
				mov eax, bugcheck
				call eax
			}
			flag = 0;
			return;
		}

		// Hook is not set, set it now!
		*(DWORD*)g_Address = OPCODE; // RETN 18h
		
		flag = 1;
	}
	__except(EXCEPTION_EXECUTE_HANDLER)
	{
		flag = -1;
	}
}

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
	g_KernBase = ring0_GetKernelBase();
	if(!g_KernBase)
		return MessageBox(0, "Couldn't discover kernel base address", "Error", MB_OK|MB_ICONWARNING);

	ring0_execute(R0_DISCOVER_AND_EXECUTE);
	switch(flag)
	{
	case -1:
		return MessageBox(0, "ring0 function failed because of exception", 0, MB_ICONERROR);
	case 1:
		return MessageBox(0, "Hook set successfully", "Done", MB_ICONINFORMATION);
	case 0:
		return MessageBox(0, "KeBugCheckEx call passed successfully!", "It works =)", MB_ICONINFORMATION);
	}

	return 0;
}
остальной код R0_GetProcAddress и код ring0.c взять у автора

Последний раз редактировалось _Great_; 07.12.2006 в 00:42..
 
Ответить с цитированием

  #20  
Старый 25.01.2007, 16:22
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

Сегодня ковырял этот код и обнаружил, что запись из Idt потом не снимается )
То есть если после завершения программы запустить отдельно Int F0, то получим синий экран Page_fault_in_nonpaged_area, чего и следовало ожидать.
Как снять из Idt запись, просто забить нулями?
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компиляция ядра Linux ??? VackuM *nix 9 05.10.2006 19:36
Как скрыть модуль ядра в линуксе? rent0n *nix 11 22.01.2006 03:19



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ