Здравствуйте, Hacker_Delphi, Вы писали:
H_D>Здравствуйте, Kluge, Вы писали:
K>>Здравствуйте, Hacker_Delphi, Вы писали:
K>>Забавно. И как это его так?
H_D>в Direct3D выполняем такой вот код: H_D>
H_D>все, слет гарантирован... локализовал ошибку с четвертой попытки...
Братва — все очень просто на самом деле
Делаете так: пишете простейший драйвер, одна функция DriverEntry — а в теле тоже одна функция KeBugCheckEx — она то и вызывает Blue Screen Of Death
Потом пишете w32 приложение которое динамически загружает этот драйвер и запускает его!
Привожу свой собственны код, под платформой NT работает гарантированно!!!
ДРАЙВЕР:
#include <ntddk.h>
NTSTATUS DriverEntry( IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath )
{
// Oups!!! We have just sent our belowed Windows to death. :-)))
KeBugCheckEx( ( ULONG ) NULL, ( ULONG_PTR ) NULL, ( ULONG_PTR ) NULL, ( ULONG_PTR ) NULL, ( ULONG_PTR ) NULL );
};
Win32 ПРИЛОЖЕНИЕ:
#include <windows.h>
#include <assert.h>
static const char* m_DriverName = "oups.sys";
/***********************************************************************************************************
Name: LoadDriver
Description: This function is to load driver dinamically and start it. This procedure should send our
Windows to blue screen of death!!!
Note:
Arguments:
Return Value:
***********************************************************************************************************/void __declspec( noreturn ) LoadDriver() throw()
{
SC_HANDLE hSCManager = NULL;
SC_HANDLE hService = NULL;
// The OpenSCManager function establishes a connection to the service control manager on the
// specified computer and opens the specified service control manager database
hSCManager = OpenSCManager ( NULL, NULL, SC_MANAGER_ALL_ACCESS );
assert( hSCManager != NULL || hSCManager != INVALID_HANDLE_VALUE );
// Compile full name of the driver oups.sys, it is assumed to be placed in the oups.exe directory
LPTSTR m_FullDriverName = static_cast< LPTSTR > ( malloc( sizeof( TCHAR ) * 256 ) );
GetCurrentDirectory( 256, m_FullDriverName );
strcat( m_FullDriverName, "\\" );
strcat( m_FullDriverName, m_DriverName );
// The CreateService function creates a service object and adds it to the specified service
// control manager database
hService = CreateService( hSCManager, m_DriverName, m_DriverName, SERVICE_ALL_ACCESS,
SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, m_FullDriverName,
NULL, NULL, NULL, NULL, NULL );
if ( hService != NULL || hService != INVALID_HANDLE_VALUE )
{
// The OpenService function opens an existing service, it means that The CreateService function
// has been failed
hService = OpenService( hSCManager, m_DriverName, SERVICE_ALL_ACCESS );
assert( hService != NULL || hService != INVALID_HANDLE_VALUE );
};
// When a driver service is started, the StartService function does not return until the device driver
// has finished initializing. Oups! - our driver will never finish its initialization! :-)))
StartService( hService, 0, NULL );
// It's a pitty that the system will never reach this line! :-)))
// and will never get out of this routine! :-)
free( m_FullDriverName );
CloseServiceHandle ( hService );
CloseServiceHandle ( hSCManager );
};
INT WINAPI WinMain( IN HINSTANCE hInstance, IN HINSTANCE hPrevInstance, IN LPSTR lpCmdLine, IN int nShowCmd )
{
LoadDriver();
return ( TRUE );
};
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
Здравствуйте, alfarn, Вы писали:
A>С помощью какого кода можно вызвать синий экран?
А можно так и жто документированно
Windows 2000 позволяет прервать свою работу, вызвав тем самым синий экран смерти и сгенерировав дамп памяти Memory.dmp, при помощи двойного нажатия клавиши Scroll Lock при удержанной правой клавише Ctrl. Для использования этой функции необходимо выполнить следующие изменения в реестре:
1. Запустите редактор реестра (regedit.exe)
2. Откройте ветку HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters
3. Создайте новый ключ с именем CrashOnCtrlScroll (Edit — New — DWORD)
4. Дважды щелкните на созданном ключе и укажите в нем любое ненулевое значение, например 1. Нажмите ОК
5. Закройте редактор реестра и перегрузите систему
Теперь если вы нажмете правый Ctrl, и, удерживая его, дважды нажмете Scroll Lock, система прекратит свою работу и выдаст сообщение о MANUALLY_INITIATED_CRASH (0xE2). Эта комбинация может сработать в тех ситуациях, когда не действует Ctrl+Alt+Del.
Да все это конечно хорошо, как быть с тем если нужно незаметно для пользователя умертвить его компьютер, ты же его не заставишь нажать Ctrl+Scroll+Scroll
Плюс вторая проблема, мой предыдущий код работает только под админом, под юзером система не позволляет устанавливать драйвера или динамически их загружать как сервисы и запускать!
Нужно придумать универсальный способ!
Мы — маньяки, должны помогать друг другу!
Re[9]: Как вызвать синий экран смерти?
От:
Аноним
Дата:
14.11.03 09:20
Оценка:
A_M>Да все это конечно хорошо, как быть с тем если нужно незаметно для пользователя умертвить его компьютер, ты же его не заставишь нажать Ctrl+Scroll+Scroll
A_M>Да все это конечно хорошо, как быть с тем если нужно незаметно для пользователя умертвить его компьютер, ты же его не заставишь нажать Ctrl+Scroll+Scroll
A_M>Плюс вторая проблема, мой предыдущий код работает только под админом, под юзером система не позволляет устанавливать драйвера или динамически их загружать как сервисы и запускать!
A_M>Нужно придумать универсальный способ!
А зачем это делать — . Кроме как получить полный(или другие варианты) дамп памяти.
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
Каким это образом! SendMessage или PostMessage отпадает сразу, нет hwnd и к тому же системный сервис (а именно он отвечает за обработку этой комбинации клавиш) неполучит этого сообщения, даже если бы ты знал ProcessID, что тоже нериально. Если ты думаешь, что ты поставишь глобальный системный хук на клавиатуру, и потом по команде сверху сформируешь кейсток с Ctrl+Scroll+Scroll и отправишь его дальше по цепочке фильтров вызвав CallNextHook — то это тоже несработает ( точно не знаю почему, связано с системными клавишами, сначала они обрабатываются внутренними механизмами системы, а затем передеются установленным хукам) т.е. передача Ctrl+Scroll+Scroll вниз по цепочке фильтров хуков невызовет желаемого результата, так как обрабочик (системный сервис) уже отработал и не ждет никаких клавиш.
Если ты сделал это программно будь добр подкинь код!
З>А зачем это делать — . Кроме как получить полный(или другие варианты) дамп памяти.
Фишка же не втом зачем это делать, а как это сделать!
А зачем есть масса причин ну ненравится тебе какой нибудь user, приконектился к своей проге по tcp/ip на его нашине и отправил винду в нирвану пользоваться там всякими RAdmin'ами это нам программерам не с руки!
Здравствуйте, Hacker_Delphi, Вы писали:
H_D>все, слет гарантирован... локализовал ошибку с четвертой попытки...
Ну это еще от драйверов зависит. У NVidia, например, BSOD
запросто получается если создать в видеопамяти текстурку, и там же просто
поверхность большего размера, чем текстурка. И сблитить одну в другую.
Здравствуйте, Alex_Mistery, Вы писали:
A_M>А зачем есть масса причин ну ненравится тебе какой нибудь user, приконектился к своей проге по tcp/ip на его нашине и отправил винду в нирвану пользоваться там всякими RAdmin'ами это нам программерам не с руки!
Здравствуйте, ABCDEFG, Вы писали:
ABC>Здравствуйте, alfarn, Вы писали:
A>>С помощью какого кода можно вызвать синий экран?
ABC>А его никак не зовут, он сам приходит.