Chiunque voglia far parte dell'Open C6 Project è il benvenu- to. Il progetto
si occupa di creare clients e servers C6 open source e della massima portabilità
(creati in c/c++ o java). Per maggiori informazioni, troverete tutto nella sezione
pro- getti di www.redangel.it (al momento il link non è ancora at- tivo).
==--> C6, Come sei? <--==
Questo testo è stato scritto
per soli scopi educativi, non mi assumo nessuna responsabilità per usi
illeciti di questo te- sto. Inoltre il reversing del c6 non è reato in
quanto non essendoci alcun genere di condizioni da accettare (e neppure nella
guida è scritto nulla a riguardo), è possibile disasse- mblare,
crackare e fare il reversing di ogni parte del c6. Tuttavia, il software è
protetto da copyright, quindi la co- pia è vietata.
Inoltre, ho fatto questo lavoro
solo per utilizzare C6 in LAN (usando un server locale) e sotto Linux (codandolo
in C). Al- tri utilizzi potrebbero essere illegali! Altr scopo di questo testo
è mostrare quante informazioni vengono passate dal client al server che
potrebbe benissimo loggare o 'attivarsi' alla lettura di determinate parole,
proprio come fa Echelon. Con questo non voglio assolutamente insinuare che la
tin ci spia e viola la nostra provacy, anzi già dal fatto che non chieda
molte informazioni alla nostra iscrizione si può intuire che io mi sbagli,
ma voglio solo mostrarvi le informazioni passate (nostre informazioni) al server.
Finalmente il sogno di tanti presunti
hackers, crackers, re- versers, coders e chi più ne ha più ne
metta, si avvera. Il protocollo di C6 è stato reversato nelle sue funzioni
più importanti. Le funzioni ancora da reversare sono:
- Codifica iniziale - Codifica
della password - Varie funzioni come ricerca di NetFriends e Canali.
Potrà sembrarvi molto il
lavoro ancora da fare, ma invece è abbastanza poco. La codica del C6
è del tipo cifrario di Ce- sare, quindi estremamente semplice da crackare.
Per la codi- fica della password per il momento non ho approfondito più
di tanto, poichè stavo pensando di aggirare il problema. Essendo il protocollo
ancora in fase di reversing, non sono ancora riuscito a reversarlo del tutto.
Volevo, prima di parlare del protocollo,
esprimere alcune mie idee: quanti di noi si definiscono hacker (dico noi nel
senso di 'noi che siamo nell'underground', dato che io non lo fac- cio) e alla
fine non sanno fare nulla? Questo stesso proto- collo l'ho reversato in soli
DUE giorni: una serata per eli- minare la codifica ed un giorno per comprendere
a fondo i co- mandi qui analizzati. Ne ho sentite tante, ma davvero tante sul
C6 e voglio farvi vedere qualche esempio. Innanzitutto per coloro che sono soliti
frequentare l'ormai famoso news- group free.it.hackers volevo segnalare ad esempio
un messaggio (scusate ma quando i nomi ci vogliono, ci vogliono: che significato
avrebbe altrimenti la sezione 'saluti' pre- sente in quasi tutti i tutorials?)
di uno che pensavo fosse esperto: ******.. Questo stesso ****** ha affermato
che il c6 usa il protocollo SSL per codificare i dati trasmessi. Tutto questo
è falso e vi sarà mostrato di seguito (seguire per credere :).
Oltretutto basterebbe usare lo snif- fer per notare che molti dei bytes di quando
si invia un mes- saggio restano perfettamente uguali, cambia veramente poco.
se si trattasse di SSL, cambierebbe completamente tutto senza avere elementi
logici di connessione (da un log ad un altro). Continuando, tale
******, sempre nello stesso thread dice che il server è blindatissimo
e che conviene lasciar perdere in partenza. Sempre continuando nello stesso
thread, dopo che ****** ha detto che occorre il ciclope per crackare l'SSL e
che Steve dica che c'è bisogno di una grande potenza di cal- colo per
utilizzare questo ciclope, ****** afferma che è un tool per il calcolo
distribuito. Più avanti vedremo che per reversare il c6 e creare un server
basta azzerare la chiave di codifica e per creare un client basta capire come
funziona l'algoritmo di codifica che usa quella chiave. Se il client C6 ci mette
praticamente niente per decodificare il testo co- dificato, lo stesso potrà
fare il nostro. Per coloro che vo- gliano approfondire garantisco io, l'algoritmo
mi sembra mol- to facile. Passiamo ora al protocollo. Come ho fatto a capire
che si trattava di cifrario di cesare? Semplice, come ho già detto se
si usa uno sniffer, un cumulo di dati (tra l'altro solo quelli client-server
sono codificati) sono uguali (inviando due volte un messaggio, lo sniffing è
quesi identico!). Se fosse SSL cambierebbe del tutto, ed è proprio questo
che mi ha spinto alla decodifica. Come primo pacchetto, il server manda al client
la chiave di codifica (e qui c'è da dire che c'è qualcuno di cui
non ri- cordo il nick che insisteva dicendo che lui non avrebbe man- dato la
chiave di codifica al client, ma invece è così) al client. La
chiave sono gli ultimi 8 bytes. Azzerando questi, cioè impostandoli come
bytes 00 si otterrà il testo in chiaro e, dato che così sarà
più facile, è proprio così che lavore- remo. C'è
poi da dire che tutte le comunicazioni client-serv. cominciano con l'hex 10,
mentre il serv.-client inizierà con 20. Al terzo e quarto byte troveremo
quel che è un valore short che però non è in little-endian
(cioè al contrario, la modalità usata dai programmatori esperti)
come ci aspetterem- mo. Questo contatore indica il numero di pacchetti inviati
dal server al client; ce ne sarà anche uno nei pacchetti in- viati dal
client al server. Il quinto ed il sesto byte indi- cano anche qui un valore
short non in little-endian che in- dica la lunghezza del messaggio fino alla
fine (cominciando dalla fine del valore). Ci sono poi due bytes hex e cioè
00 02 seguiti dalla lunghezza della chiave (sempre valori short) seguiti infine
dalla chiave, che noi dovremo azzerare. Per fare ciò dovremo creare il
server e fargli inviare come chia- ve 00 00 00 00 00 00 00 00. Fatto questo
il client ci invierà i dati riferiti al login (inutili qui e poi vedremo
perchè). Il pacchetto inizia con 10 0F, una stringa che sarà sempre
u- guale nelle stringhe inviate dal client. Vi è poi il contato- re in
short, i bytes alla fine del pacchetto sempre in short poi due bytes hex 10
01 che ci permetteranno di capire di che comando si tratta. Continuando, ci
sono poi i bytes 00 01 che io ho collegato al fatto che si tratti di un solo
username, ma non ne vedo lo scopo. Vi è poi un secondo valore che indi-
ca i bytes alla fine del pacchetto, sempre in short. Ora c'è la lunghezza
dello username in singolo byte, seguito dallo username. Alla fine di questo
c'è la lunghezza della pass co- dificata (e della quale per ora non conosco
ancora l'algorit- mo di decodifica). C'è poi la lunghezza della 'verifica'
se- guita dalla verifica. La 'verifica' credo sia un combinamento di pass e
user dato che cambia sia cambiando l'uno che l'al- tro. Il pacchetto finisce
con i bytes 01 0A 7F 00 00 01 00 14 A questo il server risponde, sia se è
corretto o no, inviando dei bytes nei quali comanda il client di collegarsi
ad un al- tro server. Ciò è probabilmente fatto per evitare problemi
di sovraffollamento. Questo redirecting funziona così: Inizia con i bytes
20 02, poi il valore del contatore sempre in short. Segue la lunghezza del pacchetto
fino alla fine in short. Ora il server ci comunica l'ip e la porta alla quale
dobbiamo collegarci. Il formato dell'ip sarà ABCD da noi in- terpretabile
come A.B.C.D, seguito da due bytes 00 seguiti da altri 2 bytes che definiscono
la porta in short. Essendo particolarmente intricato, faccio uno schema:
20 12 [CONTAT] [LUNGH FINE] 00
02 [LUNGH FINE] [CHIAVE]
Dove CONTAT è il contatore
LUNGH FINE la lunghezza fino al- la fine del pacchetto e la chiave la chiave
di codifica. Il pacchetto mandato dal client è:
10 0F [CONTAT] [LEN FINE] 10 01
00 01 [LEN FINE] [LEN USER] -> [USER] [LEN PASS] [PASS] [LEN VERIF] [VERIF]
Dove LEN FINE è la lunghezza
alla fine, LEN USER è la lun- ghezza dello username, PASS è la
password in codifica e VERIF è la verifica. Il server replica con:
20 02 [CONTAT] [LEN FINE] [IP]
00 00 [PORTA]
Dove IP è scritto in valori
del tipo ABCD e significano A.B.C.D e PORTA è scritto in short.
Una volta fatto ciò, il
client si scollega dal server e si ricollega all'indirizzo indicatogli dal server.
Qui troverà un altro server c6 che funzionerà come il primo per
quanto riguarda i primi due pacchetti. Poi se il login è errato in- vierà
questo pacchetto: 20 03 00 02 00 00 Facilmente è possibile intuire che
20 è l'ID del server che contrassegna ogni suo messaggio, 03 è
il comando di errore, i seguenti due bytes sono in contatore e 00 00 sono bytes
di riempimento (almeno credo :P )
Nel caso in cui è corretto
il server manda del codice, ancora in fase di analisi, in cui scrive il messaggio
di benvenuto che compare in alto a destra sulla finestra di c6 e invia i banners
che il client mostrerà.
A questo punto il client richiede
alcune informazioni sui pulsanti, come ad esempio 'scarica l'agenda!'. Il codice
per la richiesta è 10 0F 00 02 00 08 10 0D 00 02 00 02 01 2A Ancora possiamo
notare i primi due bytes, sempre uguali, il contatore, la lunghezza alla fine
in short, 10 0D che è il cosiddetto ID del comando e vari altri bytes
che non mi sono soffermato ad interpretare (tanto la stringa di richiesta è
sempre uguale!).
Il server risponde quindi con
la srtinga (in schema): 20 15 [CONTAT] [LEN FINE] [NUM PULS] [LUNGH TESTO] [TESTO]
-> [LUNGH LINK] [LINK] [...]
Oltre ai soliti bytes, troviamo
num puls, un valore short che indica al client il numero di pulsanti da inserire;
abbiamo poi TESTO che è il testo del pulsante e poi LINK che è
il link a cui punta quel pulsante. Nel caso in cui sia più di un pulsante,
la sequenza si ripete, partendo da lungh testo fino a link, fino all'esaurimento
dei pulsanti (e di noi ihhiih :)
Il client poi invia la sua userlist
al server che man mano gli dirà gli utenti che si collegano e si scollegano.
Inoltre dopo aver mandato questa list, il server ci dirà i nick col-
legati. La stringa di richiesta è questa (sempre schema):
10 0F [CONT] [LEN FINE LISTA]
10 03 00 03 [LEN FINE LISTA] -> [NUM NICK] [LEN NICK] [NICK] [...] 10 0F
00 04 00 07 10 -> 0A 00 04 00 01 64
Dove LEN FINE LISTA è la
lunghezza fino alla fine della lis- ta (non del pacchetto), NUM NICK è
il numero di nick, NICK è un nick. Il numero di nick è in short.
Vengono inviati tante volte LEN NICK e NICK quanti sono i nick. Alla fine il
pacchetto termina con quei bytes sopra scritti.
Una volta richiesta la lista dei
nick collegati, il server ci risponderà con quelli attualmente collegati;
il pacchetto è questo: 20 06 [CONTAT] [LEN FINE] [NUM NICK] [LEN NICK]
[NICK]
NUM NICK è ancora una volta
il numero di nick scritti, in short. LEN NICK e NICK vengono scritti tante volte
quanti so- no i nick da inviare.
Può capitare che a volte
all'avvio di c6 (qui si conclude il login!) venga inviato anche il pacchetto
che ci definisce di- sponibili, solo per i NetFriends o Occupati. I pacchetti
in questione sono: 10 0F [CONT] [LEN FINE] 10 0A 00 04 00 01 [STATO] Mettendo
da parte i bytes già conosciuti, abbiamo STATO che può assumere
i seguenti valori: 64 -> Disponibile 68 -> Solo NetFriends 70 -> Occupato
Analizziamo l'ultimo comando che
ho reversato per ora: i mes- saggi.
Nell'invio di messaggi ci sono
due comandi, uno per quello online ed uno per i messaggi verso utenti offline,
(email). La differenza tra i due è minima: l'incremento di un valore.
Il pacchetto è così configurato: 10 0F [CONT] [LEN FINE] 10 [VAL]
00 05 [LEN FINE] [LEN SEND] -> [SEND] 00 01 [LEN TO] [TO] [LEN FINE] [MESS]
VAL è un valore che cambia,
è appunto quello che dicevo prima che incrementa: 08 -> Messaggio
online 09 -> Messaggio offline (email)
SEND è colui che invia
il messaggio (spoof? ^^), TO è il ri- cevente e MESS è il messaggio
(ma và? :) Il valore 00 01 contenuto tra SEND e LEN TO potrebbe essere
il numero di persone a cui mandare il messaggio...bisognereb- be provare a vedere
mettendo 02 e due nick cosa succede :)
Beh...se mandiamo il messaggio,
dobbiamo certamente anche po- terlo ricevere! :)
Per quanto riguarda la ricezione,
questo è lo schema di un pacchetto inviatoci dal server: 20 0F [CONT]
[LEN FINE] [LEN FROM] [FROM] [LEN TO] [TO] 02 00 -> [MESS]
Qui non c'è nulla da aggiungere...tutto
chiaro no?
----==[ Saluti ]==----
Un saluto a tutte le crew in cui
sono che non nomino per mo- tivi di spazio. Un altro saluto a tutti coloro che
hanno pro- vato a crackare C6 e non ci sono riusciti, ma comunque una mano potevano
pure darmela (non ho trovato nessuno che mi aiutasse...ma ci sono riuscito anche
da solo). Entro breve realizzerò un server dimostrativo in Visual Basic,
utilizza- bile solo in LAN: altri usi potrebbero essere illegali. <--==