Autor |
Beitrag |
Biarchiv
Beiträge: 688
|
Verfasst: Mi 09.10.02 12:29
Hallo,
Wie könnte den sowas ohne VCL und andere Komponenten funktionieren.
Ich öffne per Shell eine andere Datei (*.exe) .
Die Datei die geöffnet wurde darf man nicht weiterkopieren können.
Nach dem Ausführen wird sie von meine Programm wieder gelöscht.
Prog A schützt > Shell Prog B
Wenn es da nur eine Komponente gibt dann bitte eine kleine die ohne
VCL geht.
Danke.
|
|
tommie-lie
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Mi 09.10.02 13:47
Häh?
Wenn ich das richtig verstanden habe, öffnet dein Programm eine Datei. Vermutlich mit 'nem Stream, oder? Schau mal in der Onlneilfe unter dem Stream nach. Da gibt es ein Attribut, daß den Modus, in dem die Datei geöffnet werden soll. Dieses kann unter anderem den Zugriff von anderen Dateien sperren. Ob da auch eine Lese-Sperre (und kopieren ist ja nur lesen) dabei ist, weiß ich auswendig nicht. Wenn eine dabei ist, kann kein anderes Programm (ob nun der Explorer oder ein anderes selbsgemachtes Programm) diese Datei lesen, solange die Datei geöffnet ist. Wenn du sie aber gleich nach dem schließen löscht, gibt's keine Probleme. Nur wenn du sie während der Laufzeit des Programmes mehrmals öffnen willst, musst du das anders Regeln.
Aber wenn du eine normale Datei nicht kopieren können darfst (ohne das sie geöffnet, gerade erstellt oder sonstwas ist) dann geht das unter Windows (9x) nicht, da das FAT32 keine Zugriffsrechte vergeben kann. Wie's unter NTFS aussieht, weiß ich nicht. Unter Linux (ext2, RFS müsste es auch können, ext3 sowieso) gibt es dafür mit dem mod-Shell-Befehl eine Möglichkeit Benutzerrechte zu ändern, sodaß nur der aktuelle Benutzer die Datei antasten darf.
Sollte ich irgendwas ganz falsch verstanden haben, vergiss meinen Post.
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
O'rallY
Beiträge: 563
|
Verfasst: Mi 09.10.02 17:21
Zitat: |
Sollte ich irgendwas ganz falsch verstanden haben, vergiss meinen Post.
|
Toller Beitrag, den man schnell wieder vergessen soll .
Ich glaube, er will nicht eine Datei zum Bearbeiten öffnen, sonder eine Datei ausführen und diese dann schützen. Aber ebenso wie tommie-lie geschrieben hat, wüsste ich nur, wie es bei Streams möglich ist...
_________________ .oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
|
|
tommie-lie
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Mi 09.10.02 18:39
Schön wenn du ihn toll findest.
Aber ich habe das raus gemacht, was ich aus der Frage verstanden habe. entweder bessere Fragen, oder dümmere Antowrten.
Aber wenn du's auch nciht besser weißt, habe ich ja nix verpasst zu lernen...
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
O'rallY
Beiträge: 563
|
Verfasst: Mi 09.10.02 19:57
Sorry, wenn ich dich gekränkt haben sollte, war echt nicht meine Abicht. Es war eigentlich auch nicht ernst gemeint, was ich geschrieben habe. Ich fand nur diesen subtile Kommentar am schluss amüsant... doch vollkommen in Ordnung. Also nochmal, s tut mir leid wenn du mich missverstanden hast... Kanns du mir nochmal verzeihen (dieser Betrag ist nicht ironisch gemeint,... nur um Missverständisse auszuschließen )
_________________ .oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
|
|
Biarchiv
Beiträge: 688
|
Verfasst: Do 10.10.02 18:56
Hallo,
Danke für Eure Post.
Nunja interessant nur will ich eine EXE Shellen aslo ausführen. Dieser folgenden Code öffnet (shell) eine EXE file und wartet bis sie wieder vom Benutzer beendet wird.
Ich hab was gehört das das mit "fmshareexlusive" gehen kann. Wer weiß darüber mehr oder hat einen besseren Vorschlag? Bei diesen Beispiel wird die EXE (Shw('test.exe', ParamStr(1)); geöffnet und waret bis der Benutzer abbricht. Ginge da was zum einbauen???
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: 33: 34:
| procedure ShW(FileName: string; Params: string); var exInfo: TShellExecuteInfo; Ph: DWORD; Msg : TMsg;
begin FillChar(exInfo, SizeOf(exInfo), 0); with exInfo do begin cbSize := SizeOf(exInfo); fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT; Wnd := GetActiveWindow(); ExInfo.lpVerb := 'open'; ExInfo.lpParameters := PChar(Params); lpFile := PChar(FileName); nShow := SW_SHOWNORMAL; end; if ShellExecuteEx(@exInfo) then Ph := exInfo.HProcess else begin // ShowMessage(SysErrorMessage(GetLastError)); Exit; end; while WaitForSingleObject(ExInfo.hProcess, 50) <> WAIT_OBJECT_0 do // while PeekMessage(Msg, 0, 0, 0, 0) do // begin TranslateMessage(Msg); DispatchMessage(Msg); // end; //Application.ProcessMessages; CloseHandle(Ph); end; |
|
|
O'rallY
Beiträge: 563
|
Verfasst: Do 10.10.02 18:57
Ich hab mich mal n bisschen umgeschaut und habe folgendes gefunden: den API-Funktion LockFile. Ist sogar hier im Forum besprochen.
_________________ .oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
|
|
O'rallY
Beiträge: 563
|
Verfasst: Do 10.10.02 19:01
Biarchiv hat folgendes geschrieben: | Ich hab was gehört das das mit "fmshareexlusive" gehen kann. |
Diesen Befehl gibt es meines Wissens nur bei Streams als eine Property:
Quelltext 1: 2: 3: 4: 5: 6:
| {...} var FS:TFileStream; begin FS := TFileStream.Create('C:\afile.txt', fmCreate or fmShareExclusive); {...} |
_________________ .oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
|
|
SMI
Beiträge: 106
Win95-2003 / Debian / Suse
D1/D3/D6/D7
|
Verfasst: Do 10.10.02 20:24
Meinst du so was:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| VAR EXE :TFileStream; begin WinExec(PCHAR('d:\project1.exe'),SW_SHOW); exe:= TFileStream.Create('d:\project1.exe', fmOpenRead or fmShareExclusive); TRY Showmessage('Datei exklusiv geöffnet'); Finally exe.free; end; |
Funktioniert erstaunlicherweise! Was hast du damit eigentlich vor?
SMI
(10.10.02 21:38 Tino) Code-Tags hinzugefügt.
_________________ Wenn es im Jahre 1879 schon Computer gegeben hätte, würden diese vorausgesagt haben, daß man infolge der Zunahme von Pferdewagen im Jahre 1979 im Pferdemist ersticken würde.
(John C. Edwards, brit. Zukunftsforscher)
|
|
Biarchiv
Beiträge: 688
|
Verfasst: Fr 11.10.02 13:01
[quote="SMI"]Meinst du so was:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| VAR EXE :TFileStream; begin WinExec(PCHAR('d:\project1.exe'),SW_SHOW); exe:= TFileStream.Create('d:\project1.exe', fmOpenRead or fmShareExclusive); TRY Showmessage('Datei exklusiv geöffnet'); Finally exe.free; end; |
Funktioniert erstaunlicherweise! Was hast du damit eigentlich vor?
SMI
-----------
Ja das sieht gut aus.
Werde es heute Abend probieren. Werde da auch ParamStr(1) einbauen.
Ich hoffe das er auch wartet bis das Programm wieder beendet ist.
Finally
exe.free;
DeleteFile(PCHAR('d:\project1.exe');
Wollte so einen EXE Protector schreiben.
|
|
SMI
Beiträge: 106
Win95-2003 / Debian / Suse
D1/D3/D6/D7
|
Verfasst: Fr 11.10.02 13:36
Der ist aber nicht sehr sicher!
Schieß mal das Programm während der Ausführung ab, dann wird deleteFile nicht ausgeführt, das da Programm beendet wird weden von Windows auch alle Dateizurgiffe beendet, daraus folgt: Die "exe-Datei" ist Datei ungeschützt im Ausgangspfad.
Einen funktionierender Ansatz für Exeprotectoren, ist folgender : Der Exe Header wird manipuliert, woraufhin die Exe wie eine DLL startbar ist, also nicht mehr von selbst ab laufen kann. Zum Starten muss der Exe muss der Protector dann dir , durch Manipulation erstellte, Einstiegsfunktion aufrufen. Das ganze erforder aber recht gutes Wissen von der Headerstruktur eine Exe.
SMI
_________________ Wenn es im Jahre 1879 schon Computer gegeben hätte, würden diese vorausgesagt haben, daß man infolge der Zunahme von Pferdewagen im Jahre 1979 im Pferdemist ersticken würde.
(John C. Edwards, brit. Zukunftsforscher)
|
|
Biarchiv
Beiträge: 688
|
Verfasst: Fr 11.10.02 14:24
SMI hat folgendes geschrieben: | Der ist aber nicht sehr sicher!
SMI |
Ja sowas habe ich auch schon getacht.
Ja Header kenne ich mich aus.
Also ich setze bei PE die Datei auf DLL.
Nur wie kann ich dann bei WinEXEC das so simulieren?
Oder wie könnte das gehen. Ich nehmen den Entry Point und
ziehe da halt 55h ab. Also Exe Startet nicht mehr.
Also wenn mein Programm die EXE öffnet springt der beim EntryPoint
+ 55h ein. Und die Datei geht.
Hast halt eine solche Idee wie das gehen könnte?
Danke SMI
|
|
SMI
Beiträge: 106
Win95-2003 / Debian / Suse
D1/D3/D6/D7
|
Verfasst: Fr 11.10.02 15:14
Du musst das Programm nachdem es modifiziert ist wie eine DLL laden via LoadLibarayEx, die in der Hilfe folgendermaße definiert ist:
Quelltext 1: 2: 3: 4: 5: 6:
| HINSTANCE LoadLibraryEx(
LPCTSTR lpLibFileName, // points to name of executable module HANDLE hFile, // reserved, must be NULL DWORD dwFlags // entry-point execution flag ); |
da trägst du deinen entry-point ein und es müsste dan klappen.
SMI
_________________ Wenn es im Jahre 1879 schon Computer gegeben hätte, würden diese vorausgesagt haben, daß man infolge der Zunahme von Pferdewagen im Jahre 1979 im Pferdemist ersticken würde.
(John C. Edwards, brit. Zukunftsforscher)
|
|
SMI
Beiträge: 106
Win95-2003 / Debian / Suse
D1/D3/D6/D7
|
Verfasst: Fr 11.10.02 15:19
Folgendes au der ApiHifde habe ich versehtlich nicht mitkopiert
Quelltext 1:
| The LoadLibraryEx function maps a specified executable module into the address space of the calling process. The executable module can be a .DLL or an .EXE file. The specified module may cause other modules to be mapped into the address space. |
SMI
_________________ Wenn es im Jahre 1879 schon Computer gegeben hätte, würden diese vorausgesagt haben, daß man infolge der Zunahme von Pferdewagen im Jahre 1979 im Pferdemist ersticken würde.
(John C. Edwards, brit. Zukunftsforscher)
|
|
Biarchiv
Beiträge: 688
|
Verfasst: Fr 11.10.02 16:45
Hallo,
Gibts da irrgendo ein kleines Beispiel dafür.
Bei Delphi3 hat er nichts in der Hilfe.
Danke.
|
|
SMI
Beiträge: 106
Win95-2003 / Debian / Suse
D1/D3/D6/D7
|
Verfasst: Fr 11.10.02 17:14
Doch hats ich hab auch nur Delphi 3, du musst da die API Hilfe aufrufen, oder bei msdn nachschauen bzw. googeln.
msdn.microsoft.com/l...y_point_function.asp
msdn.microsoft.com/l...se/loadlibraryex.asp
SMI
_________________ Wenn es im Jahre 1879 schon Computer gegeben hätte, würden diese vorausgesagt haben, daß man infolge der Zunahme von Pferdewagen im Jahre 1979 im Pferdemist ersticken würde.
(John C. Edwards, brit. Zukunftsforscher)
|
|
tommie-lie
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Fr 11.10.02 19:56
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
O'rallY
Beiträge: 563
|
Verfasst: Fr 11.10.02 20:30
Zitat: | Nix gekränkt, nix beleidigt |
Puh!, da fällt mir aber ein stein vom Herzen ...
_________________ .oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
Zuletzt bearbeitet von O'rallY am Sa 12.10.02 17:01, insgesamt 2-mal bearbeitet
|
|
Wiesenbiber
Beiträge: 18
|
Verfasst: Fr 11.10.02 22:14
Titel: Andere Lösung?!
Hallo,
ich weiß nicht ob dir die folgenden Zeilen unbedingt nützlich sind, aber wenn du deine "B Datei", wie du Sie genannt hast vor dem kopieren schützen willst, dann verschmelz doch die B Datei in der A datei, die wird dann nur zur laufzeit aus der B datei ausgelagert, beispielsweise in ein Temp verzeichnis und nach programmende wieder verschmolzen. So ist sie nur zur laufzeit des programms kopierbar und dass auchnur wenn man weiss wie sie heisst und wo sie ausgelagert wird.
|
|
SMI
Beiträge: 106
Win95-2003 / Debian / Suse
D1/D3/D6/D7
|
Verfasst: Sa 12.10.02 02:57
@Wiesenbiber
Hallo,
Biarchiv hatte genau das vor, das problem, daran ist: wenn ich das programm mit hilfe eines debuggers überwache weiß ich wo es dateien ablegt, wenn ich es nun zum richtigen zeitpunkt abschieße, kann das programm die datei nicht mehr weglöschen, da es ja mutwillig zum "absturz" gebracht wurde. Somit hat ein mittelmäßiger Programmieren innerhalb von einer minute das geschützte programm! Daher ist das ganze sehr unsicher.
SMI
_________________ Wenn es im Jahre 1879 schon Computer gegeben hätte, würden diese vorausgesagt haben, daß man infolge der Zunahme von Pferdewagen im Jahre 1979 im Pferdemist ersticken würde.
(John C. Edwards, brit. Zukunftsforscher)
|
|
|