DevNote - #2 - Wake up
Vendredi 18 janvier 2008 à 03 h 08
La dernière fois je n'ai pas été très clair, déjà à cause de la fatigue me faisant écrire n'importe quoi, mais aussi par le côté "je me jette dans le technique, au plus profond".
On va essayer de faire mieux cette fois (ce qui est mal barré vu l'heure).
Ce logiciel que je suis censé créer avec mon équipe, est un logiciel tournant sous Linux, peut être Mac / BSD plus tard, permettant d'afficher une fenêtre, qui listera tous les réseaux wifi que l'on reçoit dans le coin.
Bien sûr, comme on se base sur aircrack-ng, il sera question de plus qu'un simple listage, et ira donc jusqu'au crack de clé wifi.
Depuis le dernier article, j'ai potassé ce que j'avais fais, réfléchis avec mes coéquipiers, codé et recodé certaines choses.
J'ai maintenant un résultat, une ébauche qui bien que paraissant ridicule, est un véritable avancement face à l'impasse dans laquelle nous étions.

Vous avez le droit d'être déçus, ça n'affiche même pas les réseaux.
Cependant nous avons ici un démon / serveur, un client s'y connectant, et un plugin chargé par le client.
Ce plugin, nommé par moi même "ls" (LiSt), sera celui qui affichera les réseaux. Pour l'instant, il créé juste une fenêtre avec au lieu d'une liste, un bouton qui ne fait rien (c'était juste pour occuper l'espace durant le test), et en bas une barre de status qui en sa droite affiche l'état de la batterie quand l'ordinateur est sur batteries.
La barre de progression montre le pourcentage de courant restant, le temps en minutes à droite affiche le temps restant (O'RLY ?).
J'avais prévenu, c'est ridicule pour ceux qui ne codent pas en gtk, et certainement aussi pour ceux qui ont l'habitude, mais j'ai réalisé de très nombreux problèmes avec tout ce modèle, comme simplement la function gtk_main qui rentre dans une boucle : elle tourne tout le temps. Du coup, si le client demande à un plugin de mettre à jour un truc dans la fenêtre, gtk est pas content, et une assertion échouée m'explique que ce que je fais n'est pas bien, c'est pas thread safe et cie.
Pour l'instant, je me contente donc d'appeler une fonction idle qui se situe dans le plugin. Elle est appelée quand le client a finit une itération de sa boucle de traitement, et cette fonction idle va faire le boulot de gtk_main beaucoup plus proprement.
En fait, je me demande même si c'est pas la seule vraie solution à utiliser, je dois avouer que je suis assez débutant en gtk, et les documentations ne donnent pas de détails clair sur ce genre de cas.
La prochaine étape sera un listage des cartes wifi, avec un assistant configuration, et seulement après on pourra s'occuper du listage.
Des retours d'idées de features à implémenter sont toujours les bienvenues.
On va essayer de faire mieux cette fois (ce qui est mal barré vu l'heure).
Ce logiciel que je suis censé créer avec mon équipe, est un logiciel tournant sous Linux, peut être Mac / BSD plus tard, permettant d'afficher une fenêtre, qui listera tous les réseaux wifi que l'on reçoit dans le coin.
Bien sûr, comme on se base sur aircrack-ng, il sera question de plus qu'un simple listage, et ira donc jusqu'au crack de clé wifi.
Depuis le dernier article, j'ai potassé ce que j'avais fais, réfléchis avec mes coéquipiers, codé et recodé certaines choses.
J'ai maintenant un résultat, une ébauche qui bien que paraissant ridicule, est un véritable avancement face à l'impasse dans laquelle nous étions.

Vous avez le droit d'être déçus, ça n'affiche même pas les réseaux.
Cependant nous avons ici un démon / serveur, un client s'y connectant, et un plugin chargé par le client.
Ce plugin, nommé par moi même "ls" (LiSt), sera celui qui affichera les réseaux. Pour l'instant, il créé juste une fenêtre avec au lieu d'une liste, un bouton qui ne fait rien (c'était juste pour occuper l'espace durant le test), et en bas une barre de status qui en sa droite affiche l'état de la batterie quand l'ordinateur est sur batteries.
La barre de progression montre le pourcentage de courant restant, le temps en minutes à droite affiche le temps restant (O'RLY ?).
J'avais prévenu, c'est ridicule pour ceux qui ne codent pas en gtk, et certainement aussi pour ceux qui ont l'habitude, mais j'ai réalisé de très nombreux problèmes avec tout ce modèle, comme simplement la function gtk_main qui rentre dans une boucle : elle tourne tout le temps. Du coup, si le client demande à un plugin de mettre à jour un truc dans la fenêtre, gtk est pas content, et une assertion échouée m'explique que ce que je fais n'est pas bien, c'est pas thread safe et cie.
Pour l'instant, je me contente donc d'appeler une fonction idle qui se situe dans le plugin. Elle est appelée quand le client a finit une itération de sa boucle de traitement, et cette fonction idle va faire le boulot de gtk_main beaucoup plus proprement.
En fait, je me demande même si c'est pas la seule vraie solution à utiliser, je dois avouer que je suis assez débutant en gtk, et les documentations ne donnent pas de détails clair sur ce genre de cas.
La prochaine étape sera un listage des cartes wifi, avec un assistant configuration, et seulement après on pourra s'occuper du listage.
Des retours d'idées de features à implémenter sont toujours les bienvenues.
Je sais que c'est pas maintenant que vous allez changer d'avis, mais pourquoi se baser sur aircrack-ng ?! vous voulez vraiment compliquer le travail ?
J'espere que dans le prod final vous incluerez une version debutant et une version expert contenant plus d'options et justifiant le travail sur aircrack.
Je suppose que le + dur sera de bosser pour rendre le programme compatible avec le max de drivers des cartes wifi, ce qui n'est pas forcemment gagné.
En fait vous allez faire qqc de semblable a rutilt ?
Il existe déjà de nombreux utilitaires comme cela, networkmanager le premier.
Pour être clair, si certains ont suivit les billets de divide, on pourrait comparer notre futur logiciel à son airomap (la fonction gps est aussi prévue), avec en supplément quelques options en plus, comme notation de la sécurité, "compteur geiger" pour aider à localiser, cassage de la sécurité (c'est ici avant tout que l'on se base sur
aircrack-ng).
A la différence que notre logiciel sera fonctionnel non pas sur pocketpc, mais sur pc.
Cette idée m'est venue de quand je passais mes jours à rentrer sur les réseaux wifis privés, juste pour le plaisir de cracker et rien de plus. A force de taper tout le temps les mêmes commandes, copier coller les mêmes choses, je me suis dis qu'une interface graphique pourrait cacher tout ça; plus pratique et moins dangereux quand on est seul dans une voiture à wardriver.
Puis comme dans mon école, il nous était demandé de créer un logiciel, j'ai proposé cette idée qui fut acceptée de façon instantanée.
En fonction du temps qu'il nous restera quand on devra sortir la première version officielle, il y aura d'autres features, la connexion dans le réseau en plus du cassage de la clé en fait parti.
De toute façon, le projet est open source, sera continué par moi même et sera ouvert aux commits une fois notre soutenance passée.
Cependant contrairement à ce que l'on peut croire, le plus dur n'est pas de rendre le programme compatible avec le maximum de drivers. Si encore il serait compatible mac osx, ou pire windows le travail à effectuer serait énorme puisque ces systèmes d'exploitations "empêchent" de détourner la carte wifi de l'usage classique.
J'ai déjà consulté le code source de aircrack sur leur façon d'accéder à la carte wifi, et cette partie est plutôt bien conçue au moins, je vais même pouvoir me permettre de faire des copiers collers de bouts de code si je ne repère pas trop de bizarreries de la part des devs.
Du coup, j'ai presque une lib de communication vers les cartes wifi pour écouter et écrire les données brutes qui traverse l'air. Le 802.11 est un protocole à part entière, et loin d'être simpliste face à l'ethernet.
J'ai décidé de me lancer dans ce blog avant tout, pour mettre quelque part une note de mon avancement et pouvoir revenir dessus. Crois moi, je m'attends pas à charmer un public tel que celui de nofrag avec ça.
Ce que j'écris ici, ce largage de pensées venant de gauche à droite et tapées de façon non structurée est un peu le copier coller de mes pensées, pas d'une conférence. Comme j'essaie de penser à tous les cas lorsque je code ça devient vite vraiment le bordel, exactement comme ma cervelle.
Si ce que j'écris ne t'intéresse pas, tu n'a pas besoin de te forcer à lire.
D'ailleurs au cas où tu ne l'aurais pas remarqué, ce blog a pour titre "Stfu or code".
Pour ceux qui n'auraient encore rien compris ça signifie simplement que sur ce blog on parle de code, de technique, ou on la ferme (se casser est aussi une option possible allant de paire avec "on la ferme").
t'as un certain avenir dans la poesie geekienne toi :)
le fait de presenter un tel projet a ton ecole n'est pas legerement genant ?!
l'injection dans linux est rarement supportee par defaut...
donc c'est une interface graphique a aircrack ? :P
tant que j'y pense... il y a differantes versions d'aircrack dont certaines sont 10 fois plus rapides que d'autres (uniquement dans l'etape du "crackage"). j'ai essaye de refaire la recherche pour te donner un nom, mais jai pas directement trouve, et la flemme :/
en tout cas je suis tres tres beaucoup preneur.
en fait ce que tu veux faire c'est de faire plein de copier coller maintenant pour en faire moin apres, et d'avoir du coup ton annee. mouai..
et desole de ne parler de code. je suis simplement interesse par ton prog.
Pour l'instant une vingtaine de lignes sont du copier/coller qui a subit tout de même un traitement, adaptation mais aussi modification tout court.
Pour l'instant nous avons presque un millier de lignes au total. Le copier/coller reste respectable, et je ne compte pas dépasser les 15% sinon il est clair que ça reviendrait à 'tricher'.
Ce que je compte reprendre d'aircrack et adapter, c'est le backend: le code qui accède aux périphériques et le code qui permet de cracker une clé à partir des paquets.
Le reste, middle end et front end seront intégralement refaits. Cela inclue l'interface graphique et la structure du logiciel (séparer en deux processus dont un en utilisateur l'autre un démon qui tournera sous root, le "tout est plugin")
Déjà que tout cela est au dessus du niveau de deuxième année de DUT Informatique, alors faire nous même un algo de crackage je n'en parle même pas.
Prenons exemple, tu veux parler de aircrack-ptw, la dernière attaque en date sur le WEP, permettant de casser une clé à l'aide d'une simple dizaine de paquets de données wifi, au lieu de millions ?
A été intégré à aircrack-ng même, avec l'option -z, et il devient possible d'obtenir la clé d'un réseau en 3 minutes environ. 3 minutes entre l'instant où l'on découvre le réseau, et celui où on est connectés dessus avec la bonne clé.
Pour faire ça il ne s'agit plus d'informatique mais d'algorithme et de mathématiques beaucoup trop complexes pour le commun des mortels. Il y a longtemps que j'ai abandonné de saisir comment on peut arriver à une telle idée.
C'est pour ça que je suis content de pouvoir me permettre de copier/coller.
Mes profs sont au courant du projet, de ce que cela implique, c'est eux qui l'ont validé après tout.
Je peux même dire que c'est eux qui m'ont appris à cracker une clé wep avec aircrack.
Au contraire l'idée de ce projet fut bien accueillie par tous, à notre grande surprise même la prof de droit qui a pour habitude de rejeter tout ce qui peut aider à briser la loi.
Ils sont très axés sur la sécurité, et pour cela il faut connaitre, voire utiliser les outils qui peuvent l'être à mauvais escient. Le but n'y est pas forcément négatif, c'est un peu comme le P2P. Le WPA n'aurait jamais existé si le WEP était resté incassable.
Effectivement l'injection n'est pas supportée par défaut sous Linux non plus. Mais c'est sur cet OS qu'elle reste la plus facile puisque tout est libre, des gens ont simplement patché des drivers pour ajouter ce support.
Sur un OS non libre, il faudrait reprogrammer entièrement le driver de chaque carte wifi sans avoir en plus la moindre documentation sur le fonctionnement de la moindre carte. C'est vraiment en dessous de mon niveau et à voir l'état de l'injection sous windows, ce n'est pas en dessous que du miens.
Et j'espere qu tu ne laisseras pas tomber le blog pour donner des nouvelles du front !