Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi MemoryStream ausführen (https://www.delphipraxis.net/80780-memorystream-ausfuehren.html)

traudl 15. Nov 2006 09:01


MemoryStream ausführen
 
Hallo DPler,
ich weiß mal wieder nicht weiter. Folgendes Problem: Ich habe eine Anwendung geschrieben mit der ich eine EXE datei in eine DB (AbsolutDB) einfügen kann und die zur Laufzeit mit einer RunProgram.exe aus der DB ausgelesen, auf Festplatte gespeichert, ausgeführt und danach wieder gelöscht wird.
Das ist der Punkt.... ich muss die Datei auf der Festplatte speichern. Kann man die Datei nicht aus der DB in den Speicher laden und dort ausführen ?? Oder gibt es eine andere Möglichkeit ???
Der Grund: die EXE Dateien werden von unseren Admins mit AutoIt geschrieben und compiliert. Jetzt wurde aber eine Datei decompiliert und der Code lag im Klartext vor. Darin war auch ein DomainAdmin Passwort ....

Delphi-Quellcode:
procedure TMainFrm.qryAutoItAfterRefresh(DataSet: TDataSet);
var i: Double;
    ExecuteFile: string;
    str: TMemoryStream;
begin
      str:= TMemoryStream.Create;
      //ExecuteFile:= usrTemp + '\' + qryAutoIt.FieldByName('name').AsString; // so mach ich es im Moment
      //TBlobField(DataSet.FieldByName('file')).SaveToFile(ExecuteFile);
      TBlobField(DataSet.FieldByName('file')).SaveToStream(str);
      Str.Position = 0;
      if str.Size = 0 then
        exit;
      {hier möchte ich den Stream ausführen}

      {ShellExecute(Handle,'open', // so mach ich es im Moment
                    PChar(ExecuteFile) , PChar(''),
                    nil,SW_SHOWMINNOACTIVE);}
end;
Hoffentlich habt ihr irgenwelche ideen und könnt mir weiterhelfen.

Danke

Liebe Grüße aus dem Allgäu

Udo

[edit=SirThornberry]Buchstabendreher im Titel korrigiert - Mfg, SirThornberry[/edit]

SirThornberry 15. Nov 2006 09:09

Re: MeomryStream ausführen
 
Es gibt die Möglichkeit (seit NT glaub ich) Dateien direkt aus dem Speicher auszuführen. Allerdings brauchst du dazu einen andere Anwendung die du startest und der du dann den neuen Code unterschiebst. Also irgend eine Anwendung musst du immer starten.
Aber letztendlich ist das der falsche Ansatz. Passwörter gehören generell nicht fest in Programme codiert. Und wenn es jemand schafft das Programm von der Festplatte zu decompilieren dann hat der jenige auch nicht viel mehr Aufwand es aus dem Speicher auszulesen. (zumal im Speicher in der Regel das ganze nicht mal veschlüsselt vorliegt zu dem Zeitpunkt wo es benötigt wird).
Desweiteren wird dadurch das Speichermanangement ausgehebelt wenn alles direkt aus dem Ram ausgeführt wird weil dann die ganze Anwendung in den Speicher geladen wird.

traudl 15. Nov 2006 09:29

Re: MeomryStream ausführen
 
Danke für deine schnelle Antwort. Wenn ich eine Anwendung brauche die ich vorher starten muss funktioniert es eh nicht. Die Dateien die compiliert werden sind exe-dateien. Die Dateigrößen sind auch maximal 1,5 MB. Es sind kleine Tools, die bei Bedarf erstellt und ausgeführt werden. z.B. um einen Virus (wenn es mal wieder einer geschafft hat) per Loginscript zu killen (die Anwendung bereitstellen, dei ihn killt). Und dazu braucht man unter Umständen erhöhte Rechte...
Hättest du ene andere Lösung für mich?

SirThornberry 15. Nov 2006 09:52

Re: MeomryStream ausführen
 
warum geht es nicht wenn man vorher eine andere Anwendung starten muss? Wegen einem Antivirenprogramm was dann Alarm meldet? Ansonsten hab ich es Testweiste gemacht das ich Notepad starte und dann diesem prozess den neuen Code unterjubel. Somit liefen die Anwendungen aus dem speicher heraus als Notepad.exe

Eine vielleicht bessere Lösung wäre einfach über die Registry die Anwendungen als Service einzutragen und zu starten. Die Anwendungen können sich ja dann auch selbst wieder austragen. Oder du schreibst einen Service der die Anwendung nach Login auf dem Nutzerdesktop anzeigt (oder einen neuen Desktop dafür aufmachen)

traudl 15. Nov 2006 10:35

Re: MeomryStream ausführen
 
Hört sich plausibel an, ich hab aber keine Ahnung wie das geht.. Sorry hast du ein kleines Beispiel für mich ??
Wie ich in den Stream lade weiß ich nur wie ich an einen Prozess übergeben soll ist mir ein Rätsel

SirThornberry 15. Nov 2006 10:54

Re: MeomryStream ausführen
 
bei luckie auf der HP gibt es da eine Datei namens "inmemexe.zip" worin ein Beispielprojekt enthalten ist.

shmia 15. Nov 2006 11:06

Re: MeomryStream ausführen
 
Zitat:

Zitat von traudl
Hättest du ene andere Lösung für mich?

Wie wäre es denn mit VB-Scripts, die vom Windows Scripting Host ausgeführt werden??
Man kann diese Script auch verschlüsseln, damit der Sourcecode nicht direkt auslesbar ist.

SirThornberry 15. Nov 2006 11:12

Re: MeomryStream ausführen
 
Zitat:

Zitat von shmia
Zitat:

Zitat von traudl
Hättest du ene andere Lösung für mich?

Wie wäre es denn mit VB-Scripts, die vom Windows Scripting Host ausgeführt werden??
Man kann diese Script auch verschlüsseln, damit der Sourcecode nicht direkt auslesbar ist.

Wenn derzeit das Problem bestand das eine Exe decompiliert wurde, wird ein verschlüsseltes VB-Script kein größeres Hinternis sein.

traudl 15. Nov 2006 12:32

Re: MemoryStream ausführen
 
und wenn ich den Source des Scripts in die DB hinterlege und zur laufzeit den Source mit der compiler exe ausführe ??
Wäre das besser ?
Also den Source in den Mem als Stream dann die au3.exe aufrufen und den stream übergeben. Ich hab aber immer noch das Problem das die au3.exe einen dateinamen zum compilieren will.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:21 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