Як я можу спровокувати Windows на зависання?


180

Мені потрібно перевірити поведінку обладнання в тому випадку, якщо Windows важко зависає / замерзає (наприклад, заморожений екран, жодних світлодіодів не мигає, не реагує на входи, в тому числі) Ctrl + Alt + Del і т.д.). Для того, щоб мати достатньо експериментів у досить короткий час, мені потрібно ініціювати ці зависання або програмно, або іншим чином.

Я зацікавлений в Windows 10 зокрема, оцінюється будь-який робочий спосіб для інших версій.

Кожен пошук, який я зробив по цій темі, не дивно підводить мене до дискусії про те, як це зробити ліквідувати ці ситуації не провокують їх. Тому питання може здатися досить дивно.

Відгук: Я пробував багато хто з рецепти пропонується у відповідях та коментарях. Перш за все, я не був зацікавлений в аваріях, які приносять BSoD (саме тому я описав заморожування, а не крах).

Я повинен зізнатися, що Windows 10 64-біт показав хорошу стійкість до багатьох способів. Він справляється практично з будь-яким Навантаження на процесор метод (в т.ч. бомби , петлі і т.д.) досить добре. Методи, які викликають негайні помилки (більшість методів NotMyFault), обробляються операційною системою з перезавантаженням або вимиканням (що не те, що я переслідував). Найкращі результати були досягнуті витік пам'яті методи NotMyFault - реальне заморожування, без шансів перезавантаження.

Нарешті, я був вражений кількістю документації від Microsoft, яка говорить про те, що Windows замерзає. Схоже, вони знають цю частину набагато краще, ніж навпаки (боротьба замерзає) ;-)


Коментарі не для розширеного обговорення; Ця розмова була переміщено до чату .
DavidPostill

3
Існує розрахунок, який можна зробити за допомогою калькулятора, який заморожує ядро ​​процесора, поки він не завершиться. На чотирьохядерній машині ви зробите це чотири рази. Але я не можу на все життя пам'ятати математичне рівняння, яке його викликає.
mickburkejnr

6
@mickburkejnr Це коефіцієнт 100000. Перейдіть до "Scientific View" типу 100000 і натисніть "n!". Це добре працювало на старих версіях Windows. Сьогодні ви отримаєте попередження, що цей розрахунок може тривати довго, і ви можете скасувати його.
duenni

24
Просто почніть використовувати його.
samazi

5
Встановлення оновлень завжди працювало для мене.
Daniel R Hicks

Відповіді:


230

Можливо, це допоможе: Примусове збою системи з клавіатури

З клавіатурами USB потрібно ввімкнути запуск, який ініціюється клавіатурою   реєстру. У розділі реєстру   HKEY_LOCAL_MACHINE Система CurrentControlSet Послуги kbdhid Параметри,   створити значення з ім'ям CrashOnCtrlScroll і встановити його рівним a   REG_DWORD значення 0x01.

Щоб ці налаштування вступили в силу, потрібно перезапустити систему.

Після цього завершення роботи клавіатури можна ініціювати за допомогою   наступну послідовність клавіш: Натисніть і утримуйте праву клавішу CTRL і   двічі натисніть клавішу SCROLL LOCK.

Або ви могли б почати вилку бомби: див. це питання ТА

Є також NotMyFault

Notmyfault - це засіб, який можна використовувати для збою, зависання та витоку пам'яті ядра в системі Windows. Це корисно для вивчення способів ідентифікації та діагностики драйверів пристроїв і апаратних проблем, а також можна використовувати його для створення синіх файлів дампа на екрані систем, які не діють.


9
Випробували ForkBomb і NotMyFault. Один з методів витоку, здається, робить те, що я хочу. Інші не є корисними, оскільки вони приносять перезавантаження / вимикання не заморожують. Дуже дякую.
hypers

6
CtrlScroll приносить вам BSOD. Чи зависає система для налагодження або просто перезавантажує її, залежить від налаштувань завантаження.
grawity

51
Aaannnddd duenni ніколи не дозволяється біля моїх комп'ютерів. Ніколи.
corsiKa

25

Схоже, ви перевіряєте реакцію зовнішнього пристрою на ОС, що не реагує.

Якщо ваше обладнання може бути підключено до віртуалізованої інсталяції Windows, ви можете призупинити та відновити віртуальну машину стільки разів, скільки вам потрібно. Встановіть потрібну ОС у віртуальну середовище VirtualBox (або іншу віртуалізацію на робочому столі), розкрийте будь-який апаратний інтерфейс, який використовується (USB, Ethernet або інше) до VM.

Ви можете потім призупинити та відновити віртуальної машини за бажанням.


24

Принаймні у старій версії Windows (кілька років тому) працювали такі:

Я написав програму C з нескінченним циклом:

while(1) {}

... тоді я дав цій програмі "пріоритет реального часу" в диспетчері завдань (є також API, який може це зробити).

На багатоядерних системах мені потрібно було б зробити це кілька разів, так що один цикл працює на кожному ядрі ...


39
Щоб підігріти процесор менше, виконайте такі дії: покладіть _mm_pause() від #include <immintrin.h> у петлі. Це інструкція для апаратних засобів процесора, а не системний виклик "сну" будь-якого типу; що стосується операційної системи, ваш процес не відрізняється від SuperPI; різниця полягає тільки в тому, скільки потужності споживає процесор під час запуску циклу.
Peter Cordes

5
Я не впевнений, що це зупиняє роботу вікон у режимі ядра.
CodesInChaos

2
@CodesInChaos: Більшість потоків ядра виконуються з нормальним пріоритетом. Один з них на CPU і ядро ​​в значній мірі зроблено.
Joshua

Інша методика, що передбачає збирання x86 ( STI + HLT ): stackoverflow.com/questions/3747847/…
meklarian

3
@meklarian: Має бути CLI; HLT. Мабуть, ви повинні зробити це з привілейованого режиму. В принципі, він все ще може бути врятований NMI або подібним.
Nate Eldredge

10

Найсильніше зависання ядра (тобто відсутність відстеження миші тощо) - коли код переходить у нескінченний цикл у режимі ядра з вимкненням переривань.

Це можна досягти за допомогою драйвера пристрою, і навіть краще, ви можете написати драйвер так, щоб він запускався і зупиняв зависання під вашим контролем (припускаючи, що нескінченний цикл тестує стан, який ви контролюєте).

Як написати та встановити цей драйвер буде темою іншого питання або трьома, але це такий підхід.


9

Будь ласка, перевірте наступне запитання на StackOverflow, яке схоже на ваше: Як зробити вікна замерзають на короткий проміжок часу

Вона полягає в тому, що немає можливості (надійно) зробити це.

Замість того, щоб заморозити або підвісити Windows, можливо, ви можете просто перервати зв'язок з вашим обладнанням.

Я не знаю, що таке ваше обладнання і як ви його підключаєте. Якщо це адаптер USB або Ethernet, наприклад, ви можете легко його деактивувати в диспетчері пристроїв або відключити? Якщо ви примусово звалите або повісити систему, ви можете пошкодити систему різними способами, тому будьте обережні з тим, що робите.


1
Я розгляну фізичне відключення обладнання, якщо я не задоволений результатами програмного забезпечення. Дякую.
hypers

5

Чи не є функцією налагодження ядра?

Я встановив його у Windows 7, а пов'язані інструкції в цьому відповіді вказали XP або пізнішу версію, тому він повинен працювати з Windows 10.

Я встановіть його над FireWire / 1394 , так як це найпростіше, на мій погляд. Але ви також можете зробити це через мережу або USB більше ).

В основному,

Налаштуйте цільовий комп'ютер, виконуючи ці команди у підвищеному рядку (вибираючи канал n ):

bcdedit /debug on
bcdedit /dbgsettings 1394 channel:n

Це те ж саме, що йти на вкладку завантаження msconfigі виберіть кнопку "Додатково":

enter image description here

enter image description here

Потім (після перезавантаження цільового комп'ютера) запустіть WinDbg на головному комп'ютері, використовуючи ту ж бітовість WinDbg цільового комп'ютера.

Тоді це лише питання призупинення виконання ядра, коли ви хочете від головного комп'ютера. Якщо ви перевіряєте обладнання має деяку асинхронну операцію, що вона працює, вона повинна бути такою ж ефективною, як і інші засоби.


Цікавий спосіб. Потрібен другий ПК, хоча. Але спробуємо, коли це можливо.
hypers

2

Я не знаю, якщо це кваліфікується як загальне заморожування, оскільки курсор миші продовжує рухатися по екрану, але Windows 7 UI не відповідає, якщо у вас є помилки вводу-виводу пристрою, зокрема, збій жорсткого диска. Один з моїх жорстких дисків самостійно повідомляв про неминучу помилку приводу через SMART, а Windows 7 монтував її, але повісити, коли б я спробував отримати доступ до певних файлів, збережених на ньому. Інтерфейс користувача буде заблокований (за винятком руху курсору миші) до 5 хвилин, поки він не зможе прочитати файл або зняти диск після закінчення тайм-ауту. Я не знаю, якщо Windows використовує системний годинник для тайм-ауту, але, можливо, якщо ви якось заморозите час, коли ви можете збільшити тривалість тайм-ауту? Можливо, це допоможе вам потрапити туди, але не 100% відповіді, яку ви шукаєте.


2

Це помилка швидко зависає Windows за рахунок вичерпання ресурсів. Легко відтворювати.

Як виявляється, це насправді a   помилка в тому, як в командному рядку (точніше cmd.exe ) розбирає партію   файлів і може призвести до швидкого заперечення типу атаки; покласти   наступний рядок у пакетному файлі (без нових рядків) буде споживатися   величезна кількість пам'яті дуже швидко через цю помилку (як. \ t   приклад):

^ nul<^

Коротше кажучи, коли каретка знаходиться в кінці файлу, фактична   кінець файлу ігнорується, а файл "reset" - 0   (по суті) так, щоб партія була знову розібрана (ad infinitum).


2

Ось вихідний код програми, яку я використовую в уроках налагодження. Вона показує, як додаток режиму користувача може виконувати своєрідну атаку DoS.

Ви помітите, що курсор миші рухається дуже рідко (один раз кожні одинадцять секунд на моїй машині). Потенційно ваш комп'ютер все одно реагуватиме на кнопку живлення, якщо ви чекаєте досить довго.

Він працює за допомогою нескінченного циклу та встановлює найвищий пріоритет процесу ( 0x100 "Реальний час") і встановлення найвищого пріоритету потоків ( 15 "час критичний"). Він почне 8 з них, чого цілком достатньо для комп'ютерів i7. Якщо вам потрібно більше, адаптуйте цикл. Більшість з них потенційно уповільнюватимуть речі.

#include "stdafx.h"
#include <windows.h>
#include <string>
#include <sstream>
#include <iostream>

void WasteTime()
{
    int priority = 15;
    ::SetThreadPriority(::GetCurrentThread(), priority);
    while (true)
    {
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
    ::SetPriorityClass(::GetCurrentProcess(), 0x100);
    for(int i=0; i<7; i++)
    {
        LPDWORD threadid = 0;
        ::CreateThread(NULL, 64*1024, (LPTHREAD_START_ROUTINE)&WasteTime, NULL, 0, threadid);
        ::Sleep(2000);
    }

    WasteTime();

    return 0;
}

Пам'ятайте, що ця програма має невизначену поведінку в C ++, тому під певними налаштуваннями оптимізації компілятор може замінити все це ExitProcess(0)
Ben Voigt

@BenVoigt У цьому випадку (тобто g++ ) якщо -O0 можливо, не вистачило gcc -Q -O0 --help=optimizers | grep enabled (і відключення вижив оптимізації руками) може вирішити ExitProcess(0) проблема?
Hastur

@BenVoigt: Ви могли б детально викласти, яку частину ви вважаєте невизначеною поведінкою?
Thomas Weller

@BenVoigt IMHO компілятор може тільки оптимізувати return 0 твердження, тому що існує після while(true). Компілятор міг би з'ясувати, що це недоступне твердження.
Thomas Weller

Мова С ++ вимагає, щоб кожен потік зрештою досягав прогресу, визначеного в термінах декількох типів спостережуваної поведінки. Оскільки нескінченний цикл ніколи не робить спостережуваного прогресу, компілятор може вивести, що він не досягся, і видалити не тільки його, але весь код над ним назад до найближчої гілки.
Ben Voigt

0

Ви спробували CPUEater корисності що в комплекті з Process Lasso? Ps. Я не працюю для bitsum.


Я думаю, ви маєте на увазі "Ви пробували", а не "Чи намагалися ви". :)
fabspro

@fabspro Я думаю, що "ви спробували" правильно, тому що ОП вже прийняла іншу відповідь, тому подія, про яку я маю на увазі ("вирішення проблеми"), є в минулому, але можна було б сказати, що інтернет завжди відбувається. У будь-якому випадку, якщо ви запропонуєте редагування, я з радістю делегую завдання прийняти його до черги перегляду. Джерело: englishforums.com/English/HaveYouTriedOrDidYouTry/zclxb/…
beppe9000

Я думаю, якщо б він вирішив проблему, то ваш запит міг би стати коментарем на його відповіді, то - щось на кшталт "коли ви досліджували вашу проблему, була одна з речей, які ви намагалися використовувати _______?" можливо ... просто пропонуючи речі :)
fabspro

... touché :)
beppe9000

huehuehuehuehue
fabspro

-2

Якщо ви дійсно хочете повісити свій комп'ютер, повністю викликаючи його заморозити , просто використовуйте всю свою оперативну пам'ять і примушуйте її до пам'яті сторінки. Це вийде за рамки простого заморожування і дійсно просто перевантажить таку річ, що ви навіть не можете використовувати Диспетчер завдань, навіть не клавіатурою. Навіть коли процес завершується, для відновлення ПК потрібно багато часу. (Це найкраще!)

Можна, наприклад, створити клас з покажчиком на себе, а в циклі while створити новий екземпляр цього класу назавжди, зберігаючи кожен новий екземпляр у покажчику попереднього екземпляра. Можливо, до класу додайте кілька класів, щоб збільшити швидкість пам'яті. Тоді ви можете мати таймер, який виходить з циклу while і деконструює все; Звичайно, вам доведеться трохи почекати, щоб він відновився.


-4

Я пропоную просто створити пакетний файл із таким кодом:

@echo off
:x
start cmd.exe
start explorer.exe
start calc.exe
start notepad.exe
start iexplorer.exe
start paint.exe
goto x

Це, мабуть, найпростіший і найбезпечніший спосіб зробити це. Імена процесів можна замінити будь-якими вікнами.


2
Це, швидше за все, просто вичерпати оперативної пам'яті і викликати жорсткий диск, щоб бути побитий. Залежно від специфікації комп'ютера, можливо, комп'ютер продовжуватиме працювати через це, тим більше, що 4 з перелічених програм досить легкі iexplore.exe та можливо explorer.exe матиме більший вплив). Це автоматично знищить процеси видобування пам'яті.
MoonRunestar

-10
  1. Перейти до розділу C: Windows \ t
  2. Натисніть Ctrl-a для вибору всіх
  3. Натисніть Enter

7
Вам буде потрібно багато тисяч елементів, щоб це було нечітко ефективним! Моя папка% TEMP% порожня ...
AlainD

6
Хоча це, здається, є законним спроба щоб відповісти на запитання, зовсім незрозуміло, як саме це повинно призвести до блокування Windows, як того вимагає ОП. Будь ласка редагувати Ваше питання, щоб пояснити, чому це буде робити те, що ОП хоче.
Twisty Impersonator

8
Мені було б шкода для тих, хто спробував це і не зрозумів, що вони постраждали від завантаження з допомогою шкідливого програмного забезпечення.
MoonRunestar
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.