Abstürzende Fenster

3. Mai 2009 at 10:00

Die letzten Tage durfte ich mir aus dem Windows-Lager öfter anhören, wie lustig es doch sein, dass selbst ich als Linux-Fan zugeben müsse, wie einfach Linux denn mit einer Zeile gekillt werden kann (in Bezug auf Artikel “Fork Bombe” vom Januar).

Gut, ich wurde ja auch unter Windows zertifiziert und weiß auch, dass es unter Windows kaum länger dauert. Hier also die Antwort für’s Windows-Lager…

Diese eine Zeile in einer .bat-Datei (z.B. CrashMe.bat) starten und man sieht, wie Windows crasht:

:s<br />start %0<br />%0|%0<br />goto :s<br />

Mircosoft hat übrigens in kb 244139 verraten, wie man Windows sogar per Tastendruck zum sterben bringt. Folgende kleine Registry-Datei hilft:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesi8042prtParameters]
"CrashOnCtrlScroll"=dword:00000001

[HKEY_LOCAL_MACHINESYSTEMControlSet001ServiceskbdhidParameters]
"CrashOnCtrlScroll"=dword:00000001

Den Inhalt unter CrashOnCtrlScroll.reg speichern, doppelklicken und in die Registry laden. Nach einem Neustart läßt sich das System (zumindest bestimmte, siehe dazu MS KB Artikel) durch drücken von STRG (rechts) und 2x Rollen töten.

Gut, die Linux-Gemeinde wird nun lachen, wer aber den Microsoft Artikel liest wird erfahren, dass das kein Absturz-Bug, sondern eine gewollte Funktion für Entwickler ist, um einen Core-Dump zu erzeugen.

PS: Ja, ich bemühe mich die Tage auch mal um einen brauchbaren Windows-Artikel, versprochen! :razz:

Fork-Bombe

5. Januar 2009 at 00:03

Das letzte Thema des vergangenen Jahres war Krieg, daher fangen wir dieses Jahr mit einer Bombe an: Eine Fork-Bombe.

Das Prinzip funktioniert so: Man öffnet auf einem System so viele Prozesse wie möglich, bis der Rechner nicht mehr in der Lage ist, mehr Prozesse zu öffnen. Das Ergebnis ist, dass die Maschine danach faktisch tot ist.

Klar, das will man nicht machen, ist auch nur ein witziges Beispiel, wie leicht eine solche Fork-Bombe in der Linux Shell zu basteln ist.

Und so geht’s: In der Bash lassen sich Funktionen durch name(){ code; } definieren und später mit Ihrem Namen aufrufen:

list(){ ls -Alh; }
list

Ruft man nun in der Funktion die Funktion selbst 2x auf, so ergibt dies wenige Millisekunden nach dem Start der Funktion sehr viele Prozesse – ein Standard-Linux bleibt in diesem Fall nahezu stehen:

list(){ list|list; }
list

Noch gemeiner wird es, wenn man die Funktion nicht ‘list’ nennt, sondern einfach nur Unterstrich (_) und den Aufruf mit einem Strichpunkt trennt, so dass es nur eine Zeile ergibt:

_(){ _|_; }; _

Unscheinbar, aber kann bei korrekter Eingabe (Leerzeichen beachten!) echt Probleme bringen. Also nicht starten, wenn der Rechner gerade noch benötigt wird :)

Was ich übrigend auch witzig finde:

(
echo -ne "x42x5ax68x39x31x41x59x26x53x59x1bx24x1dxf7x00x00"
echo -ne "xc2xffxf7xf6x71x80x80x53x20x60x60x7fx42x58x30xa0"
echo -ne "x40x10x04x40x71x60x80x41x20x40x64x00x00x94x00x01"
echo -ne "x00x20x00x90x30x00x00x00x03x41xa0x0dx00xd0x08xaa"
echo -ne "x44xc4x69x89xa3x68x8dx19x34xc4x31x36xa6x9ex27x90"
echo -ne "x52x90x19x00x7bx31x00xc2x1ex6ax95x2ax59x82xb9x00"
echo -ne "x72xaax56xa9xc1x52x79x7cx80x61x52xa5xe0x19x7bx80"
echo -ne "x76x54xa9xf5xfdx15x4dxc0x3exbcx55x36x4fx44xcax99"
echo -ne "x3axaax71x8fx00x1ax15x39x80xc9x37xdaxa4x3ax75x9a"
echo -ne "x89xd5x3ax2ax5bx4fxbcx55x21x64xaax9ex0ax91x8axa6"
echo -ne "x00x1axbbx71x5axa9x5axa5x96xffx8bxb9x22x9cx28x48"
echo -ne "x0dx92x0exfbx80"
) | bunzip | bunzip > outfile

Macht nichts schlimmes, legt nur ein outfile an – aber was für eins :-)