Program zawieszający komputer

0

Cześć,
mam za zadanie napisanie programu który zawiesi działanie systemu operacyjnego, żadnych kryteriów w jaki sposób ma to zrobić.
Wpadłem na pomysł wywołania "nieskończonej" pętli alokującej pamięć dla dowolnej zmiennej, w momencie gdy zostaną wykorzystane całe zasoby pamięci RAM i przepełni się partycja SWAP (Linux) lub plik wymiany (Windows), tj. zasoby pamięci wirtualnej na HDD też się wyczerpią system powinien się zwiesić. Napisałem krótki program w C, ale niestety dochodzi do 70% i dalej nie idzie.

Pytanie: to kwestia błędnego kodu czy może zabezpieczenia systemu przed "pamięciożernymi" programami ?

#include <stdio.h> 
#include <stdlib.h> 

int main()
{
   intr *ptr; 
   
   for(;;)
      malloc(sizeof(ptr))

return 0; 
}
 
0

A ile masz ramu? Bo jak masz więcej niz 4GB to może sie okazać że przestrzeń adresować jaką może dostać twój program jest za mała żeby zająć cały ram :P

0

ja kiedyś zawiesiłem przypadkiem tak:
tworzysz globalnego hooka i wykrywasz w nim naciśnięcie jakiegoś klawisza, np. CAPS_LOCK i reagujesz na to... zasymulowaniem klawisza CAPS_LOCK. Zwieche rozpoczynasz pierwszym zasymulowaniem CAPS_LOCK-a OS powinien zawiesić się po tym dość szybko. Działało na XP, nie sprawdzałem na nowszych wersjach

1
#include <unistd.h>
 
int main(void)
{
   while(1)
   {
      fork();
   }
   return 0;
}

Może tak ?

0

Ke ?

RAM 4GB.

Procesor 64 bitowy więc i szyna adresowa 64bitowa, system także 64 bitowy, więc przestrzeń adresowa jest wielokrotnie większa od zasobów RAMu czy ogólnie pojętej pamięci wirtualnej...

Dodam że OS to Windows 7.

Czy mój kod jest błędny ?

Może trzeba wskazać wskaźnikowi jakiś adres komórki, tj. szczególny adres, żeby zajął całą pamięć ? Przypisać mu coś.

0

Spróbuj forkbombę, tak jak napisał mto9.

0

Z waszymi pomysłami może być jeden problem - system operacyjny, który określa się mianem stabilnego nie wyłoży się po takich zabawach. Jeżeli się wyłoży to znaleźliście buga.
Można pójść w trochę innym kierunku, a mianowicie wyłączyć część systemu operacyjnego, która jest dla jego działania niezbędna: główny podsystem o nazwie Windows (prawda, że oryginalnie?). Zarządza nim proces csrss. Żeby spowodować bugcheck (BSOD) wystarczy go ubić.
Jeszcze inny pomysł to napisanie sterownika, który zrobi coś niedozwolonego w kernel-mode i załadowanie go. Np. odwoła się do stronicowanej pamięci w niedozwolonym IRQL. To kończy się błędem irql_not_less_or_equal, który z pewnością każdy kiedyś na bsodzie widział.

0

Tylko czy zawiesić system znaczy wywołać BSOD? Wydaje mi się że BSOD przy domyślnych ustawieniach powoduje automatyczny restart.

0

Hmm... nie sądzę żeby ten problem był na tyle skomplikowany, żeby pisać jakieś exploity ;/

Forkbomba też nie działa, udaje się zająć maksymalnie 80% pamięci wirtualnej. Próbowałem nawet zmniejszyk plik wymiany (nie wiem czy w Windows 7 tak się nazywa, jak nie, to poprawcie mnie), ale to na nic się zdaje.

1

Ja tam się na C/C++ znam jak grycanki na odchudzaniu, ale bym obstawiał coś ten deseń jak napisał @krwq. Ponieważ ostatnio pod Delphi bawiłem się w globalne Hookowanie klawiatury oraz symulacje naciskania klawiszy i po drodze ze trzy razy udało mi się zawiesić system, że pomógl tylko reset, bo system w ogóle nie reagowal na klawisze, myszke chyba też. Wszystko dzialo się na Windows 7 Ultimate 64 bit, z domyslnych rozmiarów plikiem wymiany i komputerze z 4 MB ramu. BSODa to nie spowoduje, bo takowy pokazywał mi się ostatni raz tylko kiedy miałem w tym samym komputerze wadliwy ram, po jego wymianie już więcej na oczy BSODa nie widziałem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1