Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 Uhr.
Seite 2 von 3     12 3      

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