ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

06.12.2006, 17:24
|
|
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме: 1290766
Репутация:
1236
|
|
2Proteus: прикинь чувак, Руссинович терь на мелкомягких хостится) В принципе иначе случиться и не могло)
__________________
 
snow white world wide
|
|
|

06.12.2006, 17:25
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
А все таки, это меня плюсчит или там обработки исключений нет?))
|
|
|

06.12.2006, 18:26
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
на вмваре выскакивает driver_irql_not_less_or_equal
интересно отчего. походу я там чето намутил, хотя... irql я не трогал
|
|
|

06.12.2006, 18:35
|
|
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме: 1290766
Репутация:
1236
|
|
ес не срабатывает видимо есть на то предпосылки, сижу с сайсом смотрю)
__________________
 
snow white world wide
|
|
|

06.12.2006, 18:40
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
у меня сайса нету на вмваре, ставить влом+)
но на реальном компе все работает.
Правда, под вмварей пришлось слегка изменить код маппинга секции, потому что там косяк какой-то был). Я пропатчил, калгейт вызывается нормально, но, видимо, при вызове ExAllocateWithPoolTag слетает винда. Почему-то irql выше, чем надо. Надо бы разобраться, конечно.. а может просто впихнуть KeLowerIrql? +)
Насколько я понял, у кода в режиме ядра с какого-то хрена стоит IRQL выше или равен DPC/Dispatch, на котором доступа только неподкачиваемая память, а ExAllocatePoolWithTag пытается выделить подкачиваемую память. Может просто снизить IRQL до APC или Passive?
Последний раз редактировалось _Great_; 06.12.2006 в 18:45..
|
|
|

06.12.2006, 18:48
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
Хм.. у тебя первый аргумент к 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..
|
|
|

06.12.2006, 20:12
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
Вообщем-то итог расследования - в вмваре вылетает БСоД при вызове R0_GetProcAddress с bugcheck-кодом DRIVER_IRQL_NOT_LESS_OR_EQUAL
Только я не секу, где в этой функции что-либо, что использует IRQL хоть как-нибудь.. там только арифметические операции по поиску экспорта ядра и функции в ней.
Правда, там есть вызов strcmp... может в нем дело.. попробую переписать, чтобы не юзать сишний рантайм
Последний раз редактировалось _Great_; 06.12.2006 в 20:17..
|
|
|

06.12.2006, 21:18
|
|
HARDstasy
Регистрация: 26.11.2004
Сообщений: 1,367
Провел на форуме: 4226592
Репутация:
2175
|
|
>>2Proteus: прикинь чувак, Руссинович терь на мелкомягких хостится) В принципе иначе случиться и не могло)
ога, была новость...
продался )
|
|
|

07.12.2006, 00:21
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
уря, все работает =)
повторил подвиг криса касперски и написал программулину, которая лочит 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..
|
|
|

25.01.2007, 16:22
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
Сегодня ковырял этот код и обнаружил, что запись из Idt потом не снимается )
То есть если после завершения программы запустить отдельно Int F0, то получим синий экран Page_fault_in_nonpaged_area, чего и следовало ожидать.
Как снять из Idt запись, просто забить нулями?
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|