Was muss ich machen damit sich meine .exe selber löscht.
Code Bsp. wär super.
Thx in advance
EDIT: [vb .net]
Was muss ich machen damit sich meine .exe selber löscht.
Code Bsp. wär super.
Thx in advance
EDIT: [vb .net]
mfG c00p3r
Du brauchst eine externe Anwendung oder ein Script (soweit ich weiß).
Also zum Beispiel Batch oder vbs, wobei Batch hier wohl geeigneter wäre.
Signatur hat Pause..
c00p3r (29.11.2010)
Super Sache. Gibt sowas Namens Google.
Findet man auf anhieb was mit den Suchwörtern: "VB.net Selbstlöschende Exe"
Also:
naja kenne mich zwar nicht mit .net aus aber es geht überall so:
das schreibste in ne Datei die im selben Verzeichnis ist wie deine exe...Code:@echo off ping -n 1 127.0.0.1 > NUL del "deineexe.exe" del %0 exit
die datei muss die Endung .bat haben dann startest du sie hidden...
fertig ;-)
die Zeile:
ping -n 1 127.0.0.1 > NUL
ist eine "sleep" anweisung die 1 steht für eine sekunde musste sehen ob du das überhaupt brauchst... oder vll. noch länger machst
WICHTIG:
du musst die exe natürlich beenden ... also die bat ausführen und dann deine exe sofort beenden!
Mit der Move-File api in den temp ordner schieben und beenden, ist zwar kein löschen reicht aber eig.
AFAIK kannst du die Datei NICHT im Betrieb verschieben, weshalb man auf die Batch/VBScript Dateien zurückgreifen muss.
Anstat das mit der Batch zu machen und die dann als Leiche uaf dem System zu lassen, solltest du die cmd.exe direkt ansprechen undo.ä als Parameter übergeben was deiner Applikation Zeit lässt sich selbst zu beenden bevor Windows versucht sie zu löschen..Code:ping 0.0.0.1 -n 1 -w 1000 del "Pfad deiner exe"
Hier ein C&P für dich.
Versuche wenigstens es zu analysieren.
Code:Public Sub delete() Dim ExeName As String = Path.GetFileName(Reflection.Assembly.GetEntryAssembly.Location) Dim ExePath As String = Directory.GetParent(Reflection.Assembly.GetEntryAssembly.Location).FullName Dim BatFile As String BatFile = ExePath & "\" & "del.bat" Dim FileStr As FileStream = New FileStream(BatFile, FileMode.Create) Dim StrWriter As StreamWriter = New StreamWriter(FileStr) StrWriter.WriteLine(":schleife ") StrWriter.WriteLine("erase " & ExeName) StrWriter.WriteLine("if exist " & ExeName & " goto schleife") StrWriter.WriteLine("erase %0") StrWriter.Close() Shell(BatFile, vbHide) End Sub
Sehr richtig.
"Müssen" ist immer eine sehr einseitige Art ein Problem zu lösen.
Wer nicht gerne eine Datei droppt (welche sich ja eigentlich um unauffällig zu bleiben auch löschen müsste; auch das TEMP-Dir wird nicht ständig einfach so vom System geleert), der kann das Programm auch in einen neuen Prozess forken (bei C&P-lern oft als "RunPE" bekannt) und anschließend den ursprünglichen Prozess beenden, worauf die neue Instanz die nunmehr unverwendete Ausgangsdatei löschen kann.
Der Ablauf könnte beispielsweise so aussehen:
1. Programm A startet
2. es wird geprüft, ob sich das Programm im Systemordner befindet (generisch kann man das sehr gut mit GetModuleFileName und GetSystemDirectory machen)
3. Befindet es sich NICHT im Systemordner, so kann angenommen werden, dass es gerade vom Benutzer gestartet wurde; das Programm startet nun einen weiteren Prozess aus dem Sysdir (mspaint.exe, calc.exe, oder etwas was mehr nach einem wichtigen Systemprozess aussieht; svchost oder sonst was - was halt da ist eben), dem es als Argument (geht ganz normal via CreateProcess; nennen wir dieses neu gestartete Programm mal Programm B) den Pfad zu sich selbst (GetModuleFileName) übergibt und macht den Rest aus dem alt-bekannten RunPE-Muster.
4. Programm A beendet sich
5. Programm B wurde gerade gestartet und ist ja weil Programm A sich selbst in den Prozess injeziert hat mit Programm A identisch; es führt also auch Schritt 2 durch. Der Unterschied ist hierbei, dass das Programm ja nun als beispielsweise mspaint.exe im Sys-Ordner läuft - d.h. es forkt nicht ein zweites mal, sondern kann etwas anderes machen.
6. Programm B wartet 1 Sekunde (muss nicht sein; aber so kann man sicherstellen, dass Programm A zu der Zeit wirklich beendet ist)
7. Programm B hat ja den Pfad zu Programm A als Argument erhalten - weiß also wo Programm A auf der Festplatte liegt --> Programm B löscht Programm A.
8. Programm B macht was es eigentlich machen soll (die Spuren sind verwischt; Programm B läuft unter dem Namen eines anderen Prozesses und sieht damit unauffällig aus)
Ein weiterer Vorteil ist auch noch, dass Programm B ja im Weiteren als ein vermeindlich systemeigener Prozess läuft. Der User würde also auch mit dem Taskmanager keinen auffälligen Prozess erkennen.
Aber hey - wozu erzähle ich das eigentlich? Das kriegt hier doch eh keiner zusammengepastet ^_^
PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
please do feed the trolls crew and elk
Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
"Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^