PORADNIK HACKERA ;)
Zapaszam na: strony.wp.pl/wp/2b4u

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 :)