Entwickler-Ecke

Open Source Projekte - DelLocked 1.0 - gesperrte dateien löschen [7 KB]


retnyg - Mi 20.04.05 02:38
Titel: DelLocked 1.0 - gesperrte dateien löschen [7 KB]
delLocked 1.0
author: retnyg ### http://krazz.net/retnyg ###
________________________________________________________________________

simple console app [ 7 KB ] that deletes a locked file on next reboot
so you can delete a trojan or virus thats currently active.
or M$ MessAnger (usually in C:\program files\messenger\msmsgs.exe) >-P

syntax: dellocked C:\mytrojan.exe

use on own risk. if you get a heart attack while running one of my apps,
rest in peace...

http://krazz.net/retnyg/dellocked.zip


retnyg - Mi 20.04.05 22:29

hatte heute mal wieder das vergnügen einen bekannten von seinen viren zu befreien, wobei sich das tool bestens bewährt hat...


Delete - Mi 20.04.05 23:04

Dieser Hinweis: http://www.delphipraxis.net/post354922.html#354922 ist dir nicht entgangen?

Und wozu brauchst du die Kol.pas in einem Konsolenprogramm?

Und warum importierst du MoveFileEx selber, wenn du doch die Windows.pas einbindest, wo sie schon importiert wird?


retnyg - Mi 20.04.05 23:47

user profile iconLuckie hat folgendes geschrieben:
Dieser Hinweis: http://www.delphipraxis.net/post354922.html#354922 ist dir nicht entgangen?

Und wozu brauchst du die Kol.pas in einem Konsolenprogramm?

Und warum importierst du MoveFileEx selber, wenn du doch die Windows.pas einbindest, wo sie schon importiert wird?

dein hinweis ist mir nicht entgangen, ich gehe aber davon aus dass nur ein admin sich an die virenentfernung macht.
kol benötige ich, um die exe 15 kb kleiner zu kriegen.
movefileex importiere ich, weil ich ursprünglich alles von hand einbinden wollte und drum die windows.pas weggelassen hab...
hast du auch zum programm selber etwas zu sagen ?


Delete - Do 21.04.05 00:50

user profile iconretnyg hat folgendes geschrieben:
user profile iconLuckie hat folgendes geschrieben:
Dieser Hinweis: http://www.delphipraxis.net/post354922.html#354922 ist dir nicht entgangen?

Und wozu brauchst du die Kol.pas in einem Konsolenprogramm?

Und warum importierst du MoveFileEx selber, wenn du doch die Windows.pas einbindest, wo sie schon importiert wird?

dein hinweis ist mir nicht entgangen, ich gehe aber davon aus dass nur ein admin sich an die virenentfernung macht.
kol benötige ich, um die exe 15 kb kleiner zu kriegen.

In einem Konsolenprogramm? :shock:


Das ist im Prinzip doch schon alles. 14 KB und mit UPX 10 KB.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
program DelFile;

{$APPTYPE CONSOLE}

uses
  windows;

function FileExists(const FileName: string; dir: boolean = false): Boolean;
var
  hidate, lodate: word;
  Handle: THandle;
  FindData: TWin32FindData;
  LocalFileTime: TFileTime;

type
  LongRec = packed record
    Lo, Hi: Word;
  end;

  function SubFileExists: Boolean;
  begin
    FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime);
    result := FileTimeToDosDateTime(LocalFileTime, HiDate, LoDate);
  end;
begin
  result := false;
  Handle := FindFirstFile(PChar(FileName), FindData);
  if Handle <> INVALID_HANDLE_VALUE then
  begin
    Windows.FindClose(Handle);
    case dir of
      TRUE: if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0 then result := SubFileExists;
      FALSE: if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then result := SubFileExists;
    end;
  end;
end;

begin
  if (ParamCount = 1and (FileExists(ParamStr(1))) then
    MoveFileEx(PChar(ParamStr(1)), nil, MOVEFILE_DELAY_UNTIL_REBOOT)
  else
    Writeln('Usage: DelFile <Filename>'); 
end.


OK, der Win9x Support fehlt jetzt, aber der macht die Exe auch nicht mehr fett.

Zitat:

movefileex importiere ich, weil ich ursprünglich alles von hand einbinden wollte und drum die windows.pas weggelassen hab...

Dann nimm es doch aus dem Quellcode raus.

Zitat:

hast du auch zum programm selber etwas zu sagen ?

Gehört der Quellcode nicht zum Programm? Stört dich meine kritische Betrachtung des Quellcodes? Und was gibt es da zu testen? ich denke, das hast du selber gemacht und viel schiefgehen kann da ja nicht, bis auf dem Win9x Teil.


Delete - Do 21.04.05 08:34

user profile iconretnyg hat folgendes geschrieben:
movefileex importiere ich, weil ich ursprünglich alles von hand einbinden wollte und drum die windows.pas weggelassen hab...

Ich möchte nur anmerken, dass es Quatsch ist, auf die Windows-Unit zu verzichten. Die Units, die die Programme wirklich fett machen, sind Sachen wie SysUtils, Dialogs, usw. Aber die Windows-Unit? :roll: Ich meine, Luckie wird´s bestätigen können, dass die meisten Samples aus den Win32-API-Tutorials recht klein sind.

Und bevor du fragst: Nein, direkt zum Programm habe ich nichts zu sagen. Mir fällt nur gerade ein, dass schon mal jemand auf die Windows-Unit verzichtet hat, weil er meinte, das würde sein Programm kleiner machen. Der tatsächliche Dickmacher, die Registry-Unit, war aber noch drin. Na ja ... :lol:


retnyg - Do 21.04.05 10:26

user profile iconLuckie hat folgendes geschrieben:

In einem Konsolenprogramm? :shock:

was soll daran verkehrt sein ein paar KB's einzusparen ?
user profile iconLuckie hat folgendes geschrieben:

Das ist im Prinzip doch schon alles. 14 KB und mit UPX 10 KB.
OK, der Win9x Support fehlt jetzt, aber der macht die Exe auch nicht mehr fett.

siehste, bei mir ist win9x support drinne, und das ganze nur 7 kb.
ausserdem macht gerade der 9x-support wieder ein paar kb mehr aus, da funktionen für den dateizugriff sowie zur erkennung des windows-verzeichnis benötigt werden.

du musst das programm jetzt aber nicht nochmal schreiben, so klein kriegst du's eh nicht hin, ausser direkt mit asm...
user profile iconLuckie hat folgendes geschrieben:
Zitat:

hast du auch zum programm selber etwas zu sagen ?

Gehört der Quellcode nicht zum Programm? Stört dich meine kritische Betrachtung des Quellcodes? Und was gibt es da zu testen? ich denke, das hast du selber gemacht und viel schiefgehen kann da ja nicht, bis auf dem Win9x Teil.

was mich stört ist dass du nur rumnörgelst und auf uninteressante details fixiert bist. ob da der verweis auf movefileex drin ist oder nicht, ändert nichts dran dass es funktioniert :shock:

user profile iconMathiasSimmack hat folgendes geschrieben:

Ich möchte nur anmerken, dass es Quatsch ist, auf die Windows-Unit zu verzichten. Die Units, die die Programme wirklich fett machen, sind Sachen wie SysUtils, Dialogs, usw. Aber die Windows-Unit? :roll:
ich habe zuerst auf die windows.pas verzichtet, damit ich den dingen selber auf den grund gehe. zu übungszwecken. ich habe sie dann erst gegen schluss eingebunden, weil ich keine lust mehr hatte mir die konstanten zusammenzusuchen. wenn es euch beruhigt, werde ich den verweis auf movefileex im source auskommentieren, auch wenn sich dadurch am programm selber NULL ändern wird :roll:


Delete - Do 21.04.05 10:31

user profile iconretnyg hat folgendes geschrieben:
ich habe zuerst auf die windows.pas verzichtet, damit ich den dingen selber auf den grund gehe. zu übungszwecken. ich habe sie dann erst gegen schluss eingebunden, weil ich keine lust mehr hatte mir die konstanten zusammenzusuchen.

Siehste, genau das ist ja der Grund. :lol: Ich sage absolut nichts gegen dein Engagement (davon können sich andere eine Scheibe abschneiden), aber ich hätte auch keine Lust, alle Konstanten usw. selbst zu deklarieren, wenn
Zitat:
sich dadurch am programm selber NULL ändern wird :roll:

;)


Delete - Do 21.04.05 10:45

user profile iconretnyg hat folgendes geschrieben:

siehste, bei mir ist win9x support drinne, und das ganze nur 7 kb.
ausserdem macht gerade der 9x-support wieder ein paar kb mehr aus, da funktionen für den dateizugriff sowie zur erkennung des windows-verzeichnis benötigt werden.

... und die findet man in der Windows.pas.
Ich meine, nichts gegen kleine Exe-Dateien, aber man kann es auch echt übertreiben und zum Fanatiker werden.

Zitat:

du musst das programm jetzt aber nicht nochmal schreiben, so klein kriegst du's eh nicht hin, ausser direkt mit asm...

So, so. Na mal sehen, wenn ich Zeit und Lust habe. Allerdings ohne Windows9x Support, weil ich keine Möglichkeite habe das zu testen.

Zitat:

was mich stört ist dass du nur rumnörgelst und auf uninteressante details fixiert bist. ob da der verweis auf movefileex drin ist oder nicht, ändert nichts dran dass es funktioniert

Moment! Ich habe nicht genörgelt, sondern deinen Quelltext nur kritisch hinterfragt und bei Sachen, die mir aufgefallen sind mal nachgehakt. Wenn du das als nörgeln bezeichnest, dann hat das für mich den Anschein, als ob du keine Kritik verträgst.


retnyg - Do 19.05.05 11:39

update v 1.1

dellocked akzeptiert nun auch dateimasken wie *.exe
und rekursives löschen durch alle unterverzeichnisse mit schalter /R
zuerst wird versucht die datei zu löschen, nur wenn die datei gesperrt ist,
wird sie fürs löschen beim neustart markiert.

bsp:

Quelltext
1:
2:
dellocked C:\test\*.exe
dellocked "C:\system volume information\*.exe" /R


2. beispiel ist ne einfache methode alle viren zu löschen die sich in dem versteckten systemordner eingenistet haben.
falls man auf dem ordner keine zugriffsberechtigung (XP Home) hat, verwende man cacls

download beim ersten beitrag


AXMD - Do 19.05.05 13:05

Moin!

Auf den Punkt gebracht: Gesamteindruck: brauchbar

Darf ich fragen, warum du überhaupt ein Konsolenapp. machst? Du verwendest nur an einer einzigen Stelle WriteLn; außerdem gibt's sowas wie ein Readme, wo man das auch reinschreiben kann. Obwohl... die könnte ja wieder 0,5 KB wegnehmen :mrgreen: Im Ernst, retnyg, kleine Programme sind zwar nett, aber übertreiben muss man es wirklich nicht. 40 KB wären IMHO auch ok; du könntest ja eine Meldung ausgeben, wenn keine Datei angegeben wurde - die Unit Windows hat entsprechende MessageBox-Routinen dafür. Oder machen die die EXE zu groß ;)

AXMD


retnyg - Do 19.05.05 13:11

user profile iconAXMD hat folgendes geschrieben:
Moin!

Auf den Punkt gebracht: Gesamteindruck: brauchbar

Darf ich fragen, warum du überhaupt ein Konsolenapp. machst? Du verwendest nur an einer einzigen Stelle WriteLn; außerdem gibt's sowas wie ein Readme, wo man das auch reinschreiben kann. Obwohl... die könnte ja wieder 0,5 KB wegnehmen :mrgreen: Im Ernst, retnyg, kleine Programme sind zwar nett, aber übertreiben muss man es wirklich nicht. 40 KB wären IMHO auch ok; du könntest ja eine Meldung ausgeben, wenn keine Datei angegeben wurde - die Unit Windows hat entsprechende MessageBox-Routinen dafür. Oder machen die die EXE zu groß ;)

AXMD

konsolenanwendungen haben mehrere vorteile:

Quelltext
1:
2:
3:
4:
5:
- sind kleiner
- können in BaTcH-jobs verwendet werden
- können auch bei einer fernwartung per SSH benutzt werden (ziel sollte ein komplett per konsole administrierbares windows-system sein, wie bei linux)
- muss sich der programmierer nicht um visuelle komponenten und durch deren benutzung resultierende fehler kümmern
- werden von DAU's nicht verwendet, welche damit auch keinen schaden anrichten können.


Amiga-Fan - Do 19.05.05 13:22

Zitat:
- werden von DAU's nicht verwendet, welche damit auch keinen schaden anrichten können.


naja irgendjemand wird schon ein FrontEnd für dein Programm bauen ;)


Smikey - Do 19.05.05 13:42

das prog klingt ganz gut... habs selber nicht ausprobiert, aber ich denke es scheint ganz nützlich zu sein..

mal ne frage,
geht sowas in der art auch anstatt dateien zu löschen, sie zu kopieren? ich meinte systemdateien, die grade verwendet werden. die sollen beim nächsten systemstart kopiert werden???

mfg

smikey


AXMD - Do 19.05.05 13:52

user profile iconSmikey hat folgendes geschrieben:
geht sowas in der art auch anstatt dateien zu löschen, sie zu kopieren? ich meinte systemdateien, die grade verwendet werden. die sollen beim nächsten systemstart kopiert werden??


Warum beim nächsten Systemstart? Die Auslagerungsdatei zB wird dadurch nicht weniger verwendet werden :mrgreen: Das Programm ist ja eben dazu da, das gleich zu machen.

AXMD


Sprint - Do 19.05.05 22:36

user profile iconSmikey hat folgendes geschrieben:
geht sowas in der art auch anstatt dateien zu löschen, sie zu kopieren? ich meinte systemdateien, die grade verwendet werden. die sollen beim nächsten systemstart kopiert werden???

Genau dafür ist Suche im MSDN MOVEFILEEX da.