Poradnik hackera... Nie, no żartowałem!
:) W każdym razie ten tekst i tak będzie dosyć poważny, bo zademonstruję
Wam tutaj kilka fajnych zastosowań naszego starego DOS-a - najbardziej
hackerskiego programu. :) W tym tekście pokażę Wam, jak napisać bardzo
szybko proste programiki, nawet jeśli nie macie o tym absolutnie pojecia.
Czy wiecie, co to są pliki wsadowe? Pewnie większość z Was słyszała o czymś
takim, a jeszcze spora część pewnie samemu potrafi je pisać. W takim wypadku
radzę nie czytać dalej. :) Jeśli jednak nie zaliczasz się do tej drugiej
grupy, to wyjaśniam: są to programy zbudowane z komend DOS-a. Nieźle się
zapowiada, nie? :)
Zresztą o plikach wsadowych wspominałem
już w poprzednim tekście - tym o Windows. Aby napisać taki program (wsadowy,
nie Windowsa :), wystarczy zwykły edytor tekstu. Gotowy dokument zapisujemy
jako "nazwa.bat". Ważniejszy od znajomości DOS-a jest jednak pomysł, do
czego tak napisana procedura może służyć? Przygotuj się na skróconą lekcję
DOS-a. ;)))
PRZYKŁAD PIERWSZY (EGZAMPEL ŁAN :)
Załóżmy, że chcesz wiedzieć, co dzieje
się z kompem podczas Twojej nieobecności. Przynajmniej, kiedy był on włączany.
Normalnie możemy zobaczyć tylko, ile czasu mamy uruchomiony Windows, i
nic poza tym. Chyba, że napiszemy sobie specjalny program. Najpierw jednak
zastanówmy się, jak sprawić by uruchamiał się on na starcie kompa? Pewnie
większa część z Was wie, co to jest autoexec.bat? Zresztą, o nim też ostatnio
pisałem. To właśnie plik wsadowy, automatycznie wykonywany przez startującego
Windowsa (lub DOS-a). Pamiętaj, żeby nie skasować jego dotychczasowej zawartości
swoim tekstem, tylko otworzyć program w Notatniku i się dopisać. :) Jeśli
jednak chcemy lepiej ukryć naszą "przynętę", możemy skorzystać z pliku
c:\windows\winstart.bat. Najczęściej nie mamy go od razu w systemie, więc
będziemy musieli samemu takowy utworzyć (plik wsadowy nie system :).
Teraz przypomijmy sobie obsługę DOS-a.
Jakie polecenia służą do sprawdzania daty i czasu? No oczywiście DATE i
TIME. Jednak jak je włączymy, to będziemy musieli wprowadzić nowy czas
lub tylko wcisnąć ENTER, aby anulować. Nie mówiąc już o tym, że osoba,
której coś takiego się włączy na starcie, może coś podejrzewać. :)
Na szczęście istnieje coś takiego, jak
potoki. Czyli wynik działania jednego programu przekazywany jest drugiemu.
Zakręciłem? :) Chyba nie... Bo oto prosty przykład:
DIR C:\WINDOWS | MORE
Jeśli za pomocą DIR wyświetlimy na ekranie zawartość folderu Windows, to, rzecz jasna, wszystkie pliki nie zmieszczą się na monitorze. Ale program MORE wychwytuje cały tekst i dzieli go na kolejne części.
A teraz nasz przykład:
DATE
TIME
Chcemy, aby DOS samemu wcisnął sobie Enter... W sumie fajnie by to wyglądało, nie. ;) Wrażliwe osoby wyskoczyłyby przez okno. :) Chodzi oczywiście o "wciśnięcie" programowe, czyli po prostu przejście do nowej linii. Do wyświetlania tekstu służy w DOS-ie polecenie ECHO. Ale jak kazać mu wpisanie samego ENTERA?
Jeśli zrobimy coś takiego:
ECHO
to zamiast pustej linii zobaczymy nie interesujący nas wcale komunikat. Ale jest pewna sztuczka:
ECHO.
Taki zapis odpowiada wyświetleniu pustego wiersza. Oprócz kropki może to być każdy inny znak, za wyjątkiem cyfr, liter i jeszcze paru innych. Pamiętaj, że nie można oddzielić go spacją. No to zaczynamy:
ECHO. | DATE
ECHO. | TIME
Czemu taka, a nie odwrotna kolejność - mógłby się ktoś zapytać? Otóż wciśnięcie ENTERA przekazywane jest poleceniu, które na nie oczekuje (DATE, TIME). Jasne?! ;)
No, ale to jeszcze nie koniec. Przecież chcemy zapisać datę i godzinę do pliku. Więc użyjemy strumienia. Nie, wcale nie znowu... poprzednio to był potok. :) A więc strumień jest to po prostu przekierowanie danych, zamiast na ekran, to na konkretne urządzenie. A pod nazwą "urządzenie" kryją się: PRN - drukarka, CON - monitor lub klawiatura, albo zwykły plik, gdy wpiszemy jego nazwę. A robimy to tak:
ECHO. | DATE > c:\windows\dziennik.log
ECHO. | TIME > c:\windows\dziennik.log
Gdybyśmy to jednak teraz odpalili :), to okaże się, że w pliku jest tylko godzina (bez daty). Po prostu znak > powoduje skasowanie dotychczasowej zawartości pliku. Ale to łatwo da się ominąć:
ECHO. | DATE >> c:\windows\dziennik.log
ECHO. | TIME >> c:\windows\dziennik.log
No i to już prawie koniec programu. Ale jeśli naprawdę uruchamialiście te przykłady, to pewnie zauważyliście coś niepokojącego. :) Wszystkie użyte komendy (aż dwie :) są wyrzucane na ekran. To można łatwo ominąć:
@ECHO OFF
ECHO. | DATE >> c:\windows\dziennik.log
ECHO. | TIME >> c:\windows\dziennik.log
Znów polecenie ECHO. Tylko z parametrem OFF, który wyłącza wyświetalnie kodu programu na ekranie. Gdybyliśmy wpisali między wierszami ECHO ON, to znów byśmy je włączyli. Teraz mogę już wyjaśnić, czemu stosujemy u góry zapis "ECHO." a nie "ECHO". Otóż napisanie tego polecenia samego (bez parametrów) spowoduje pokazanie się informacji, czy wyświetalnie kodu na ekran zostało wyłączone. Jak ja to poprzednio nazwałem: "nie interesujący nas komunikat". :)
Na końcu proponuję jeszcze dodać:
ECHO ---------- >> c:\windows\dziennik.log
żeby oddzielić daty kolejnych uruchomień
kompa.
Teraz już tylko zapisujemy efekt jako
c:\windows\winstart.bat i nic nikomu nie mówimy. :)
PRZYKŁAD DRUGI (EGZAMPEL CWAJ :)
Napiszemy teraz program, który przyda się każdemu, kto lubi kolekcjonowac mp3-ójki. Oczywiście legalne, przerobione z własnych, oryginalnych płyt CD. Jesli mamy ich dużo, to niewygodnie jest trzymać je w jednym folderze. Możemy oczywiście każdą nową "porcję" kopiować do osobnego katalogu, ale wtedy są one ułożone chaotycznie i trudno znaleźć interesujące nas kawałki bez polecenia "Znajdź". Chyba, że napiszemy program, który automatycznie skopiuje je z płyty do odpowiedniego folderu według liter alfabetu. Oczywiście pod warunkiem, że na płycie mamy MP3-ójki, a nie audiotracki. Najpierw program musi założyć kolejne foldery. Zrobimy to za pomocą tzw. pętli:
FOR %%1 IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO MD C:\MUZYKA\%%1
Nie ma sensu tłumaczyć, co znaczą te wszystkie IN albo DO - one po prostu muszą być. W każdym razie polecenie to działa tak, że podstawia pod %%1 (czyli tzw. zmienną) kolejne litery alfabetu (lub każdy inny tekst z nawiasu), a potem używa go jako części tzw. parametru wywołania komendy MD. A najprościej mówiąc - używa tej litery jako nazwy folderu do założenia.
No to mamy katalogi, teraz czas przystąpić do kopiowania. Wykona je ten sam program, gdy dodamy do niego jeszcze jedno polecenie:
COPY D:\?*.mp3 C:\MUZYKA\?\?*.MP3
Tu również można było użyć pętli FOR, ale nie ma takiej potrzeby. Zastosowaliśmy zamiast niej tzw. znaki globalne:
? - oznacza dowolny znak
* - oznacza dowolny ciąg znaków
Zobaczmy, co się dzieje: polecenie COPY
kopiuje z płyty D:\ wszystkie pliki *.mp3, zapamiętując pierwszą literę
nazwy pliku pod znakiem ?. Reszta nazwy zostaje ukryta pod gwiazdką *.
Nastepnie podaliśmy, gdzie skopiować plik. Program pamięta, jaką literę
zastąpiliśmy znakiem zapytania i wyszukuje odpowiedni folder. A potem wkleja
plik, zachowując całą nazwę.
Wiecie, co myślę? Z działania tego programu
moga byc niezadowoleni fani grup typu 666 czy 2 Unlimited. :) Przecież
nie założyliśmy folderów nazwanych cyframi... Na szczęście zespołów o tak
zaczynających się nazwach nie ma zbyt wiele, więc możemy skopiować te mp3
od razu do katalogu C:\MUZYKA. Znów używamy w tym celu automatyzacji...
;)
FOR %%1 IN (1 2 3 4 5 6 7 8 9 0) DO COPY D:\%%1*.MP3 C:\MUZYKA
Po raz drugi zastosowaliśmy pętlę FOR. Zauważyliście, że po MD nie podałem nazwy pliku, a jedynie samego folderu? To nic nie szkodzi - gdy nie zmieniamy nazwy pliku, DOS używa starej - i mamy mniej pisania. :)
KONIEC (THE END = D& :)
P.S.1> Ciekawe, czy ktoś dotarł do tego miejsca. Gratuluję. ;)
P.S.2> Czy wiesz, że czytając to stałeś się zaawansowanym użytkownikiem DOS-a? :)
by: ano.nim
2b4u@wp.pl
JEŚLI LUBISZ TRACIĆ CZAS NA CZYTANIE TAKICH
TEKSTÓW, TO NA MOJEJ STRONIE MAM TEGO TROCHĘ. :)
S e r w i s . I n t e r n e t o w y .
F 1
http://www.strony.wp.pl/wp/2b4u
2b4u = to be for you :)