venerdì 17 dicembre 2010

Password e disassemblatori

Vediamo oggi come disassemblare un programma e trovare le informazioni che ci interessano. Per lo scopo potremmo utilizzare un qualsiasi software commerciale ma per ovvie ragioni legali, decido di realizzare un piccolo programma in c. Quindi realizzeremo un programma in c che richieda una password e poi cercheremo di scoprire quest'utlima attraverso la via del reversing. Il sorgente del nostro programma sarà il seguente:

#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argv[]){
char password[11]={"3fs8dr12JW"},pwd[11];
int i=0,comp=-1;
do{
printf("Per accedere al programma devi inserire una password:\n");
gets(pwd);
comp=strcmp(password,pwd);
if(comp==0){
printf("PASSWORD CORRETTA\n");
}else{
printf("PASSWORD SBAGLIATA\n");
}
i++;
}while(i<3 && comp!=0);
if(comp!=0)
printf("Password sbagliata per tre volte di seguito! Uscita forzata!");
else
printf("Accesso consentito!");
system("PAUSE");
return 0;
}

Il programma chiede una password per avviarsi che può essere sbagliata per massimo 3 volte dopodichè esce. Ora vediamo come ottenere la password di questo programma utilizzando un'altra strada. Innanzitutto abbiamo bisogno di uno strumento importantissimo: il debugger. Il debugger che utilizzerò in questo esempio è ollydbg. Apriamo questo programma e apriamo il nostro file eseguibile:

Come vedete siamo fermi sul cosidetto entry point (cioè da dove parte il programma) con indirizzo 00401220. Ora se scorriamo un pò più giu il nostro programma notiamo qualcosa di veramente interessante, infatti:

sulla riga con indirizzo 004012BA troviamo la nostra password salvata in chiaro. E quindi come avete visto abbiamo scoperto la password! Analizziamo innanzitutto qual è stata la negligenza del programmatore. In questo caso abbiamo salvato la password in chiaro in una variabile di nome password che altro non era che un vettore di char, ovviamente un programmatore serio non l'avrebbe mai fatto, perché tutte le variabili vengono salvate in una zona della memoria direttamente accessibile in fase d'esecuzione. Ovviamente questo piccolo articolo non è esaustivo e completo (anche perché manca una bella parte teorica, che ho volutamente scordato per farvi entrare nell'immediatezza del processo) perché si potrebbe parlare per ore sul cracking. Però è sconvolgente notare che una miriade di programmi rilasciati come trial seguono questa procedura e quindi è veramente facile individuare il seriale...a voi le belle cose...
Concludo postando due programmi uno uguale a quello che abbiamo visto e un altro un pò più difficile, aspetto che mi mandiate le password tramite email...vediamo chi ci riesce.... :D Ciao a tutti...

P.S.:
Per quanto riguarda il primo è del tutto simile a quello che abbiamo visto. Per il secondo per scoprire la password dovrete faticare un pò, dovete eseguire il programma attraverso ollydbg (tasto f9) ma priva dovete porre un breakpoint sul punto giusto. Un breakpoint altro non è che un interruzione del programma, attraverso esso potete vedere i valori delle variabili correnti e motlo di più...Per mettere un breakpoint posizionatevi su di un indirizzo (riga) e premete F2 vedrete che la parte sinistra si colora di rosso, questo sta ad indicare che avete messo un breakpoint e quando il programma arrivera su quel punto si metterà in pausa. Ecco i programmi:

Programma semplice

Programma un pò più difficile

domenica 14 novembre 2010

Driver rtl8187 new release

Non installate i driver di aircrack-ng! Il produttore e cioè realtek ha deciso di rilasciare i driver rtl8187. Li ho trovati sul sito del produttore e le cose sono davvero cambiate ora la scheda è paragonabile ad una atheros o simili, i driver di realtek sono proprio una bomba!! Ora è tardi per postare una guida ma al più presto mi farò vivo per il momento l'unica cosa che vi posso dire è di non installare niente e di aspettare...
Saluti...

Driver rtl8187

Vediamo come compilare e installare i driver patchati di aircrack-ng per abilitare l'injection e migliorare la comunicazione sulla scheda wifi con chipset rtl8187. Un pò di tempo fa ho comprato un antenna wifi esterna usb con chipset rtl8187. Un ottima antenna non c'è che dire! Ha solo una pecca, i driver per linux non sono efficienti come quelli di windows. Inserisco l'usb e vedo che in realtà con linux la scheda viene riconosciuta, quindi penso di non dover far altro che dare i comandi per la connessione. Avvio il terminale e mi connetto alla mia rete wifi (da premettere che precedentemente la scheda wifi interna del mio notebook non vede proprio la rete mentre la scheda esterna mi da una percentuale del 75% quindi un buon guadagno!) Nei primi cinque minuti la connessione è una bomba quindi penso veramente di aver risolto il problema, ma.....ad un certo punto il computer si rallenta e a stento riesco a muovere la freccia del mouse. Allora termino il programma wpa_supplicant e il computer si riprende. Capisco che il malfunzionamento è da attribuire ai driver della mia scheda! Allora comincio a navigare e finisco sulla pagina di aircrack-ng il quale afferma di aver patchato i driver rtl8187 e quindi penso che installandoli non solo migliorerei i driver ma anche l'injection (cercate su internet per chi non sa cosa significa). Quindi prendo la decisione di compilare i driver di aircrack. Leggendo dal sito vedo che la suite aircrack-ng comprende un tool che si chiama aridriver-ng che dovrebbe compilare e installare i driver automaticamente, quindi scarico dal repository l'ultima versione di aircrack-ng e l'installo. A questo punto cerco compilare i driver con il comando
airdriver-ng compile 35

Quel 35 si riferisce ad una lista di aircrack dove 35 sta per Realtek rtl8187. A questo punto questo comando scarica dal sito i sorgenti dei driver applica qualche patch e comincia a compilare. Dopo neanche un secondo dalla scritta
Compiling the source...

ottengo un errore e per capire di che errore si tratta vado a leggere il log in /var/log/airdriver. Da qui vedo che l'errore è dovuto ad una voce che nei nuovi kernel da 2.6.31 è cambiata di nome, cercando su internet e per evitare di sostituire la stringa a mano in ogni file riesco a trovare una patch (non ricordo il sito, ma chiunque ne ha bisogno può contattarmi gilela fornirò via mail!) che fa il lavoro sporco per me. Copio questa patch nella cartella /usr/src/drivers se non esiste createla! Ora però ho il problema di come applicare la patch. Scopro che il file airdriver-ng in realtà è uno script bash. Allora apro la shell e do il comando:
vim /usr/sbin/airdriver-ng

mi studio un pò lo script e riesco a capire in quale punto andare a modificare. Mi posiziono sulla riga 2424 (dovrebbe esserci un fi) e inserisco una nuova linea in cui scrivo:
cd /usr/src/drivers/rtl8187_linux_26.1010.0622.2006/
patch -p1 < /usr/src/drivers/rtl8187-ng-2.6.31.patch
cd -

Salvo il file chiudo e ridò il comando "airdriver-ng compile 35" ed ecco di nuovo un altro errore, rileggo il log e capisco che l'errore è dovuto alle voci
#include asm/io.h
#include asm/semaphore.h

Questi file ovviamente non sono presenti nella cartella asm! Allora riapro il file airdriver-ng e aggiungo ancora altre righe tra le prime due righe che ho inserito prima e il comando "cd-". Il file finale avrà queste righe aggiunte in prossimità della riga 2425 dopo del "fi":
cd /usr/src/drivers/rtl8187_linux_26.1010.0622.2006/
patch -p1 < /usr/src/drivers/rtl8187-ng-2.6.31.patch
sed -s 's/asm\/io.h/linux\/io.h/' beta-8187/r8187.h > beta-8187/r8187mod
sed -s 's/asm\/semaphore.h/linux\/semaphore.h/' beta-8187/r8187mod > beta-8187/r8187mod2
rm -rf beta-8187/r8187.h beta-8187/r8187mod
mv beta-8187/r8187mod2 beta-8187/r8187.h
cd -

Salvo il file e chiudo! ridò il comando:
airdriver-ng compile 35

e finalmente vedo il mio driver compilato!!!
Allora contento di ciò do il comando finale:
airdriver-ng install 35

E il modulo mi viene installato, l'utlimo passo per utilizzare il driver di aircrack è rimuovere il driver di default del kernel, che verrà caricato comunque ad ogni riavvio del pinguino, e caricare il driver patchato di aircrack-ng tramite i comandi:
modprobe -r rtl8187
modprobe r8187

Se vedete che la vostra scheda va meglio, balcklistate il driver rtl8187 così ad ogni riavvio non sarà caricato! Spero che questo post sia comprensibile!
Ciao a tutti...alla prossima!

domenica 1 agosto 2010

Internet key vodafone K3765H

Vediamo come configurare la internet key della vodafone (la classica pennetta) su una qualsiasi distribuzione Linux (in questo articolo utilizzeremo la distribuzione Slackware in quanto è questa la mia preferita). Inseriamo la pennetta nello slot usb. Ora aspettiamo una 20 di secondi e poi digitiamo da terminale in qualità di amministratori:
# dmesg

Ora nel log comparso a video assicuriamoci che la pennetta sia stata riconosciuta come tale. Basta che ci sia una riga in cui sia scritto modem GSM o qualcosa di analogo, come in questo esempio:
USB Serial support registered for GSM modem (1-port)
usbcore: registered new interface driver option
option: v0.7.2:USB Driver for GSM modems
option 1-3:1.0: GSM modem (1-port) converter detected
usb 1-3: GSM modem (1-port) converter now attached to ttyUSB0
option 1-3:1.1: GSM modem (1-port) converter detected
usb 1-3: GSM modem (1-port) converter now attached to ttyUSB1
option 1-3:1.2: GSM modem (1-port) converter detected
usb 1-3: GSM modem (1-port) converter now attached to ttyUSB2
option 1-3:1.3: GSM modem (1-port) converter detected
usb 1-3: GSM modem (1-port) converter now attached to ttyUSB3
scsi 3:0:0:0: CD-ROM Vodafone CD ROM (Huawei) 2.31 PQ: 0 ANSI: 2
scsi 4:0:0:0: Direct-Access Vodafone Storage (Huawei) 2.31 PQ: 0 ANSI: 2
sd 4:0:0:0: Attached scsi generic sg2 type 0
sr1: scsi-1 drive
sr 3:0:0:0: Attached scsi CD-ROM sr1
sr 3:0:0:0: Attached scsi generic sg3 type 5
sd 4:0:0:0: [sdb] Attached SCSI removable disk

Nel caso la nostra pennetta sia stata riconosciuta come semplice CDROM (quindi non compare nessuan riga con la scritta modem GSM) dobbiamo installare usb-modeswitch, che troviamo pacchettizzato su slacky.eu oppure lo possiamo scaricare dal sito del produttore http://www.draisberghof.de/usb_modeswitch/#download. Una volta installato usb-modeswitch possiamo cercare di far riconoscere la nostra penna con il comando:
# usb_modeswitch -v 12d1 -p 1465

questo solo nel caso della penna K3765H altrimenti dovrete cambiare l'id che non sara più 12d1:1465.
Ora una volta riconosciuta la penna abbiamo bisogno di un altro programma: wvdial. Wvdial si occuperà di creare una connessione ad internet che sfrutta la penna riconosciuta come modem. Installato questo software, che possiamo trovare sempre pacchettizzato su slacky.eu, con un editor di testo creiamo il file /etc/wvdial.conf e inseriamo le seguenti righe:
[Dialer Defaults]
Init3 = AT+CGDCONT=1,"IP","web.omnitel.it"
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Modem Type = Analog Modem
Phone = *99#
ISDN = 0
Username = user
Init1 = ATZ
Password = password
Modem = /dev/ttyUSB0
Baud = 460800

Salviamo il file e infine da semplice utente diamo il comando:
$ wvdial

A questo punto si avviera la connessione, dobbiamo attendere circa un minuto affinche la connessione vada a buon fine. Quando la connessione sarà stata attivata nel terminale compaiono gli indirizzi ip del Primary DNS e del Secondary DNS segnamoci questi indirizzi ip. Ora editiamo il file /etc/resolv.conf, cancelliamo tutto e inseriamo le seguenti righe:
nameserver primo_indirizzo_ip_segnato
nameserver secondo_indirizzo_ip_segnato

ovviamente al posto di primo_indirizzo_ip_segnato e secondo_indirizzo_ip_segnato dovete inserire quei due ip che avete segnato precedentemente. Salvate il file e avviate il vostro browser preferito. Ora potrete navigare anche dal pinguino...A proposito non dimenticate di rimuovere la richiesta di pin sulla scheda che inserite all'interno della penna!