Làm cách nào để tạo BSOD trên Windows XP và các phiên bản mới hơn?


14

Có cách nào để lập trình BSOD trên Windows XP và các phiên bản mới hơn không? Làm sao?

BTW chỉ để làm rõ, điều này không nhằm mục đích độc hại. Khách hàng yêu cầu có thể tắt / khởi động lại thiết bị đầu cuối trên mạng LAN của họ theo cách này. Khi tôi hỏi tại sao, họ nói vì nó nhanh hơn khởi động lại bình thường ... :)

(Tôi tò mò phần nào của "lập trình" làm những người đó không hiểu ai đã di chuyển cái này sang Siêu người dùng. Duh.)


18
Nếu bạn tìm thấy một cái không liên quan đến việc viết trình điều khiển, hãy thông báo cho Microsoft để họ có thể sửa nó.
Erik

13
Ừm. Nó nhanh hơn khởi động lại bình thường vì một lý do - nó không nhất thiết phải tắt một cách duyên dáng. Nếu bạn có một chương trình tắt thực sự chậm thì có thể không có vấn đề gì để làm gián đoạn chương trình. Nếu bạn buộc phải tắt hoặc từ bỏ bất cứ thứ gì quá gần với phần cứng I / O thì bạn có thể kết thúc với các hệ thống tập tin bị hỏng, v.v. Hãy xem xét nó tương đương với một phương tiện điều khiển mạng (mà tôi cho là có sẵn để bán và có thể giải quyết vấn đề của bạn cũng vậy ...)

12
Khách hàng của bạn cần được thể chế hóa và các điều kiện tinh thần của anh ta được theo dõi bởi một đội ngũ y tế chặt chẽ hơn.
Darin Dimitrov

9
Xe cứu thương cũng thường nhanh hơn lái xe của bạn đến bệnh viện. Điều đó không làm cho nó trở thành chế độ du lịch ưa thích.
FreeAsInBeer

8
Nói với khách hàng của bạn nhấn và giữ nút nguồn trong 6 giây. Hoặc chỉ cần giật dây nguồn, nhanh hơn.
Hans Passant

Câu trả lời:


15

Trình điều khiển bàn phím có thể được yêu cầu gây ra BSOD:

HKLM\SYSTEM\CurrentControlSet\Services\kbdhid\Parameters

hoặc (đối với bàn phím PS / 2 cũ hơn)

HKLM\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters

Và có thiết lập một REG_DWORDtên CrashOnCtrlScrollđể 1.

Sau lần khởi động lại tiếp theo, bạn có thể buộc màn hình xanh bằng Ctrl+ ScrollLk+ ScrollLk. Mã kiểm tra lỗi trong trường hợp này sẽ là 0xE2 (MANUALLY_INITIATED_CRASH).

Nếu bạn thực sự muốn một phương pháp lập trình, bạn cần tìm một lỗ hổng trong một số trình điều khiển trên máy đó hoặc viết và cài đặt trình điều khiển đơn giản gọi KeBugCheckhoặc KeBugCheckEx.

Chúc vui vẻ ;)

Lưu ý phụ: có thể rất hữu ích khi cố tình gây ra sự cố như thế này cho người viết trình điều khiển hoặc ngay cả khi xử lý phần mềm độc hại. Nếu bạn định cấu hình hệ thống của mình để tạo kết xuất bộ nhớ đầy đủ, thì bạn sẽ có hình ảnh của hệ thống đang chạy có thể được phân tích thêm. Xem xét các trường hợp như bế tắc trong đó trình gỡ lỗi không nhất thiết phải giúp đỡ trong mọi trường hợp.


4
Điều này có đúng không? Thật tuyệt nếu nó như vậy! (Không, tôi không có tâm trạng thử nghiệm nó trên bất kỳ máy tính nào của mình.)
Andreas Rejbrand

3
Vâng, nó thực sự không có nghĩa là một trò đùa. Đây là thứ mà các nhà văn trình điều khiển đã sử dụng trong một thời gian, mặc dù tôi không nhớ từ đầu của mình vị trí đăng ký là gì. Phải tìm nó trong ghi chú của tôi.
0xC0000022L

Tôi đã trải nghiệm bsod bằng cách gõ màn hình in hoặc quá nhiều bộ nhớ khi sử dụng Ram hoặc Hardisk nội bộ. Có lẽ khai thác một hệ thống quá.
Tech-IO


1

Không chắc chắn chính xác làm thế nào để gây ra nó, nhưng tôi tin vào Vista và 7, nó mặc định tắt hệ thống và không hiển thị BSOD.


Không sao, tôi muốn hành vi đó.
Tamás Szelei

1
@FreeAsInBeer: Thật ra đó là vì cài đặt hệ thống của bạn bảo nó khởi động lại sau sự cố. Điều này có thể được thay đổi trong tab Nâng cao của thuộc tính máy tính của bạn. Ngoài ra, các bãi đổ vỡ được tạo hiện nay thường là các bãi nhỏ theo mặc định, đó là lý do tại sao quá trình khởi động lại xảy ra quá nhanh đến nỗi bạn không thể nhìn thấy màn hình xanh (theo nghĩa đen). Nhưng nó ở đó, tin tôi đi;)
0xC0000022L

1
@STATUS_ACCESS_DENIED: Tôi biết, tôi chỉ đơn giản là cho anh ấy biết rằng mặc định của biến này được đặt là không hiển thị BSOD, vì vậy anh ấy biết kiểm tra thuộc tính đó nếu anh ấy không nhận được tài sản như mong đợi.
FreeAsInBeer

@FreeAsInBeer: đủ công bằng :)
0xC0000022L

1

Nói chung, BSOD xảy ra khi có lỗi xảy ra trong hệ điều hành hoặc phần cứng. Về cơ bản, có một cái gì đó không ổn, vì các tác giả hệ điều hành và nhà cung cấp phần cứng cũng không đánh giá cao các kỹ sư phần mềm xấu làm cho sản phẩm của họ trông tệ và làm hỏng trải nghiệm của người dùng.

Viết trình điều khiển là một trong số ít cách để đủ gần với hệ điều hành và phần cứng và gây ra lỗi như vậy. Tất nhiên, cài đặt trình điều khiển như vậy không phải là điều bạn thường làm mà không có kiến ​​thức và đặc quyền quản trị có mục đích, vì vậy sử dụng điều này cho mục đích độc hại chứng tỏ khá khó khăn. Với loại quyền truy cập đó, bạn có thể gây hại nhiều hơn nếu không có BSOD hoặc các phương tiện như vậy.


1

Một BSOD là một hoảng loạn hạt nhân. Nó có nghĩa là một phần của kernel, chính cốt lõi của hệ điều hành đã làm điều gì đó thực sự tồi tệ. Nó có thể viết nguệch ngoạc bộ nhớ, nó có thể thực thi mã mà nó không nên có. Về mặt lập trình, bạn cần lấy mã trong không gian kernel, và sau đó bằng cách nào đó kích hoạt nó theo yêu cầu. Một chút rủi ro cho một máy chủ prod.

Các máy Windows bình thường có rất nhiều trạng thái trong các tiến trình và trong kernel. Bất cứ việc dọn dẹp nào bạn cần để giữ cho nhà nước nhất quán, bạn cũng chỉ cần ngắn gọn nó.

Cụ thể, BSOD là (thường là) kernel (hoặc trình điều khiển), kernel đang ở trạng thái xấu, tệ đến mức nó cảm thấy không thể dọn sạch và thà khởi động lại, mất bất kỳ trạng thái tốt nào chỉ vì nó không biết những gì tốt và những gì xấu. Bất kỳ bộ đệm nào cũng không thể được xóa vào đĩa. Sau đó, nó sẽ cố gắng dọn dẹp khi khởi động lại, nhưng nó đã mất rất nhiều bối cảnh khi tắt máy / hoảng loạn, vì vậy nó sẽ là một dọn dẹp bảo thủ, phải chọn cả thức ăn thừa tốt và xấu từ hoảng loạn.

Vì vậy, một số lợi thế của bạn khi tắt máy đã không còn khi khởi động, vì bây giờ nó cần phải tìm ra nơi mà đôi chân của nó bị chặt ra từ bên dưới. Nó cần chạy chkdsk và dọn sạch bất kỳ khối đĩa nào ở trạng thái ghi một phần. Đĩa USB lưu trữ rất nhiều. Bạn có thể tắt bộ nhớ đệm, điều này sẽ làm giảm khả năng mất dữ liệu khi gặp sự cố, nhưng sau đó không lưu vào bộ nhớ cache sẽ làm giảm tốc độ. Những tập tin nào bạn sẵn sàng để mất?

Tóm lại, đây là một ý tưởng tồi. Bất kỳ máy sản xuất nào có điều này xảy ra có thể ở trạng thái không ổn định ngay cả sau khi dọn dẹp. Điều này thật tệ.

Tôi muốn nói chỉ cần nhấn nút tắt máy và khởi động lại. Bạn sẽ mất bất kỳ khoản tiết kiệm thời gian nào mà bạn nghĩ rằng bạn nhận được lần đầu tiên bạn cần xây dựng lại máy chủ vì nó không khởi động hoặc chương trình của bạn không thể khởi động.


Bạn bỏ lỡ điểm. Có nhiều lý do chính đáng để khiến BSOD theo yêu cầu khi gỡ lỗi một trình điều khiển bạn viết. Tuy nhiên, tôi nghĩ rằng câu hỏi này không bao giờ nên được di chuyển từ SO đến đây, vì bản chất của nó.
0xC0000022L

@STATUS_ACCESS_DENIED Tôi đồng ý với tuyên bố của bạn, nhưng nếu bạn nhớ ở câu hỏi ban đầu, nó không liên quan gì đến việc gỡ lỗi, nhưng là một phím tắt để tắt hệ thống. Không phải là một lý do tốt trong quan điểm của tôi.
Rich Homolka

0

Phải đề cập đến việc tiêu diệt quá trình csrss.exe sẽ tạo ra BSOD. Nhưng không phải trên Windows mới nhất (8, 8.1).


Điều này có thể được thực hiện bởi một ứng dụng. Bất cứ ai cũng có thể tạo một ứng dụng như vậy trong Visual Studio Express (miễn phí).
sở thích

Đây là mã 0xC000021A ( STATUS_SYSTEM_PROCESS_TERMINATED), btw.
0xC0000022L

0

Đoạn mã từ https://www.mpgh.net/forum/showthread.php?t=1100477 hoạt động trên 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
}

Dường như không có dấu vết trong Nhật ký sự kiện. Chắc chắn sẽ có một dấu vết trong minidump?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.