Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Programm löscht sich selber ! (https://www.delphipraxis.net/103891-programm-loescht-sich-selber.html)

taktaky 23. Nov 2007 15:30


Programm löscht sich selber !
 
Hallo

ich möchte einen Tool programmieren, dass er sich selber nach einer bestimmten Zeit (3 Tage z.B. ) löscht, auch wenn das Programm nicht ausgeführt wird

Wie kann man sowas realisieren ?

Dezipaitor 23. Nov 2007 15:32

Re: Programm löscht sich selber !
 
Gegenfrage:

Wie kann etwas, dass nicht existiert, etwas machen?

Antwort:
Indem etwas, was existiert, dies erledigt.

Dani 23. Nov 2007 15:36

Re: Programm löscht sich selber !
 
Ich unterstell dir jetzt einfach mal, dass du hier etwas gegen den Willen des Benutzers löschen willst. Dazu ist zu sagen, dass es nicht möglich ist, sofern der Benutzer ein bischen Ahnung von der Rechtevergabe unter WinNT/XP/Vista hat.

Luckie 23. Nov 2007 16:08

Re: Programm löscht sich selber !
 
Mit Hilfe der Suchfunktion solltest du fündig werden. Man könnte so etwas zum Beispiel mit einer Stapelverarbeitungsdatei machen.

taktaky 24. Nov 2007 10:18

Re: Programm löscht sich selber !
 
Zitat:

Zitat von Luckie
Mit Hilfe der Suchfunktion solltest du fündig werden. Man könnte so etwas zum Beispiel mit einer Stapelverarbeitungsdatei machen.

Suchbegriff ?

bitsetter 24. Nov 2007 10:36

Re: Programm löscht sich selber !
 
Hi,

ein Beispiel zum Erstellen und Ausführen einer Stapelverarbeitungsdatei findest du hier.

alzaimar 24. Nov 2007 12:10

Re: Programm löscht sich selber !
 
Wie löscht sich ein Programm, das gar nicht läuft?

DIE Antwort würde mich mal interessieren. Das Stichwort "Stapelverarbeitung" führt jedenfalls nicht zum Ziel.

XXcD 24. Nov 2007 12:49

Re: Programm löscht sich selber !
 
Also als erstes mal musst du das Programm in den Autostart setzen.
Dann muss eine Datei oder ähnliches erstellt werden wo das aktuelle Datum drin steht.
Bei jedem Start wird dann überprüft wieviel Tage vergangen sind.
Bei drei Tagen muss das Programm eine Bat datei erstellen die das Programm und sich selbst löscht.

Hier mal nen Beispiel was in der .bat stehen muss
Code:
    :Repeat
    del "Die exe die gelöscht werden soll.exe"
    if exist "Die exe die gelöscht werden soll.exe" goto Repeat
    del "Datei zum löschen der exe.bat" ;

alzaimar 24. Nov 2007 13:45

Re: Programm löscht sich selber !
 
Zitat:

Zitat von XXcD
Also als erstes mal musst du das Programm in den Autostart setzen.

Wie soll das gehen, angesichts ...
Zitat:

Zitat von taktaky
... ein Tool programmieren, dass er sich selber ... löscht, auch wenn das Programm nicht ausgeführt wird


XXcD 24. Nov 2007 13:51

Re: Programm löscht sich selber !
 
Dann müsste also noch ein zeweites Programm erstellt werden, was dann nur dafür da ist nach drei Tagen die .bat zu erstellen und alles dann löscht.

Matze 24. Nov 2007 14:48

Re: Programm löscht sich selber !
 
Ich vermute, er möchte, dass kein extra Tool läuft und dann geht es nicht.
Es sei denn, man könnte in den Aktenkoffer (oder wie diese ganzen Windows-Tools heißen) irgendetwas eintragen, sodass Windows das Löschen veranlasst.

Was soll denn überhaupt der Sinn des Ganzen sein? Mir fällt nichts ein, wo man das sinnvoll einsetzen könnte.

Dezipaitor 24. Nov 2007 14:55

Re: Programm löscht sich selber !
 
Windows Aufgabenplaner kann dasselbe machen. Braucht aber Adminrechte.

Deep-Sea 26. Nov 2007 07:43

Re: Programm löscht sich selber !
 
Sieht ein wenig so aus, als sei DRM genau dafür geschaffen worden :P Pfui ...

christian_u 26. Nov 2007 08:39

Re: Programm löscht sich selber !
 
Was hast das ganze mit drm zu tun ?
Wozu brauchst du das ?

Deep-Sea 26. Nov 2007 08:46

Re: Programm löscht sich selber !
 
Zitat:

Zitat von christian_u
Was hast das ganze mit drm zu tun ?
Wozu brauchst du das ?

Weil es u.a. dazu da ist, Dinge nur einen bestimmten Zeitraum nutzbar zu machen.
Ich brauche DRM nicht :wink: ... und sicherlich ist es auch hierfür nicht sinnvoll ...

Fraglich ist ehr, warum taktaky so erpicht darauf ist, das Programm nach x Tagen (ab wann? ^^) zu löschen. :shock: ...

alzaimar 26. Nov 2007 18:18

Re: Programm löscht sich selber !
 
Na ganz einfach. Wenn man ein Programm zum download anbietet, soll es sich nach ein paar Tagen eben in Luft auflösen. Sozusagen eine Datei mit Verfallsdatum...

Interessante Sache. Ich glaube, sich selbst löschende Dateien haben sehr viel mit KI zu tun, denn auch wir sind vergesslich... :zwinker: Was war doch gleich nochmal das Thema? :gruebel:

Cyberbob 26. Nov 2007 19:30

Re: Programm löscht sich selber !
 
Selbst wenn er das jetzt hinbekommt. Kommt in ein Paar tegen jemand wie er an und fragt hier im Forum, wie er das verhindern kann. Wenn ich deinem Programm die rechte nehme, dateien zu erstellen oder zu löschen, was willst du dann noch machen. Bau doch lieber eine Demo-Version, da gabs hier im Forum auch schon einige Themen.
Knacken kann man sowas immer. Wer was dran machen will, schaft das auch und wenn die Frage wieder hier im Forum auftaucht!!!

Luckie 27. Nov 2007 07:36

Re: Programm löscht sich selber !
 
Und es würde wahrscheinlich sogar der Tatbestand der Computersabotage erfüllt sein, wenn sich das Programm ohne Einwilligung des Benutzers selber löscht.

Schaedel 27. Nov 2007 07:53

Re: Programm löscht sich selber !
 
Dazu kommt ja noch die Systemwiederherstellung und und und...
Naja dann lieber eine 30 Tage Testversion o.A.
Finde die "Selbstzerstörung" etwas hart und gar nicht Benutzer gerecht.
Zudem macht es auch keinen guten Eindruck, wenn man seine Software selbst löscht.

LoCrux 28. Nov 2007 04:33

Re: Programm löscht sich selber !
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also,

die Loesung fuer Dich: einen Windows-Dienst erstellen, der den "NTFS Last-Access-Timestamp" fuer Dein Programm ausliest und nach gewuenscher Bedingung loescht.
How To Service (TUT von MaBuSE): hier
Muss allerdings garantier sein, das der Schluessel
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro l\FileSystem\NtfsDisableLastAccessUpdate=0 (DWORD)
gesetzt ist.
Nachteil: Der Dienst bleibt fuer alle Ewigkeit wenn Du ihn nicht deinstallierst.

Sollte das fuer Dich nicht in Frage kommen, kann ich nur mit einer "suicide" Routine dienen,
die allerdings das ausfuehren deines "Tools" [:gruebel:] bedingt.
WARNUNG: Sie funzt ist aber Quick'N'Dirty.

Die Suicide.exe

Delphi-Quellcode:
program Suicide;

{$APPTYPE CONSOLE}


uses
  SysUtils,
  TLHelp32,
  Windows;

var
  fn : PAnsiChar;
  cnt : Integer;

function KillTask(ExeFileName: string): Integer;
const
  PROCESS_TERMINATE = $0001;
var
  ContinueLoop  : Boolean;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  Result := 0;
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

  while Integer(ContinueLoop) <> 0 do
  begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
      UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
      UpperCase(ExeFileName))) then
      Result := Integer(TerminateProcess(
                        OpenProcess(PROCESS_TERMINATE,
                                    BOOL(0),
                                    FProcessEntry32.th32ProcessID),
                                    0));
     ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
end;

begin
  if (ParamCount>0)
  then begin
    fn := PAnsiChar(ParamStr(1));
    if FileExists(fn)
    then begin
      if (KillTask(ExtractFileName(fn))=1)
      then begin
        cnt := 0;
        // WHY!!! Warten bis Windoof die Datei Freigegeben hat, solange halt den Versuch
        // unternehmen zu loeschen.
        // Dine exe darf nicht scheibgeschuetzt sein. Kann man aber ja noch einbauen.
        while (FileExists(fn) and (cnt<1000))
        do begin
          inc(cnt);
          DeleteFile(fn);
          Sleep(5);
        end
      end;
    end;
  end;
end.
Sollte selbsterklaerend sein.

In Deinem Tool:

Delphi-Quellcode:
uses
  ..,ShellApi,QFileCtrls,uHexFile,..; // uHexFile enthaelt die "Binary" der Suicide.exe

const
  fn : String = 'suicide.exe'; // Die Suicide.Exe
Delphi-Quellcode:
procedure CommitSuicide;
var
  FOutHandle,
  FOutLength : Integer;
  myName     : String;
begin
  // Create The suicide.exe
  if not(FileExists(fn))
  then FOutHandle := FileCreate(fn)
  else FOutHandle := FileOpen(fn, fmOpenWrite);
  FileWrite(FOutHandle,HexFile,SizeOf(HexFile));
  FileClose(FOutHandle);
  // Call suicide.exe
  myName := ExtractFileName(ParamStr(0));
  ShellExecute(Handle, nil, PChar(fn) ,PChar(myName),NIL, SW_HIDE);
end;
uHexFile.pas (Auszug)

Delphi-Quellcode:
unit uHexFile;

interface

Type
  ArrOfByte = Array[0..42495] Of Byte;

Const
  HexFile : ArrOfByte = (
077,090,080,000,002,000,000,000,004,000,015,000,255,255,000,000,184,000,000,000,000,
000,000,000,064,000,026,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,
000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,001,000,
000,186,016,000,014,031,180,009,205,033,184,001,076,205,033,144,144,084,104,105,115,
032,112,114,111,103,114,097,109,032,109,117,115,116,032,098,101,032,114,117,110,032,
117,110,100,101,114,032,087,105,110,051,050,013,010,036,055,000,000,000,000,000,000,
000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,
000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,
000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,
.
.
.
000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,
000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,
000,000,000,000,000,000,000,000,000,000,000,000,000);


implementation

end.
OK. Wie gesagt. Suboptimal. Aber als Ansatz vielleicht brauchbar.
Man koennte z.B. in die Suicide.exe noch nen 'Secure Delete' Algorithmus einbauen
und das 'HexFile' komprimiert ablegen (z.B. zLib oder LZMA).


PS. Bevor Fragen aufkommen. I know 'uBinFile' waere passender. War aber zu faul.

//Edit: Service TUT eingefuegt.

SirThornberry 28. Nov 2007 06:39

Re: Programm löscht sich selber !
 
Da mir das ziel nicht gerade legal vorkommt und der Nutzer sich nicht äußern wollte wozu er das braucht mache ich hier erstmal zu. Der Fragesteller darf sich bei mir per PN melden und mir das Ziel des vorhabens glaubhaft nahe bringen.
Wenn ich dann der Meinung bin das hier nicht das Forum missbraucht wurde um etwas illegales zu erreichen gebe ich das Thema wieder frei :) Ich bitte um Verständnis das wir bei diesem Nutzer inzwischen etwas misstrauisch sind.

(ganz nebenbei fehlt mir mal wieder der Ansatz zur Eigeninitiative. Ich konnte bisher noch nirgends lesen was der Nutzer selbst gemacht hat oder sich überlegt hat)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz