Prevoenje i instalacija
========================
Za prevoenje WepCrack+ programa koristi se make alat. Program make prevodi
WepCrack+ prema uputama iz Makefile datoteke sadrane u direktoriju sa
izvornim kdom. Ukoliko se ne navedu nikakvi parametri, make prevodi pojedine
module, te ih spaja u izvrnu datoteku: $ make

g++  -I pcap/include  -c -o Generator.o Generator.cc
g++  -I pcap/include  -c -o WEPCrack.o WEPCrack.cc
g++  -I pcap/include  -c -o util.o util.cc
g++  -I pcap/include  -c -o main.o main.cc
g++ Generator.o WEPCrack.o util.o main.o -o wepcrack+ -lpthread pcap/lib/libpcap.a

Linux distribucije obino ne instaliraju libpcap biblioteku i pripadna
zaglavlja ili koriste starije verzije biblioteke1. Da bi se izbjegli problemi
koji zbog toga mogu nastati kod prevoenja, libpcap biblioteka distribuira se
zajedno sa izvornim kdom programa. Osim libpcap biblioteke, WepCrack+ koristi
standardne C (libc) i C++ (libstdc++) biblioteke, standardnu C biblioteku
matematikih funkcija (libm), te biblioteku koja implementira POSIX dretve
(libpthread).  

Instalacija programa svodi se na kopiranje izvrne datoteke u eljeni
direktoriji:

# make install
install -m 0755 wepcrack+ /usr/local/bin

WepCrack+ je mogue instalirati i u direktorij razliit od pretpostavljenog
/usr/local/bin koritenjem parametra PREFIX:

$ make install PREFIX=$HOME/bin
install -m 0755 wepcrack+ /home/jdoe/bin

Upute za koritenje
====================
WepCrack+ je tipini Linux komandno-linijski program. Korisnik komunicira s
programom preko parametara komandne linije (argc i argv), dok program rezultate
izvoenja prikazuje na standardnom izlazu. Glavni program prevodi se u izvrnu
datoteku pod nazivom wepcrack+. Pokretanjem programa bez ikakvih parametara
dobiva se sljedei ispis:

$ wepcrack+
[main] ERROR: packet source not set

usage: wepcrack+ -i iface
       wepcrack+ -r file
       wepcrack+ -g len
       wepcrack+ -G key

options:
 -d level   set debug level (default: 2)
 -d ml      set debug level for module m to level l
 -f n       fork next key word when more then n guesses
 -g len     use random generator source with random key of length len
 -G key     use random generator source with specified key
 -h         this cruft
 -i iface   get frames from interface
 -k keyid   crack key with keyid (default: any)
 -l num     set key length (default: 13)
 -L n       use -t value for first n key words (default: 2)
 -m mac     crack key for mac address (default: any)
 -M max     try to keep loadaverage at max level (default: 30)
 -r file    get frames from file
 -t n       use top n guesses for lower key words (see -L)(default: 3) 
 -T n       use top n guesses for higher key words (default: 1)

debug module names (option -d):
 c  crack
 g  generator
 m  monitor
 M  main

Glavni program prijavljuje greku jer nije naveden izvor okvira i ispisuje
upute za koritenje. Iz uputa se vidi da je program mogue koristiti na etiri
osnovna naina. Prvi nain koristi itanje okvira direktno sa mrene kartice:

$ wepcrack+ -i wlan0
[main] ERROR: error starting capture: Error opening capture source: socket: Operation not permitted

Prikazana greka naznauje da program treba pokrenuti sa administratorskim
ovlastima:

# wepcrack+ -i wlan0

Drugi nain koritenja odnosi se na itanje okvira iz datoteke i ne zahtjeva
administratorske ovlasi:

$ wepcrack+ -r /tmp/frame.dump

Ukoliko se ne navedu dodatni parametri, za otkrivanje kljua e se koristiti
svi proitani kriptirani podatkovni okviri. Koritenje okvira je mogue
ograniiti navoenjem MAC adrese stanice ili identifikatora kljua.
Ograniavanje koritenja okvira korisno je u nekim specifinim situacijama.
Kada se u podruju signala nalazi vie od jedne pristupne toke koje koriste
razliite kljueve kriptiranja, navodi se MAC adresa pristupne toke iji klju
kriptiranja treba otkriti:

# wepcrack+ -i wlan0 -m 00:04:94:3a:49:30

Kada pristupna toka koristi EAP2, tj. razliite kljueve za razliite
klijente, potrebno je navesti MAC adresu klijenta. Tada se koriste samo okviri
u ijim se poljima izvora ili odredita nalazi upravo navedena MAC adresa. Ako
se u mrei istovremeno koristi vie od jednog kljua, treba navesti
identifikator kljua kojeg treba otkriti:

# wepcrack+ -i wlan0 -k 0

Ponekad je potrebno postaviti duljinu traenog kljua (pretpostavljena
vrijednost je 13 bajtova):

# wepcrack+ -i wlan0 -l 5

Programsko generiranje okvira zahtjeva navoenje kljua kriptiranja ili bar
duljine kljua (u tom sluaju klju e biti generiran koritenjem generatora
sluajnih brojeva):

$ wepcrack+ -G 33:ad:33:fe:3a:84:90:32:34:44:54:2f:3d
$ wepcrack+ -g 13

Nakon pokretanja programa razliiti moduli ispisuju rezultate svog izvoenja na
standardni izlaz. Koliinu informacija koje se prikazuju mogue je promjeniti
za sve:

$ wepcrack+ -g 13 -d 4

ili samo za pojedine module (npr. modul Generator):

$ wepcrack+ -g 13 -d g4

Kada se navede samo numerika vrijednost, tada se postavlja razina ispisa za
sve module. Ako se prije numerike vrijednosti navede odreeno slovo, tada se
razina ispisa postavlja samo za traeni modul. Tablica 1. opisuje pojedine
razine ispisa. Za svaku razinu ispisa navedene su samo informacije koje se
dodatno ispisuju, tj. vie razine ispisa ukljuuju nie. U svakodnevnom radu
preporua se koritenje razina 2. Ukoliko se eli detaljniji ispis o
napredovanju moe se bez bitnijeg usporenja koristiti razina 3. Zbog znaajnog
usporenja vie razine ispisa uputno je koristiti samo u posebnim situacijama
kao to su testiranje programa, analiza izvravanja ili pronalaenje
greaka.

                      Tablica 1. Razine ispisa
Razina	Znaenje
0 	Ispisuju se samo greke i vrijednost kljua (ako je pronaena)
1 	Ispisuju se upozorenja
2 	Ispisuju se informacije o napredovanju algoritma
3	Ispisuju se detaljnije informacije o napredovanju algoritma
4	Ispisi koji za svaki okvir prikazuju najvie nekoliko redaka
	 informacije
5	Ispisi koji za svaki okvir prikazuju vei broj redaka informacija

 Tablica 2. prikazuje slova pridruena pojedinim modulima. Za postavljanje
razine ispisa odreenog modula treba navesti slovo pridrueno tom modulu i
eljenu razinu ispisa. Za postavljanje razine ispisa 3 modula Generator
koristi se parametar komande linije -d g3.

                      Tablica 2. Oznake modula
Oznaka	Modul
c	CrackThread dretve
g	Modul Generator
M	Glavni program
m	Nadzorna dretva

Pokretanje programa sa razinom ispisa 3 daje mnogo zanimljivih informacija. Na
poetku svakog retka u uglatim zagradama navedeno je ime modula koji je
generirao taj redak. Za CrackThread dretve osim naziva navodi se i
identifikator dretve. Glavni program najprije ispisuje vrijednosti razliitih
parametara izvoenja:

$ wepcrack+ -r/tmp/x -l5 -d3
[main] IV length is 3
[main] key length is 5
[main] 8 bits per word
[main] fork for top 3 guesses when key word <= 2
[main] fork for top 1 guesses when key word > 2
[main] keep load average below 30
[main] using file /tmp/x

Modul Generator ispisuje koriteni filter. U prikazanom sluaju filter
proputa samo kriptirane podatkovne okvire. Slijedi pokretanje prve
CrackThread dretve za pronalaenje prvog bajta kljua.

[cap_gen] using filter: wlan[0:2] & 0xff40 = 0x0840
[crack/0x0808a708] started __________
[monitor] started 0x0808a708 (__________)

Nadzorna dretva svakih 5 sekundi ispisuje stanje pokrenutih CrackThread dretvi.
Za svaku pojedinu dretvu ispisuje se vrijednost poznatih bajtova kljua. Za
nepoznate bajtove ispisuje se __. Nakon toga slijedi ispis deset
najvjerojatnijih vrijednosti za bajt kojeg ta dretva odreuje. Za svaku od tih
vrijednost prikazana je uestalost pojavljivanja. Posljednja etiri elementa
ispisuju broj korisnih, broj pregledanih i udio korisnih okvira. Prvi omjer
predstavlja statistiku kada se koriste svi okviri, dok drugi omjer opisuje
rezultate koji bi se dobili kada bi se koristila AirSnort selekcijska funkcija.

[monitor] __________    0/a0    0/a1    0/a2    0/a3    0/a4    0/a5    0/a6    0/a7    0/a8    0/a9 	0/0        (0.0000%)        0/0        (0.0000%) 

Pojedine CrackThread dretve ispisuju pronaene mogue vrijednosti bajtova
kljua. Ispisuje se redni broj okvira, koriteni inicijalizacijskih vektor i
mogua vrijednost bajta kljua (navedena u uglatim zagradama). Slovo A u
uglatim zagradama naznauje da bi i AirSnort dotini okvir koristio za
otkrivanje kljua.

[crack/0x0808a708] #44548 IV=cb35fe Z=f0 K=<ec>________ [A]
[crack/0x0808a708] #45062 IV=cb36ff Z=79 K=<74>________ [A]
[crack/0x0808a708] #91749 IV=3bc5fe Z=a1 K=<9d>________ [A]
[crack/0x0808a708] #92263 IV=3bc6ff Z=fe K=<f9>________ [A]
[crack/0x0808a708] #175108 IV=cc34fe Z=99 K=<95>________ [A]
[crack/0x0808a708] #175622 IV=cc35ff Z=79 K=<74>________ [A]
[crack/0x0808a708] #222309 IV=3cc4fe Z=e6 K=<e2>________ [A]
[crack/0x0808a708] #222823 IV=3cc5ff Z=6a K=<65>________ [A]
[crack/0x0808a708] #305668 IV=cd33fe Z=f8 K=<f4>________ [A]
[crack/0x0808a708] #306182 IV=cd34ff Z=f7 K=<f2>________ [A]
[crack/0x0808a708] sleeping __________
[crack/0x0808a708] #352869 IV=3dc3fe Z=61 K=<5d>________ [A]
[crack/0x0808a708] #353383 IV=3dc4ff Z=9b K=<96>________ [A]
[monitor] __________    2/74    1/5d    1/ec    1/9d    1/65    1/f9    1/95    1/96    1/e2    1/f4       12/385178   (0.0031%)       12/385178   (0.0031%)
[crack/0x0808ae08] started 74________
[monitor] started 0x0808ae08 (74________)
[crack/0x0808ae08] #44310 IV=cb3587 Z=63 K=74<5e>______

 Nakon nekog vremena klju moe biti pronaen. Tada se pojavljuje sljedei
ispis i program zavrava s izvoenjem:

[main] FOUND KEY: ce 41 35 3a 4a

Tablica 3. prikazuje znaenje svih parametara komandne linije.

              Tablica 3. Parametri komandne linije

Parametar                      Znaenje
-d	 Poveava ili smanjuje razinu ispisa za sve ili pojedine module
-f	Postavlja vrijednost forkAt parametra razreda Monitor
-g	Postavlja duinu kljua za programski generator okvira. Klju traene
	 duine se generira koritenjem generatora sluajnih brojeva
-G	Postavlja klju kriptiranja programskog generatora okvira
-h	Ispis podranih parametara sa kratkim opisom
-i	Definira ime mrenog suelja za dohvat okvira
-k	Definira identifikator kljua koji se eli otkriti
-l	Definira duljinu traenog kljua kriptiranja
-L	Postavlja vrijednosti parametra depth razreda Monitor
-m	Postavlja MAC adresu stanice iji klju se eli odrediti
-M	Postavlja parametar loadlimit razreda Monitor
-r	Definira ime datoteke koja sadri okvire
-t	Definira vrijednost parametra topN razreda Monitor
-T	Definira vrijednost parametra topNhi razreda Monitor
