HZV Mag #3 - HZV / Hackerzvoice / The Hackademy
HZV Mag #3 - HZV / Hackerzvoice / The Hackademy
HZV Mag #3 - HZV / Hackerzvoice / The Hackademy
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>HZV</strong> <strong>Mag</strong> <strong>#3</strong><br />
Système de crack distribué - par g0uZ<br />
Alors comment on organise tout ça ? Et bien<br />
encore une fois simplement : on va identifier<br />
nos travaux de manière unique avec les préfixes<br />
distribués au clients. Ces préfixes vont<br />
servir d'identifiant pour stocker les résultats.<br />
L'utilisation d'une base de donnée de type<br />
Berkeley (BDB) permettra de stocker l'état («<br />
todo » / « done » / « affected ») d'un grand<br />
nombre de « jobs » (travaux) sur une machine<br />
très modeste. Il sera bien entendu également<br />
possible de mettre en pause ou de reprendre<br />
un traitement. Créer et ouvrir une base de<br />
donnée BDB se fait en deux lignes de code :<br />
On dispose ensuite d'un ensemble de méthodes<br />
sur notre pointeur de base dbp qui<br />
nous permettent simplement d'ajouter : put(),<br />
de récupérer : get() des couples (clé,valeur) .<br />
L'attribution des travaux est horodatées de<br />
manière à pouvoir définir un délai après lequel<br />
le job sera de nouveau disponible pour le<br />
calcul. Pour éviter les problèmes de pertes de<br />
connexion le protocole prend le partie de ne<br />
jamais resté en communication avec le client<br />
inutilement. Dès que les informations sont obtenus<br />
la socket est fermée. Si un problème<br />
survient tout de même pendant la communication<br />
le job devra atteindre son timeout pour<br />
être remis « en circulation ». L'attribution des<br />
travaux et les dialogues client / serveur sont<br />
abordés précisément dans la partie suivante.<br />
Protocole de communication<br />
Pouvoir distribuer les différentes informations<br />
au clients pour le calcul il est nécessaire<br />
d'établir un dialogue standardisé. Le schéma<br />
ci dessous présente un tel dialogue. NB : le<br />
serveur est un simple serveur TCP multithreadé<br />
: un thread est créé pour chaque<br />
connexion.<br />
NB : pour des raisons de clarté seules les<br />
phases de connexion et de libération du canal<br />
du premier échange sont mentionnés.<br />
Module de « hash »<br />
L'utilisation de la librairie OpenSSL permet de<br />
développer rapidement des modules de calcul<br />
d'empreinte pour les algorithmes<br />
suivants (entre autre) :<br />
• LM (Lan Manager), utilisé dans les séries<br />
Windows 9x<br />
• NTLM (NT Lan Manager), utilisé principalement<br />
dans les authentifications réseau<br />
• SHA0 / SHA1, fonctions de hachage<br />
conçues par la NSA<br />
• MD5 (Message Digest 5), algorithme populaire<br />
inventé par Ronald Rivest<br />
:<br />
db_create(&dbp, NULL, 0);<br />
dbp->open(dbp,NULL, db.c_str(), NULL, DB_BTREE, DB_CREATE, 0664);<br />
Ç retour au sommaire<br />
Chaque algorithme possède sa complexité<br />
propre, le nombre de tentatives par seconde va<br />
donc dépendre directement de ce facteur.<br />
Le but de cet article n'étant pas d'étudier les<br />
différents algorithmes et mécanismes cryptographique,<br />
il semble inutile de s'y attarder.<br />
Le code de chaque module, relativement simple,<br />
47