Wolność teoretycznie istnieje. Wybór też. Lecz jedyne co prawdziwe to Ty.

Walka z robactwem.


Dodano dnia 10.05.2009


Do niedawna codzienne skanowanie pendrive w celu usunięcia wszystkich szkodników, nie było dla mnie problemem. To przecież tylko kilka minut, w ciągu których mogę sobie przygotować kolację. Niestety ta monotonność w końcu doprowadziła mnie do stanu, w którym pomyślałem, że pendrive zabezpieczać czas zacząć!

O co konkretnie chodzi? Pracownie komputerowe w mojej szkole są istną wylęgarnią wszelkiego robactwa, trojanów, spyware i małych wirusów. Podłączenie do jednego z komputerów swojej pamięci przenośnej jest równoznaczne z przyniesieniem do domu nowych przyjaciół. Jako, że nie lubię tłoku, doszedłem do wniosku, że napisanie prostego skryptu zabezpieczającego pendrive, nie może być trudne.

Jak w każdym przypadku pisania jakiejkolwiek aplikacji, warto jest mieć plan. Tak i było tym razem. Aplikacja ma się uruchamiać automatycznie, działać w tle, wykonywać pętelkę z założonymi procedurami. Procedury to najogólniej:
  • czyszczenie folderu RECYCLER
  • kasowanie plików autorun.inf siedzących w każdym podfolderze

Trudne? Z założenia, nie. Jeżeli czytasz to i zarazem piszesz hobbystycznie programy, wiesz, że problemy pojawiają się nagle i parami. Tak było i tym razem.

Wybór języka do projektu to zawsze ciekawe zajęcie. Pascal/Delphi odpada. Wg mnie to dobry język do nauczenia się podstaw programowania. C/C++? Owszem, jednak nie uśmiecha mi się po każdej małej poprawce, kompilować kodu. Batch? Dlaczego nie? Aplikacja i tak ma działać na systemach rodziny Windows, więc platforma nie jest problemem. Dodatkowo zawsze bardziej cieszy mnie wykorzystanie czegoś lekkiego i w miarę szybkiego.

Ok. Mamy język, mamy plan. Czas zacząć! Działanie w tle zostawiłem sobie na później, gdyż chciałem zająć się ścisłym engine. Szybki rzut oka na kilka komend i kawałek kodu sam powstał:
Code:

:work
attrib -r -a -s -h autorun.inf /S
del /Q /F /S "autorun.inf" >> log.txt
attrib -r -a -s -h \recycler /s /d
rmdir \recycler /s /q >> log.txt
echo End of part while
sleep 1
goto work


Jak widać, całość nie jest wielce skomplikowana. Na początku zdejmuję atrybuty chroniące plik autorun.inf oraz dodatkowym przełącznikiem operuję na owym pliku we wszystkich podfolderach. Dalej następuje kasacja autoruna i powtarzanie powyższych czynności dla folderu RECYCLER. W ostatnich linijkach kodu widzimy „sleep 1”. Nie jest to niestety standardowe polecenie BATCH a jedynie mój mały program wspomagający napisany w C++. Na końcu następuje zapętlenie procedury i całość zaczyna się od nowa.

Oczywiście przydałby się jakiś log. Warto jest wiedzieć, czy rzeczywiście program coś skasował. Jak widać na powyższym listingu, operacja DEL jest przy okazji notowana do pliku log.txt, którego początek tworzę poprzez zapisanie daty, czasu i tytułu pliku. Tą operację przedstawia kod poniższy.
Code:

:log
echo RailWayMan [ Copyright by Patryk (Patrykuss) Szlagowski ] > log.txt
date /T >> log.txt
time /T >> log.txt
echo. >> log.txt
goto work


Po tej części pozostała najważniejsza kwestia. Jak zakończyć działanie programu w taki sposób, aby żadne niepożądane programy nie zdążyły przekopiować się na pendrive? Jest to problem, z którym borykam się do dnia dzisiejszego. Co prawda, mam pewien pomysł, ale potrzebuję na jego realizację trochę czasu. Najprawdopodobniej RailWayMan zostanie zmodyfikowany w taki sposób, że jego założenie pracy ciągłej w ukryciu stanie się niepotrzebne. Wystarczy przecież tylko raz sprawdzić zawartość pendrive po czym go po prostu odmontować. To jednak w następnym wpisie!

Na dzień dzisiejszy odsyłam do:

Kategoria: Kategoria

Autor: Patryk Szlagowski
@Malcom, niestety timeout'a u mnie najzwyczajniej nie ma ;). To właśnie z tego powodu, skleciłem swój kod.

Swoją drogą, widzę, że przychodzi do mnie coraz więcej blogerów, których wpisy czytuję regularnie :).
Data dodania: 29.05.2009
Autor: Malcom
Zamiast sleepa mozesz wykorzystac timeout:
timeout /t 1 /nobreak
Data dodania: 27.05.2009

Nick:

Komentarz:

token



statystyka