AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein selbstlöschende Datei (Exe die ein Bild enthält)

selbstlöschende Datei (Exe die ein Bild enthält)

Ein Thema von schoenwetterflieger · begonnen am 21. Sep 2007 · letzter Beitrag vom 25. Jan 2008
Antwort Antwort
Seite 2 von 3     12 3   
Cyberstorm

Registriert seit: 23. Okt 2003
159 Beiträge
 
Delphi 2010 Architect
 
#11

Re: selbstlöschende Datei (Exe die ein Bild enthält)

  Alt 23. Jan 2008, 11:03
guck dir mal die uall hook sachen an.

in der unit uallProtect gibt es die nette prozedur "CloseAndDeleteMe"


hier ein auszug:

Delphi-Quellcode:
procedure CloseAndDeleteMe; stdcall;
  function ThreadDeleteBegin(Param: Pointer): Boolean; stdcall;
  var
    XDeleteFile : function (pFileName: PChar): Boolean; stdcall;
    XSleep : procedure (dwMilliseconds: DWord); stdcall;
    XOpenProcess : function (dwDesiredAccess: DWord; bInheritHandle: Boolean; dwProcessId: DWord): DWord; stdcall;
    XTerminateProcess: function (dwProcess: DWord; dwExitCode: DWord): Boolean; stdcall;
    XCloseHandle : function (dwHandle: DWord): Boolean; stdcall;
    pFileName : PChar;
    dwProcessID : DWord;
  begin
    Result := False;

    @XDeleteFile := PPointer(DWord(Param)+0*SizeOf(Pointer))^;
    @XSleep := PPointer(DWord(Param)+1*SizeOf(Pointer))^;
    @XOpenProcess := PPointer(DWord(Param)+2*SizeOf(Pointer))^;
    @XTerminateProcess := PPointer(DWord(Param)+3*SizeOf(Pointer))^;
    @XCloseHandle := PPointer(DWord(Param)+4*SizeOf(Pointer))^;
    dwProcessID := PDWord(DWord(Param)+5*SizeOf(Pointer))^;
    pFilename := Pointer(DWord(Param)+6*SizeOf(Pointer));

    if (@XDeleteFile <> nil) and
       (@XSleep <> nil) and
       (@XOpenProcess <> nil) and
       (@XTerminateProcess <> nil) and
       (pFilename <> nil) and
       (dwProcessID <> 0) then
    begin
      dwProcessID := XOpenProcess(PROCESS_ALL_ACCESS,false,dwProcessID);
      if (dwProcessID <> 0) then
      begin
        if XTerminateProcess(dwProcessID,0) then
        begin
          XSleep(1000);
          Result := XDeleteFile(pFileName);
        end;
        XCloseHandle(dwProcessID);
      end;
    end;
  end;
  procedure ThreadDeleteEnd; asm end;

var
  pTargetMemory : Pointer;
  pTargetMemMove : Pointer;
  dwProcessID : DWord;
  dwKernelHandle : DWord;
  dwProcessIDClose: DWord;
  dwThreadID : DWord;
  dwWritten : DWord;
  dwMemSize : DWord;
  sFileName : String;
  pAddr : array[0..4] of Pointer;
begin
  dwProcessID := uallProcess.FindProcess('explorer');
  if (dwProcessID = 0 ) then
    Exit;
  dwProcessID := OpenProcess(PROCESS_ALL_ACCESS,false,dwPRocessID);
  if (dwProcessID = 0) then
    Exit;
    
  sFileName := Paramstr(0);
  dwMemSize := 5*SizeOf(Pointer)+length(sFileName)+1+Integer(@ThreadDeleteEnd)-Integer(@ThreadDeleteBegin);
  pTargetMemory := VirtualAllocExX(dwProcessID,nil,dwMemSize,MEM_COMMIT or MEM_RESERVE,PAGE_EXECUTE_READWRITE);
  pTargetMemMove := pTargetMemory;
  dwKernelHandle := GetModuleHandleA('kernel32.dll');
  pAddr[0] := GetProcAddress(dwKernelHandle,'DeleteFileA');
  pAddr[1] := GetProcAddress(dwKernelHandle,'Sleep');
  pAddr[2] := GetProcAddress(dwKernelHandle,'OpenProcess');
  pAddr[3] := GetProcAddress(dwKernelHandle,'TerminateProcess');
  pAddr[4] := GetProcAddress(dwKernelHandle,'CloseHandle');
  dwProcessIDClose := GetCurrentProcessID;
  if (pTargetMemory <> nil) then
  begin
    if WriteProcessMemory(dwProcessID,pTargetMemMove,@pAddr[0],SizeOf(pAddr),dwWritten) then
    begin
      pTargetMemMove := Pointer(DWord(pTargetMemMove)+dwWritten);
      if WriteProcessMemory(dwProcessID,pTargetMemMove,@dwProcessIDClose,SizeOf(dwProcessIDClose),dwWritten) then
      begin
        pTargetMemMove := Pointer(DWord(pTargetMemMove)+dwWritten);
        if WriteProcessMemory(dwProcessID,pTargetMemMove,@sFileName[1],Length(sFileName),dwWritten) then
        begin
          pTargetMemMove := Pointer(DWord(pTargetMemMove)+dwWritten+1);
          if WriteProcessMemory(dwProcessID,pTargetMemMove,@ThreadDeleteBegin,
               DWord(@ThreadDeleteEnd)-DWord(@ThreadDeleteBegin),dwWritten) then
            CreateRemoteThreadX(dwProcessID,nil,0,pTargetMemMove,pTargetMemory,0,dwThreadID);
        end;
      end;
    end;
  end;
  CloseHandle(dwProcessID);
end;
(benötigt natürlich noch weitere funktionen der uall librarys)

find die variante aber ganz gut, weil keine weiteren dateien usw. erzeugt werden müssen.
der explorer erledigt das für dich über CreateRemoteThread .
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#12

Re: selbstlöschende Datei (Exe die ein Bild enthält)

  Alt 23. Jan 2008, 11:46
Habe ualls Code unter XP getestet. Funktioniert - Siehe Demo Self-Deleter.

(Musste im Beispiel Projekt die Unit1 in der Uses-Klausel stehen lassen, sonst springt der AV an...)
Angehängte Dateien
Dateityp: zip self-deleter_512.zip (258,4 KB, 35x aufgerufen)
Thomas
  Mit Zitat antworten Zitat
wfoertsch

Registriert seit: 14. Jan 2005
Ort: Berlin
71 Beiträge
 
Delphi 2010 Professional
 
#13

Re: selbstlöschende Datei (Exe die ein Bild enthält)

  Alt 23. Jan 2008, 12:08
Zitat von toms:
Habe ualls Code unter XP getestet. Funktioniert - Siehe Demo Self-Deleter.

(Musste im Beispiel Projekt die Unit1 in der Uses-Klausel stehen lassen, sonst springt der AV an...)

Mein Nod32 haut erstmal einen Fehlalarm raus... ist halt fragwürdig warum sich eine .EXE selbstvernichten sollte

Wolle
Miniaturansicht angehängter Grafiken
nod32_192.jpg  
Wolfgang Foertsch
(\_/)
(O.o)
(> < ) <---This is Bunny. Copy Bunny into your signature to help him on his way to world domination.
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#14

Re: selbstlöschende Datei (Exe die ein Bild enthält)

  Alt 23. Jan 2008, 12:20
Zitat von wfoertsch:
... ist halt fragwürdig warum sich eine .EXE selbstvernichten sollte
Da fallen mir etliche Punkte dafür ein:
Vielleicht weil die Testphase von 30 Tagen abgelaufen ist?
Weil die Software sich selbst deinstallieren soll ohne Installer?
Oder weil es ein Update-File ist?
Oder weil der Benutzer keine Lizenz hat?
Oder weil die Software festgestellt hat, dass sie manipuliert worden ist?
Oder...?
Oder...?
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: selbstlöschende Datei (Exe die ein Bild enthält)

  Alt 23. Jan 2008, 12:22
Zitat von RavenIV:
Zitat von wfoertsch:
... ist halt fragwürdig warum sich eine .EXE selbstvernichten sollte
Da fallen mir etliche Punkte dafür ein:
Vielleicht weil die Testphase von 30 Tagen abgelaufen ist?
Weil die Software sich selbst deinstallieren soll ohne Installer?
Oder weil es ein Update-File ist?
Oder weil der Benutzer keine Lizenz hat?
Oder weil die Software festgestellt hat, dass sie manipuliert worden ist?
Oder...?
Oder...?
Keines davon ist aber ein Argument für eine absolute Notwendigkeit dieses Vorgangs.

Zitat:
Mein Nod32 haut erstmal einen Fehlalarm raus...
warum ist doch kein Fehlalarm.
Markus Kinzler
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#16

Re: selbstlöschende Datei (Exe die ein Bild enthält)

  Alt 23. Jan 2008, 12:37
Starte das Programm über folgende BAT-Datei (S.BAT):

Project1
del project1.exe
REM eventuell noch : del s.bat
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#17

Re: selbstlöschende Datei (Exe die ein Bild enthält)

  Alt 23. Jan 2008, 12:40
Zitat von Hansa:
Starte das Programm über folgende BAT-Datei (S.BAT):

Project1
del project1.exe
REM eventuell noch : del s.bat
Diese Befehlsfolge lässt aber nur einen einzigen Start zu.
Danach ist das Programm (und die batch) weg.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#18

Re: selbstlöschende Datei (Exe die ein Bild enthält)

  Alt 23. Jan 2008, 12:44
Nö ... denn ...
Code:
Project1
del project1.exe
>Zugriff verweigert.
... *klugscheiss*
  Mit Zitat antworten Zitat
Cyberstorm

Registriert seit: 23. Okt 2003
159 Beiträge
 
Delphi 2010 Architect
 
#19

Re: selbstlöschende Datei (Exe die ein Bild enthält)

  Alt 23. Jan 2008, 14:12
eine schönere programminterne lösung per batch, die auch nur löscht wenn man es denn wil wurde am anfang schonmal gepostet aber hier nochmal:

"Dieser Inhalt muss benutzt werden, damit eine .bat Datei entsteht, das die Exe Datei löscht, sowie sich danach selbst:
Delphi-Quellcode:
procedure KillSelf(MainForm: TForm);
begin
  with TStringList.Create do try
    Add(':Label1');
    Add('del "' + Paramstr(0) + '"');
    Add('if Exist "' + Paramstr(0) + '" goto Label1');
    Add('del "' + ExtractFilePath(Paramstr(0)) + 'name.bat"');
    SavetoFile(ExtractFilePath(Paramstr(0)) + 'name.bat');
  finally Free end;
  //Ausführen
  ShellExecute(MainForm.Handle, 'open', PChar(ExtractFilePath(Paramstr(0)) +
    'name.bat'), nil, nil, SW_HIDE);
  //Beenden
  MainForm.Close;
end;
Aufgerufen werden kann die Funktion wie folgt:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  KillSelf (Self);
end;
"
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#20

Re: selbstlöschende Datei (Exe die ein Bild enthält)

  Alt 23. Jan 2008, 18:23
Zitat von RavenIV:
Zitat von Hansa:
Starte das Programm über folgende BAT-Datei (S.BAT):

Project1
del project1.exe
REM eventuell noch : del s.bat
Diese Befehlsfolge lässt aber nur einen einzigen Start zu.
Danach ist das Programm (und die batch) weg.
Aha, soll das Programm also doch nicht gelöscht werden oder wie ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:03 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