Autor Beitrag
TheWhitePhoenix
Hält's aus hier
Beiträge: 13

Linux, Win 2000 Server, Win XP Pro
D2 Std, D2 C/S, D6 Pers, D2005 Pers
BeitragVerfasst: Mo 02.05.05 13:29 
Hallo Leute,

ich hoffe ihr könnt mir helfen. ich Arbeite gerade an einem Tool Welches einen EXE Schutz darstellt. Man Schützt eine EXE mit einem Passwort und dann kann man die anwendung nicht mehr ohne das Passwort starten. Nun wird das über eine art Loader Realisiert der das Passwort abfragt die entschlüsselung der Datei durch führt und dann die Anwendung starten soll. Das Problem ist das er es nicht tut. Ich Kompiliere den Loader (Executer) unter Delphi 2 um die Datei möglichst kelin zu halten. aber er enstchlüsselt zwar die geschützte EXE aber er startet sie aus irgend einem Grund nicht. Hier erst mal die Entschlüsselung und der Aufruf des Anwendungsstarts

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TfrmExecuter.sbtnOKClick(Sender: TObject);
var decryptfile: boolean;
begin
  GetRunFileName();
  ucCrypt.Salt := ucPasswdSalt;
  ucCrypt.Key := txtPasswort.Text;
  bfhChiper.Keyword := ucCrypt.Result;
  ExeFileStream := TFileStream.Create(RunFilePath + RunFileName, fmCreate);
  CryptFileStream := TFileStream.Create(RunFilePath + PExeName, fmOpenRead);
  decryptfile := bfhChiper.DecryptStream(CryptFileStream, ExeFileStream);
  //Ausführen der entschlüsselten EXE z.B. _notepad.exe
  RunProcessAndWait(RunFilePath + RunFileName, RunFileParam);
end;


Und hier der Code zum starten der Anwendung.
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
Procedure TfrmExecuter.RunProcessAndWait (aFilename: String; param: String);
Var 
  StartupInfo : TStartupInfo; 
  ProcessInfo : TProcessInformation; 
  Result: Boolean; 
Begin
  frmExecuter.Hide();
  FillChar (StartupInfo, SizeOf (TStartupInfo), 0);
  StartupInfo.cb := Sizeof (TStartupInfo);
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW OR STARTF_USEPOSITION OR STARTF_USESIZE ;
  StartupInfo.wShowWindow := SW_SHOWDEFAULT;
  ShowMessage('Starte Applikation...');
  Result := CreateProcess (
      nil,
      pChar (aFilename + ' ' + param),
      nil,
      nil,
      False,
      NORMAL_PRIORITY_CLASS,
      nil,
      nil,
      StartupInfo,
      ProcessInfo
    );
  If Result then
    WaitForSingleObject (ProcessInfo.hProcess, INFINITE);
  if ProcessInfo.hProcess <> 0 then
    CloseHandle (ProcessInfo.hProcess);
  ShowMessage('Applikation geschlossen!');
  frmExecuter.Show();
  frmExecuter.Close();
end;


Die ShowMessage(s) sind um mir einen Hinweis zu Verschaffen wo der Fehler sein könnte. Ich Sah den Hinweis des Anwendungstart und sofort danach auch schon den Hinweis der Beendigung der Applikation.

Ich kann aber kein Problem entdecken. Vielleicht sieht ja jemand ein Problem.

Ich bedanke mich schonmal im Voraus für eure Mühe.

Sorry ich habe den Fehler gerade selber entdeckt. Ich muss den Filestream mit der die entschlüsselte EXE Darstellt frei geben, bevor ich sie mit dann Ausführen kann.

Der Code mit dem Fehler war hier:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TfrmExecuter.sbtnOKClick(Sender: TObject);
var decryptfile: boolean;
begin
  GetRunFileName();
  ucCrypt.Salt := ucPasswdSalt;
  ucCrypt.Key := txtPasswort.Text;
  bfhChiper.Keyword := ucCrypt.Result;
  ExeFileStream := TFileStream.Create(RunFilePath + RunFileName, fmCreate);
  CryptFileStream := TFileStream.Create(RunFilePath + PExeName, fmOpenRead);
  decryptfile := bfhChiper.DecryptStream(CryptFileStream, ExeFileStream);
  // Freigeben der FileStreams
  ExeFileStream.Free;
  CryptFileStream.Free;
  //Ausführen der entschlüsselten EXE z.B. _notepad.exe
  RunProcessAndWait(RunFilePath + RunFileName, RunFileParam);
end;


PS: Wenn das Programm fertig ist könnt ihr es euch unter www.r-landscheidt.ne...nProtector_Setup.exe runterladen.


MfG

TheWhitePhoenix
---------------
aka René L.