Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Betriebssysteme (https://www.delphipraxis.net/27-betriebssysteme/)
-   -   Wie BlueScreens erzeugen? (https://www.delphipraxis.net/55757-wie-bluescreens-erzeugen.html)

ErazerZ 26. Okt 2005 20:53

Re: Wie BlueScreens erzeugen?
 
ich hab mal mit der api NtCreateProcess einen BlueScreen erzeugt auf WinXP, einfach aufrufen mit keinen paramentern (zb. einfach 0, nil usw übergeben)
Delphi-Quellcode:
NtCreateProcess( OUT PHANDLE ProcessHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN HANDLE ParentProcess, IN BOOLEAN InheritObjectTable, IN HANDLE SectionHandle OPTIONAL, IN HANDLE DebugPort OPTIONAL, IN HANDLE ExceptionPort OPTIONAL );

Daniel G 26. Okt 2005 20:55

Re: Wie BlueScreens erzeugen?
 
Bedenke Olli:

Der Unterschied zwischen Ich und Er! Ich muss ja nicht immer dabei gewesen sein, wenn Er einen BSOD hatte....

Es sei denn, Morcsch ist schizophren.

w3seek 26. Okt 2005 20:57

Re: Wie BlueScreens erzeugen?
 
Zitat:

Zitat von ErazerZ
ich hab mal mit der api NtCreateProcess einen BlueScreen erzeugt auf WinXP, einfach aufrufen mit keinen paramentern (zb. einfach 0, nil usw übergeben)

Halte ich fuer ein Geruecht. Unter NT4 vielleicht moeglich, aber ab 2000 sollte das der vergangenheit angehoeren.

Morcsch 26. Okt 2005 21:00

Re: Wie BlueScreens erzeugen?
 
Daniel G, danke für die Erklärung.

Bin nicht schizophren.

Daniel G 26. Okt 2005 21:01

Re: Wie BlueScreens erzeugen?
 
Zitat:

Zitat von Morcsch
Bin nicht schizophren.

Siehste, habe ich mir doch gedacht. :mrgreen:

Olli 26. Okt 2005 21:18

Re: Wie BlueScreens erzeugen?
 
Zitat:

Zitat von w3seek
Halte ich fuer ein Geruecht. Unter NT4 vielleicht moeglich, aber ab 2000 sollte das der vergangenheit angehoeren.

Dito!

ErazerZ 26. Okt 2005 21:39

Re: Wie BlueScreens erzeugen?
 
Zitat:

Zitat von w3seek
Zitat:

Zitat von ErazerZ
ich hab mal mit der api NtCreateProcess einen BlueScreen erzeugt auf WinXP, einfach aufrufen mit keinen paramentern (zb. einfach 0, nil usw übergeben)

Halte ich fuer ein Geruecht. Unter NT4 vielleicht moeglich, aber ab 2000 sollte das der vergangenheit angehoeren.

ja .. sollte, ist es aber nicht, kannst ja testen, bei mir hats funktioniert unter WinXP SP2

Olli 26. Okt 2005 22:18

Re: Wie BlueScreens erzeugen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von ErazerZ
ja .. sollte, ist es aber nicht, kannst ja testen, bei mir hats funktioniert unter WinXP SP2

Auf 2003 SP0 kracht nix. Auf XP SP1 ebenfalls nicht. Windows 2000 SP4 auch nicht. Das ist ein ziemlich repräsentativer Querschnitt durch die Systeme seit NT 4.0 - und die SPs dürften aufgrund der Konsistenz des Ergebnisses nichts daran ändern.

Keine Ahnung was ihr dort übergeben habt, aber ich habe folgendes kleine C-Programm:

Code:
#define _X86_
#define WIN32_LEAN_AND_MEAN
#define UNICODE

#include <windows.h>

#pragma optimize("gsy",on)

#pragma comment(lib,"kernel32.lib")
#pragma comment(lib,"user32.lib")
#pragma comment(lib,"ntdll.lib")

#pragma comment(linker, "/opt:nowin98")
#pragma comment(linker, "/entry:Main")
#pragma comment(linker, "/opt:ref")
#pragma comment(linker, "/align:512")
#pragma comment(linker, "/fixed")
#pragma comment(linker, "/subsystem:windows")

#define NTSTATUS LONG

NTSYSAPI
NTSTATUS
NTAPI
NtCreateProcess(
    PHANDLE ProcessHandle,
    ACCESS_MASK DesiredAccess,
    PVOID ObjectAttributes, // POBJECT_ATTRIBUTES
    HANDLE InheritFromProcessHandle,
    BOOLEAN InheritHandles,
    HANDLE SectionHandle,
    HANDLE DebugPort,
    HANDLE ExceptionPort
  );

__declspec(naked) void __cdecl Main(void)
{
  NtCreateProcess(0, 0, 0, 0, 0, 0, 0, 0);
  MessageBox(0, L"This should never be seen! *booom*", 0, 0);
  ExitProcess(0);
}
Vielleicht solltet ihr mal die Software, die ihr benutzt, besser überprüfen. Ich ahne schon, was da abgeht :mrgreen: ... ich denke mal, daß ihr eine Menge Progrämmchen ala Firewalls, AVs usw. oben habt. Ich habe eine saubere Installation all dieser OS. Lernt einfach mal einen BSOD zu entziffern, dann werdet ihr sehen, daß ihr mit euren Usermode-Progrämmchen das OS schwerlich crashen könnt (es gibt Ausnahmen, die aber auf falscher Parameterbearbeitung im KM beruhen und in NT 4.0 gehäuft auftraten, siehe w3seek's Kommentar). Wenn ihr im KM das OS crasht, dann seid ihr natürlich echte Helden. Weil das ist ach so schwer :roll:

So, und jetzt kommt ihr.

Nachtrag: Für alle die mir nicht glauben, hier das Disassemblat des Kompilats:
Code:
.text:00400400 start:
[color=red].text:00400400                 push   0
.text:00400402                 push   0
.text:00400404                 push   0
.text:00400406                 push   0
.text:00400408                 push   0
.text:0040040A                push   0
.text:0040040C                push   0
.text:0040040E                push   0
.text:00400410                 call   ds:NtCreateProcess[/color]
.text:00400416                 push   0
.text:00400418                 push   0
.text:0040041A                push   offset aThisShouldNeve ; "This should never be seen! *booom*"
.text:0040041F                push   0
.text:00400421                 call   ds:MessageBoxW
.text:00400427                 push   0
.text:00400429                 call   ds:ExitProcess
Noch'n Nachtrag: Ich habe das Programm aktualisiert, so daß es eine MessageBox anzeigt. Sollte ja nicht passieren bei einem BSOD. Außerdem habe ich es getestet auf Windows NT 4.0 ohne SP, auf Windows NT 3.51 (mit erstem "SP") und es kam in keinem Fall zu einem BSOD.
Ich lach mich jetzt voraussichtlich erstmal in den Schlaf und schaue mir morgen dann die Ausreden an :mrgreen:

Im Anhang das Kompilat! Benutzung erfolgt auf eigene Gefahr!

Fazit: Weder auf NT 3.51, NT 4.0, 2000, XP noch 2003 kam es zu einem BSOD. Alle diese Systeme sind "sauber" (also keine wirklich ins System eingreifende Software).

Olli 27. Okt 2005 09:53

Re: Wie BlueScreens erzeugen?
 
Och *schnief* keine Ausreden :mrgreen:

ErazerZ 27. Okt 2005 13:48

Re: Wie BlueScreens erzeugen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
oh ne ausrede moment mal

Mein Code:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
{
NtCreateProcess( OUT PHANDLE ProcessHandle,
                 IN ACCESS_MASK DesiredAccess,
                 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
                 IN HANDLE ParentProcess,
                 IN BOOLEAN InheritObjectTable,
                 IN HANDLE SectionHandle OPTIONAL,
                 IN HANDLE DebugPort OPTIONAL,
                 IN HANDLE ExceptionPort OPTIONAL );  }

procedure TForm1.Button1Click(Sender: TObject);
var
  h: THandle;
  ntx: function(ProcessHandle: PChar; DesiredAccess: PChar; ObjectAttributes: PChar; ParentProcess: PChar; InheritObjectTable: BOOL; SectionHandle:PChar; DebugPort: PChar; ExceptionPort: PChar): Integer;
begin
  h := GetModuleHandle('ntdll.dll');
  ntx := GetProcAddress(h, 'NtCreateProcess');
  ntx(nil, nil, nil, nil, FALSE, nil, nil, nil);
end;

end.
Mein OS:
Windows XP SP2

Meine CPU:
3600 MHZ, 1 GB RAM

und noch ein kleines bild als beweis


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:32 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz