![]() |
Re: selbstlöschende Datei (Exe die ein Bild enthält)
guck dir mal die uall hook sachen an.
in der unit uallProtect gibt es die nette prozedur "CloseAndDeleteMe" hier ein auszug:
Delphi-Quellcode:
(benötigt natürlich noch weitere funktionen der uall librarys)
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; find die variante aber ganz gut, weil keine weiteren dateien usw. erzeugt werden müssen. der explorer erledigt das für dich über CreateRemoteThread :-). |
Re: selbstlöschende Datei (Exe die ein Bild enthält)
Liste der Anhänge anzeigen (Anzahl: 1)
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...) |
Re: selbstlöschende Datei (Exe die ein Bild enthält)
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Mein Nod32 haut erstmal einen Fehlalarm raus... ist halt fragwürdig warum sich eine .EXE selbstvernichten sollte :roll: Wolle |
Re: selbstlöschende Datei (Exe die ein Bild enthält)
Zitat:
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...? |
Re: selbstlöschende Datei (Exe die ein Bild enthält)
Zitat:
Zitat:
|
Re: selbstlöschende Datei (Exe die ein Bild enthält)
Starte das Programm über folgende BAT-Datei (S.BAT):
Project1 del project1.exe REM eventuell noch : del s.bat |
Re: selbstlöschende Datei (Exe die ein Bild enthält)
Zitat:
Danach ist das Programm (und die batch) weg. |
Re: selbstlöschende Datei (Exe die ein Bild enthält)
Nö ... denn ...
Code:
... *klugscheiss* :mrgreen:
Project1
del project1.exe >Zugriff verweigert. |
Re: selbstlöschende Datei (Exe die ein Bild enthält)
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:
Aufgerufen werden kann die Funktion wie folgt:
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;
Delphi-Quellcode:
"
procedure TForm1.Button1Click(Sender: TObject);
begin KillSelf (Self); end; |
Re: selbstlöschende Datei (Exe die ein Bild enthält)
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz