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
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); RunProcessAndWait(RunFilePath + RunFileName, RunFileParam); end; |
Und hier der Code zum starten der Anwendung.
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:
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); ExeFileStream.Free; CryptFileStream.Free; 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.