![]() |
selbstlöschende Datei (Exe die ein Bild enthält)
Sers!!
Ich versuche ein Selbstlöschendes Bild zu kreieren, ich weis aber nicht genau wie... Ich habe einen ansatz: Eine exe (Die das bild enthält) erzeugt eine bat oder com datei die den inhalt hat die exe zu löschen.... dann wird die bat ausgeführt ( die nen internen timer hat) und löscht die exe kann mir einer sows schreiben, da meine kenntnisse etwas eingerostet sind.. mfg schoenwetterflieger :idea: |
Re: selbstlöschende Datei (Exe die ein Bild enthält)
Hilft aber nur, wenn innerhalb des Timerintervalls die Exe auch geschlossen wird.
|
Re: selbstlöschende Datei (Exe die ein Bild enthält)
Moin,
da liegst Du richtig, das Vorgehen wird bspw. ![]() Edit: bzgl. der Anmerkung von mkinzler - dieses Verfahren nutzt keinen Timer - die Löschversuche an die Exe werden in einer Schleife durchlaufen, solange bis sie erfolgreich sind. Dann wird die Batch-Datei gelöscht. |
Re: selbstlöschende Datei (Exe die ein Bild enthält)
mmhh.. also am besten so, das die exe erst gelöscht wird wenn sie geschlossen wird, oder die exe erstellt eine .jpg und com oder bat datei. die bat oder com löscht nach einiger zeit die jpg und exe...
|
Re: selbstlöschende Datei (Exe die ein Bild enthält)
Zitat:
|
Re: selbstlöschende Datei (Exe die ein Bild enthält)
Das ist ja lustig. Ich hab gerade gestern etwas wiedergefunden, was als vergessen galt. "Lösch Dich Selber" ist der Titel des Monsters. Der Code ist allerdings ungetestet!! :!:
Delphi-Quellcode:
// A procedure in assembler that deletes the main executable file - while
// running. Neat. procedure DeleteSelf; { Note, this version will only work, as long as the functions are imported through the import table. This is true for any Win32 app and Kernel32.dll! Anyway, if you introduce symbol names, that conflict with the function names, this code is likely to break! } var szModuleName: array[0..MAX_PATH - 1] of Char; pExitProcess, pDeleteFile, pFreeLibrary, pUnmapViewOfFile: Pointer; hModule: THandle; asm (*** Get real address of ExitProcess ***) { Dereference the function addresses from the jump table I'll briefly explain on this first function ('ExitProcess') Load effective address. EAX points to code like FF 25 XX XX XX XX -> jmp ds:XXXXXXXX } lea eax, [ExitProcess] { Ignore the jump instruction (i.e. FF 25) } mov eax, [eax+2] { EAX holds now the XX XX XX XX from above metacode, i.e. a pointer to the 'real' address } mov eax, [eax] { EAX now holds the 'real' address of the function ExitProcess within our realm } mov pExitProcess, eax { The following code works accordingly ...} (*** Get real address of DeleteFileA ***) lea eax, [DeleteFileA] mov eax, [eax+2] mov eax, [eax] mov pDeleteFile, eax (*** Get real address of FreeLibrary ***) lea eax, [FreeLibrary] mov eax, [eax+2] mov eax, [eax] mov pFreeLibrary, eax (*** Get real address of UnmapViewOfFile ***) lea eax, [UnmapViewOfFile] mov eax, [eax+2] mov eax, [eax] mov pUnmapViewOfFile, eax (*** Now the "main code" ***) push 0 call GetModuleHandleA mov hModule, eax (*** Got module handle of this instance ***) push MAX_PATH lea eax, szModuleName push eax push hModule call GetModuleFileNameA (*** szModuleName now holds the file name of our instance's module ***) call GetVersion (*** Checking for Windows 9x / Windows NT platform ***) test eax, $80000000 jz @@NTplatform //@@9xplatform: lea eax, szModuleName push system.ExitCode push 0 push eax push pExitProcess push hModule push pDeleteFile push pFreeLibrary ret @@NTplatform: push 4 call CloseHandle; lea eax, szModuleName push system.ExitCode push 0 push eax push pExitProcess push hModule push pDeleteFile push pUnmapViewOfFile ret end; |
Re: selbstlöschende Datei (Exe die ein Bild enthält)
den qelltext kappier ich nicht...hat keiner so nen prog vllt rumliege welches ich nur noch für mich bissel umbauen kann??
|
Re: selbstlöschende Datei (Exe die ein Bild enthält)
Was willst du noch? Du hast zwei Copy and Past Lösungen bekommen. Die eine entspricht deinem Prinzip und ist mit rudimentären Delphi-Kenntnissen zu verstehen, die andere erfordert eben fortgeschrittene Assembler-Kenntnisse und tiefgreifendes Wissen über das Betriebssystem, um sie zu verstehen.
|
DP-Maintenance
Dieses Thema wurde von "SirThornberry" von "Freeware" nach "Programmieren allgemein" verschoben.
|
Re: selbstlöschende Datei (Exe die ein Bild enthält)
warum willst du das, das Programm sich selbst löscht? Vielleicht gibt es ja eine bessere Lösung um das zu erreichen was du vor hast.
|
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:
|
Re: selbstlöschende Datei (Exe die ein Bild enthält)
Zitat:
|
Re: selbstlöschende Datei (Exe die ein Bild enthält)
Zitat:
Abgesehn, daß dich sogar jemand verklagen könnte, weil du wiederrechtlich Daten gelöscht hast. Zitat:
Zitat:
dein Programm findet vorübergehend meine Lizenz nicht oder es ist ein winziges bissl defekt und löscht sich > Ergebnis: 'ne Klage, Schadenersatz und ich will mein Geld zurück. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:06 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