Po upgrajdzie do Ubuntu 10.10, aircrack przestał mi działać.

Jak zwykle próbowałem ustawić w airodump-ng channel:


airodump-ng --channel n

Wyświetliło mi status:


fixed channel mon0: -1

Na jednym angielskim forum dyskusyjnym znalazłem rozwiązanie dla mojej karty sieciowej (atheros) i wygląda ono następująco:


wget http://wireless.kernel.org/download/compat-wireless-2.6/compat-wireless-2010-10-16.tar.bz2
tar -jxf compat-wireless-2010-10-16.tar.bz2
cd compat-wireless-2010-10-16
wget http://patches.aircrack-ng.org/mac80211.compat08082009.wl_frag+ack_v1.patch
patch -p1 < mac80211.compat08082009.wl_frag+ack_v1.patch
wget http://patches.aircrack-ng.org/channel-negative-one-maxim.patch
patch ./net/wireless/chan.c channel-negative-one-maxim.patch
gedit scripts/update-initramfs
#* Znajdź LINIĘ : KLIB=/lib/modules/2.6.31-wl/build
#* i Zamień NA: KLIB=/lib/modules/$(uname -r)/build
make
make install
make unload
reboot

Jeżeli nie wykonujesz tych komend z konta roota to musisz korzystać z sudo.

Mam nadzieję, że pomoże to wielu użytkownikom aricracka i Ubuntu 10.10 .

Wstęp

Długo zastanawiałem się nad napisaniem tego małego „how to”, ale w końcu doszedłem do wniosku, że warto. Z biegiem czasu komputery stają się coraz szybsze i szybsze… Dlatego osiąganie dużej ilości (biliony na sekundę) hashy podczas tzw. brute-force jest normalnością. Ponadto pojemne dyski (1,2,3 tb) stały się codziennością i w zupełności wystarczają, żeby trzymać na swoim HDD tablice tęczowe (ang. rainbow tables), jest to nic innego jak baza danych, przechowująca zahashowane ciągi znaków (np. md5-1-7-mixedalpha-all-space co znaczy, że tablica zawiera w sobie większość możliwych zakodowanych haseł, które zawierają od 1 do 7 znaków, małe i duże litery alfabetu (mixedalpha), znaki specjalne i spację ). Dodatkowo przy próbie „złamania” zakodowanego hasła może nam pomóc tzw. metoda słownikowa.


Programowanie

W tym tutorialu (w kodzie przykładowego programu) będziemy korzystać z funkcji hashującej md5(), ale bez problemu można zastosować tu kodowanie sha1().


class saltme {

 var $salt = "425324f475743524f6i9089573";//wymyślamy sobie jakąś sól. musi mieć przynajmniej 22 i nie może zawierać znaków specjalnych

 function salter($password) {

 return crypt(md5($password), '$2a$10$'.$this->salt);
 }
}

$salty = new saltme;
 echo $salty->salter('alekot');

Kod PHP jest wyjątkowo prosty i nie ma co go wyjaśniać (:
Wyjaśnię tylko co oznaczają ‚$2$10$’ w funkcji crypt():
$2 – informuję funkcję, że będziemy korzystać z algorytmu blowfish.
$10 – oznacza wykładnik potęgi do, której zostanie podniesiona 2 (10 => 2^10 = 1024)

Operator przypisania

Jak sama nazwa wskazuje operator ten odpowiedzialny jest za przypisanie wartości do zmiennej.

int x, y;
x = 10; // Liczbę 10 przypisujemy zmiennej x
y = x; //zmiennej y przypisujemy wartość x

Należy napomnieć, że wartości przypisywane są ze strony prawej do lewej.


Operatory matematyczne

W C++ możemy dodawać, odejmować, mnożyć, dzielić, itp.

int a, b;
a = 5 ;
b =  a + 10; // + - operator dodawania
b = a - 2; // - - operator odejmowani
b = a / 5; //  / - operator dzielenia
b = a *  5;// * - operator mnożenia
b = a % 5 // % - operator dzielenia modulo ( reszta z dzielenia określona  dla liczb całkowitych )
//w c++ występuję tzw. zapis skrócony
a = a + 5; // jest równe :
a += 5;
a = a - 5; //jest równe:
a -= 5;
a = a * 5; // jest równe
a *= 5 ;
a = a / 5; // jest równe:
a /= 5;

Inkrementacja i dekrementacja

Dla wygody programisty c plus plus przygotował dla nas tytułową inkrementację i dekrementację, które to mogą być post (po) lub pre (przed). Dzięki temu nasz kod staje się czytelniejszy i  wolny od niepotrzebnych linijek. Zastosowanie dekrementacji i inkremetacji jest bardzo proste.

int a = 500;
a++; //do 500 dodajemy 1 i otrzymujemy 501 (metoda post-inkrementacji)
a-- ;// od 500 odejmujemy 1 i otrzymujemy 499 (metoda post-dekrementacji
++a //do 500 dodajemy 1 i otrzymujemy 501 (metoda pre-inkrementacji)
--a ;// od 500 odejmujemy 1 i otrzymujemy 499 (metoda pre-dekrementacji)

Operatory logiczne

Odpowiadają matematycznej koniunkcji (i), alternatywie(lub) i negacji. Zróbmy więc małą powtórkę z liceum i zastanówmy się kiedy koniunkcja jest prawdziwa?

Pamiętasz ? (:

Koniunkcja zwraca prawdziwą wartość tylko wtedy kiedy obydwa argumenty są prawdziwe.

bool x, y, z, a
x = false;
y = true;
a = true;
z = x && y; // w tym wypadku zmienna "z" przyjmie wartość logiczną false, ponieważ jeden z argumentów był nieprawdziwy.
z = a && y; // "z" przyjmie wartość logiczną true.

Teraz czas na alternatywę. Alternatywa przyjmuje wartość logiczną kiedy chociaż jeden z argumentów jest prawdziwy.

bool x, y, z, a;
x = true;
y = false;
a = false;
z = a || x; //zwróci wartość true
z = a || y; //zwróci wartość false

Negacja natomiast neguje wartość logiczną. Operator ! zamienia wartość true na false a false na true.

bool x, y, z;
x = true;
y = false;
z = !x; //zwróci false
z = !y; //zwróci true

Operatory bitowe

Operatory te pozwalają nam na tzw. przesunięcia bitowe, polega ono na tym, że w systemie dwójkowym przesuwamy wszystkie cyfry binarne w lewo lub prawo o n pozycji, a bity, które nie mieszczą się są usuwane. W programowaniu takie przesunięcia wykorzystywane są dzielenia lub mnożenia przez 2.

short x, y ;
x = 5;
y = 6;
x << 1; // operator << przesuwa bity  w lewo
x >> 1; // operator >> przesuwa bity w prawo
~x; // operator ~ neguje ( zamienia w zapisie bitowym 0 na 1 a 1 na 0 )
x & y // operator & oznacza koniunkcję bitow
x | y // operator | oznacza alternatywę bitową
x ^ y // operator ^ oznacza alternatywę rozłączną.

Podsumowanie

Operatory w językach programowania są bardzo ważne i warto poświęcić kilka godzin(dni) na ich przyswojenie.