AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Neuen Beitrag zur Code-Library hinzufügen Delphi _STARTUPINFO.lpReserved2 [Transfer Data to a new process]
Thema durchsuchen
Ansicht
Themen-Optionen

_STARTUPINFO.lpReserved2 [Transfer Data to a new process]

Ein Thema von Snify · begonnen am 19. Nov 2014 · letzter Beitrag vom 19. Nov 2014
 
Snify

Registriert seit: 17. Mai 2012
6 Beiträge
 
#1

_STARTUPINFO.lpReserved2 [Transfer Data to a new process]

  Alt 19. Nov 2014, 09:47
Hab das schon vor längerem geschrieben und benutze es auch ab und zu...
Die Idee war, Informationen in einen Prozess ein zu bringen BEVOR er gestartet wird via der CreateProcess API. Dabei wollte ich auch binäre daten "versteckt" übermitteln (Parameter kann man global einsehen)...
Das einzigste Problem WAR, Windows Vista 64Bit, hab aber dann dazu einen Workaround gefunden ( getestet und funktioniert ), es angepasst und sollte nun ohne Probleme auch auf Windows 2000 (Bis Win8.1 x64) funktionieren.
Bitte beachtet dass manche Programme auf lpReserved2 angewiesen sind, hatte aber mit Delphi Applikationen noch keine Probleme.
Das Limit beschränkt sich auf 65535 bytes, jedoch kann man darüber ganz einfach hinaus und vor dem start nochmals Speicher anfordern mit VirtualAllocEx, etc. und weitere Zeiger miteinander kombinieren.

Mehr Infos gibt es hier http://www.catch22.net/tuts/undocumented-createprocess (Pass arbitrary data to a child process!)

Delphi-Quellcode:
program CreateProcessTest;

{$APPTYPE CONSOLE}

uses
  Windows;

  var
    SI : TStartupInfo;
    PI : TProcessInformation;
    Buffer : array of byte;
    WideStr : WideString;
    VistaWorkAround : DWORD;
  Const
    AuthString = WideString ('delphipraxis.net');

begin
  SetLength(Buffer, (Length (AuthString) * SizeOf(WideChar)) + SizeOf(DWORD) + SizeOf(WideChar) );
  if ParamStr(1) = 'then begin
    ZeroMemory(@Buffer[0], Length(Buffer));
    VistaWorkAround := ((( Length(Buffer) - 4) div 5) + 2);
    CopyMemory (@Buffer[0], @VistaWorkAround, SizeOf(DWORD));
    CopyMemory (@Buffer[4], @AuthString[1], Length(AuthString) * SizeOf(WideChar));
    Si.cbReserved2 := Length(Buffer);
    Si.lpReserved2 := @Buffer[0];
    if CreateProcess (pchar(paramstr(0)), '- CreateProcessTest' , NIL, NIL, False, 0, NIL, NIL, SI, PI) then begin
      Exit;
    end else begin
      writeln ('Error - CreateProcess failed.');
    end;
  end else begin
    GetStartupInfo(SI);
    if Si.lpReserved2 <> NIL then begin
      SetLength(Buffer, SI.cbReserved2 - SizeOf(DWORD));
      ZeroMemory(Buffer, Length(Buffer));
      CopyMemory (@Buffer[0], Pointer(Integer(SI.lpReserved2) + 4), Length(Buffer));
      if PWideChar(@Buffer[0]) = AuthString then begin
        writeln ('Success - lpReserved2 injection was successfull.');
      end else begin
        writeln ('Error - lpReserved2 injection was NOT successfull.');
      end;
    end else begin
      writeln ('Error - lpReserved2 is NIL');
    end;
  end;
  writeln ('');
  writeln ('Thank you for testing!');
  readln;
end.
Mein erster Beitrag, bitte nicht so kritisch, jedoch bin ich gerne eines besseren belehrt

Geändert von Snify (19. Nov 2014 um 10:30 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:20 Uhr.
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