Bagaimana cara menyebabkan BSOD pada Windows XP dan versi yang lebih baru?

14

Apakah ada cara untuk menyebabkan BSOD secara terprogram pada Windows XP dan versi yang lebih baru? Bagaimana?

BTW hanya untuk mengklarifikasi, ini bukan untuk tujuan jahat. Klien diminta untuk dapat mematikan / me-reboot terminal pada LAN mereka dengan cara ini. Ketika saya bertanya mengapa, mereka berkata karena itu lebih cepat daripada reboot normal ... :)

(Aku penasaran bagian mana dari "secara programatik" yang orang-orang tidak mengerti yang memigrasikan ini ke Pengguna Super. Duh.)

Tamás Szelei
sumber
18
Jika Anda menemukan satu yang tidak melibatkan penulisan driver, beri tahu Microsoft sehingga mereka dapat memperbaikinya.
Erik
13
Um Ini lebih cepat daripada reboot normal karena suatu alasan - itu tidak selalu ditutup dengan anggun. Jika Anda memiliki program yang dimatikan dengan sangat lambat maka mungkin tidak ada masalah untuk menghentikannya. Jika Anda secara paksa mematikan atau meninggalkan sesuatu yang terlalu dekat dengan perangkat keras I / O maka Anda dapat berakhir dengan sistem file yang rusak, dll. masalah Anda tentang juga ...)
12
Klien Anda perlu dilembagakan dan kondisi mentalnya diikuti oleh tim medis lebih dekat.
Darin Dimitrov
9
Ambulans umumnya juga lebih cepat daripada mengendarai mobil Anda sendiri ke rumah sakit. Itu tidak menjadikannya mode perjalanan yang disukai.
FreeAsInBeer
8
Beri tahu klien Anda untuk menekan dan menahan tombol daya selama 6 detik. Atau hanya menyentak kabel listrik, itu lebih cepat.
Hans Passant

Jawaban:

15

Driver keyboard dapat dikatakan menyebabkan BSOD:

HKLM\SYSTEM\CurrentControlSet\Services\kbdhid\Parameters

atau (untuk keyboard PS / 2 yang lebih lama)

HKLM\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters

Dan di sana mengatur REG_DWORDnama CrashOnCtrlScrolluntuk 1.

Setelah reboot berikutnya, Anda dapat memaksa layar biru dengan Ctrl+ ScrollLk+ ScrollLk. Kode pemeriksaan bug dalam hal ini adalah 0xE2 (MANUALLY_INITIATED_CRASH).

Jika Anda benar - benar menginginkan metode terprogram, Anda perlu menemukan lubang pada beberapa driver pada mesin itu atau menulis dan menginstal driver sederhana yang memanggil salah satu KeBugCheckatau KeBugCheckEx.

Selamat bersenang-senang ;)

Catatan-samping: sangat bermanfaat untuk sengaja membuat crash seperti ini untuk penulis driver atau bahkan ketika berhadapan dengan malware. Jika Anda mengonfigurasi sistem Anda untuk membuat dump memori penuh, Anda kemudian akan memiliki gambar sistem yang sedang berjalan yang dapat dianalisis lebih lanjut. Pertimbangkan kasus-kasus seperti jalan buntu di mana debugger tidak selalu membantu dalam semua kasus.

0xC0000022L
sumber
4
Apakah ini benar? Itu keren jika itu! (Tidak, saya tidak berminat mengujinya di komputer mana pun.)
Andreas Rejbrand
3
Ya, itu sebenarnya tidak dimaksudkan sebagai lelucon. Ini adalah sesuatu yang telah digunakan penulis driver untuk beberapa waktu, meskipun saya tidak ingat dari atas kepala saya apa lokasi registri itu. Harus mencarinya di catatan saya.
0xC0000022L
Saya mengalami bsod dengan mengetikkan printscreen atau terlalu banyak memori dalam menggunakan Ram atau Hardisk internal. Mungkin mengeksploitasi sistem juga.
Tech-IO
1

Tidak yakin persis bagaimana menyebabkannya, tapi saya percaya pada Vista dan 7, defaultnya adalah mematikan kegagalan sistem dan tidak menunjukkan BSOD.

FreeAsInBeer
sumber
Tidak apa-apa, saya ingin perilaku itu.
Tamás Szelei
1
@FreeAsInBeer: Sebenarnya itu karena pengaturan sistem Anda memintanya untuk reboot setelah crash. Ini dapat diubah di tab Advanced properti komputer Anda. Juga, dump crash yang dibuat saat ini biasanya mini dump secara default, itulah sebabnya reboot terjadi begitu cepat sehingga Anda tidak bisa melihat layar biru (secara harfiah). Tapi itu ada di sana, percayalah;)
0xC0000022L
1
@STATUS_ACCESS_DENIED: Saya tahu, saya hanya memberi tahu dia bahwa default untuk variabel ini diatur untuk tidak menampilkan BSOD, jadi dia tahu untuk memeriksa properti itu jika dia tidak mendapatkan yang seperti yang diharapkan.
FreeAsInBeer
@FreeAsInBeer: cukup adil :)
0xC0000022L
1

Secara umum, BSOD terjadi ketika ada sesuatu yang salah dalam sistem operasi atau perangkat keras. Mendapatkan sesuatu yang salah di dalam salah satu dari mereka adalah, pada dasarnya, agak sulit, karena penulis sistem operasi dan vendor perangkat keras sama-sama tidak menghargai insinyur perangkat lunak yang buruk membuat produk mereka terlihat buruk dan merusak pengalaman pengguna mereka.

Menulis driver adalah salah satu dari beberapa cara untuk cukup dekat dengan sistem operasi dan perangkat keras dan menyebabkan kesalahan seperti itu. Tentu saja, memasang driver seperti itu bukanlah sesuatu yang biasanya Anda lakukan tanpa pengetahuan yang disengaja dan hak administratif, jadi menggunakan ini untuk tujuan jahat terbukti agak sulit. Dengan akses semacam itu, Anda bisa melakukan lebih banyak kerusakan tanpa BSOD atau sarana semacam itu.

Sion Sheevok
sumber
1

BSOD adalah panik kernel. Ini berarti bagian dari kernel, inti dari sistem operasi melakukan sesuatu yang sangat buruk. Itu mungkin mencorat-coret memori, mungkin mengeksekusi kode yang seharusnya tidak. Secara pemrograman, Anda perlu mendapatkan kode di ruang kernel, dan kemudian memicunya sesuai permintaan. Agak berisiko untuk server prod.

Mesin Windows normal memiliki banyak status dalam proses dan dalam kernel. Apapun pembersihan yang Anda butuhkan untuk menjaga agar negara tetap konsisten, yah, Anda hanya perlu membuatnya singkat.

Secara khusus BSOD adalah (biasanya) bug kernel (atau driver), kernel dalam keadaan buruk, sehingga buruk rasanya tidak bisa membersihkan dan lebih suka reboot, kehilangan kondisi baik apa pun yang dimilikinya hanya karena ia tidak tahu apa yang baik dan apa yang buruk. Buffer apa pun tidak dapat disiram ke disk. Kemudian akan mencoba untuk membersihkan saat reboot, tetapi kehilangan banyak konteks pada shutdown / panik sehingga akan menjadi pembersihan konservatif, harus mengambil sisa-sisa makanan baik dan buruk dari panik.

Jadi, sebagian dari keuntungan Anda pada shutdown hilang pada startup, karena sekarang perlu mencari tahu di mana ia mendapatkan itu kaki dipotong dari bawah sendiri. Perlu menjalankan chkdsk dan membersihkan semua blok disk yang berada dalam kondisi tulis parsial. Cakram USB banyak cache. Anda bisa mematikan caching yang akan membuatnya lebih kecil kemungkinan kehilangan data saat macet, tapi kemudian caching tidak menghilangkan kecepatan. File mana yang ingin Anda hilangkan?

Singkatnya, ini adalah ide yang buruk. Mesin produksi apa pun yang mengalami hal ini mungkin dalam keadaan tidak stabil bahkan setelah pembersihan. Ini buruk.

Saya akan mengatakan hanya untuk menerima pukulan shutdown dan restart. Anda akan kehilangan penghematan waktu berapa pun yang Anda pikir Anda dapatkan saat pertama kali Anda perlu membangun kembali server karena server tidak mau boot atau program Anda tidak bisa mulai.

Homolka yang kaya
sumber
Anda melewatkan intinya. Ada alasan bagus untuk menyebabkan BSOD sesuai permintaan saat men-debug masalah dengan driver yang Anda tulis. Namun, saya pikir pertanyaan ini seharusnya tidak pernah dimigrasikan dari SO ke sini, karena sifatnya.
0xC0000022L
@STATUS_ACCESS_DENIED Saya setuju dengan pernyataan Anda, tetapi jika Anda ingat pada pertanyaan awal, itu tidak ada hubungannya dengan debugging, tapi jalan pintas untuk mematikan sistem. Bukan alasan yang bagus menurut saya.
Rich Homolka
0

Harus menyebutkan bahwa proses membunuh csrss.exe akan membuat BSOD. Tetapi tidak pada Windows terbaru (8, 8.1).

pai
sumber
Ini dapat dilakukan oleh suatu aplikasi. Siapa pun dapat membuat aplikasi seperti itu di Visual Studio Express (gratis).
pai
Ini adalah kode 0xC000021A ( STATUS_SYSTEM_PROCESS_TERMINATED), btw.
0xC0000022L
0

Cuplikan kode dari https://www.mpgh.net/forum/showthread.php?t=1100477 berfungsi pada Windows 10.17134

#include <windows.h>
#pragma comment(lib, "ntdll.lib")

extern "C" NTSTATUS NTAPI RtlAdjustPrivilege(ULONG Privilege, BOOLEAN Enable, BOOLEAN CurrentThread, PBOOLEAN OldValue);
extern "C" NTSTATUS NTAPI NtRaiseHardError(LONG ErrorStatus, ULONG NumberOfParameters, ULONG UnicodeStringParameterMask,
PULONG_PTR Parameters, ULONG ValidResponseOptions, PULONG Response);

void BlueScreen()
{
    BOOLEAN bl;
    ULONG Response;
    RtlAdjustPrivilege(19, TRUE, FALSE, &bl); // Enable SeShutdownPrivilege
    NtRaiseHardError(STATUS_ASSERTION_FAILURE, 0, 0, NULL, 6, &Response); // Shutdown
}

Tampaknya tidak ada jejak di Log Acara. Pasti akan ada jejak di minidump?

birdwes
sumber