Epitech Projs News
Bon, vomme je vois qu'il y a quand meme des visites sur ce blog venant de ercherches Google sur les derniers projets que j'ai eu a realiser pour Epitech, je me suis decide a faire une petite recap des dernieres peripeties:
Alors, on va commencer par la realisation d'un dissector pour Wireshark (anciennement Etherreal) pour le projet Honeypipe. Pour rappel, Honeypipe est un projet qui reunit plusieures choses en plus du dissector. En effet, il s'agit avant tout de realiser un programme de type attaque Man In The Middle (MITM) LAN (oui prour les kiddies, c'est pas la peine d'essayer ce genre de truc sur le Net hein) pour le protocole de messagerie Netsoul, qui est la messagerie instantanee officielle de l'ecole.
Donc, concernat ce premier aspect, nous avons realise notre logiciel (mon binome et moi) en C# en utilisant un wrapper pour la libpcap et inspire de la jpcap, du nom de sharppcap.
Eh bien, la premiere chose a ete d'etudier le protocole Netsoul, et vous savez quoi ? Bah c'est plutot pourri comme protocole lol. Deuxieme chose, router des paquets en .Net, bah c leeeent. Oh ouais c klr que ca se traine le cul les enfants. Mais bon, gros gros avantage c'est que comme on est des nuls en prog graphique, les winforms c'est carrement la fete :-D
Concernant le dissector en lui meme, il faut savoir qu'il s'agit ni plus noi moin s d'un parser pour un protocole defini (ici Netsoul). Alors je vais pas m'ettendre sur ca ici car Wireshark a le merite d'etre super bien documente. On trouve dans la doc developer un squelette de dissector pour demarrer. Il est aussi primordial de bien regarder les sources des autres dissectors deja integres a Wireshark tout en se gardant de regarder kles protocoles qui "font le cafe".
Je m'explique: Sauf si vous tripe vraiment a creer ce genre de chose ca va grave vous prendre la tete et c'est pas trop lisible pour commencer. Au pire, si vous voulez en faire un qui poutre commencez petit et revenez sur ce genre de chose plus tard quand vous maitriserez plus les concepts et l'API. comme dirait l'autre: "Keep it simple baby".
Bien, passons a la suite. Le plat de resistance en question c'est le projet Nocode. Ce projet s'inscrit dans le module appele Malicious code et intervient a la suite du projet Rosetta Stone (oui, souvenez vous, le virus Windows polymorphe). Concretement, il s'agit de creer un executable windows (format PE)....sans programmer ! Looool oui, je vous vois bien vous dire: "mais n'imp, qu'est qu'il dit ??"
Explication: lorsque vous creez un programme, vous utilisez un langage, un compilateur et un linker,non ? Oui, eh bien la, on zappe ca, on va ecrire directement en Hexa dans un fichier texte. Bon, vu comme ca c'est assez inhumain je vous l'accorde, mais pour realiser notre executable PE, on va avoir le droit d'utiliser le compilateur assembleur NASM en mode binaire, et ca, ca va non pas nous permettre de realiser notre programme en asm x86 (sinon on est plus dans le sujet hein :-)), mais d'utiliser le "langage" NASM ou disons les facilitees qu'il va nous fournir comme les labels et la creations de variables nommees. Bon, si vous comprenez rien, voici une ptite illustration toute simple:
ALors, je pense que vous avez compris l'interet la. Listing a, vous avez 2 "instructions" et la 3eme etant la taille de votre code (somme de ce que vous venez d'ecrire). Vous devez marquer en dur la taille de votre code, et ca c'est mega chiant, car vous devez calculer la taille de ce que vous venez d'ecrire, ici un Word (4octets) et un DWord (8), et si vous ajoute du code, bah faudra recompter. Bon compris le principe ? Bien, alors avec ce genre de chose on peut faire plein de trucs sachant qu'un label n'a p as de taille et que la ligne qui le suit est directement pointee par le label. Enfin bref, je m'egare, si vous avez deja code en asm ca vous parle, sinon...pas sur.
Bien donc maintenant que vous avez une idee de la tete du projet, si je vous dit qu'il fallait realiser une MessageBox toujours sans linker (c'est a dire sans importer kernel32 ni user32.dll (DLL qui contient la fonction MessageBox))
Ah ouais tout de suite c un peu plus chaud hein :-)
Finalement, si vous vous penchez dessus, et avec une doc du format PE, vous verrez que non, c'est assez simple et vous avez pleins de manieres de le faire tres tres rapidement. Par contre, oubliez les Machines Virtuelles, dans mon cas heureusement que mon binome bossait sur une "vraie" machine car certaines choses passent pas, et on s'arrache les cheveux pour rien lol.
En fin de compte on a valide ces deux projets donc c'est cool, et avec un A pour le Nocode, ca gere LOL
Alors, on va commencer par la realisation d'un dissector pour Wireshark (anciennement Etherreal) pour le projet Honeypipe. Pour rappel, Honeypipe est un projet qui reunit plusieures choses en plus du dissector. En effet, il s'agit avant tout de realiser un programme de type attaque Man In The Middle (MITM) LAN (oui prour les kiddies, c'est pas la peine d'essayer ce genre de truc sur le Net hein) pour le protocole de messagerie Netsoul, qui est la messagerie instantanee officielle de l'ecole.
Donc, concernat ce premier aspect, nous avons realise notre logiciel (mon binome et moi) en C# en utilisant un wrapper pour la libpcap et inspire de la jpcap, du nom de sharppcap.
Eh bien, la premiere chose a ete d'etudier le protocole Netsoul, et vous savez quoi ? Bah c'est plutot pourri comme protocole lol. Deuxieme chose, router des paquets en .Net, bah c leeeent. Oh ouais c klr que ca se traine le cul les enfants. Mais bon, gros gros avantage c'est que comme on est des nuls en prog graphique, les winforms c'est carrement la fete :-D
Concernant le dissector en lui meme, il faut savoir qu'il s'agit ni plus noi moin s d'un parser pour un protocole defini (ici Netsoul). Alors je vais pas m'ettendre sur ca ici car Wireshark a le merite d'etre super bien documente. On trouve dans la doc developer un squelette de dissector pour demarrer. Il est aussi primordial de bien regarder les sources des autres dissectors deja integres a Wireshark tout en se gardant de regarder kles protocoles qui "font le cafe".
Je m'explique: Sauf si vous tripe vraiment a creer ce genre de chose ca va grave vous prendre la tete et c'est pas trop lisible pour commencer. Au pire, si vous voulez en faire un qui poutre commencez petit et revenez sur ce genre de chose plus tard quand vous maitriserez plus les concepts et l'API. comme dirait l'autre: "Keep it simple baby".
Bien, passons a la suite. Le plat de resistance en question c'est le projet Nocode. Ce projet s'inscrit dans le module appele Malicious code et intervient a la suite du projet Rosetta Stone (oui, souvenez vous, le virus Windows polymorphe). Concretement, il s'agit de creer un executable windows (format PE)....sans programmer ! Looool oui, je vous vois bien vous dire: "mais n'imp, qu'est qu'il dit ??"
Explication: lorsque vous creez un programme, vous utilisez un langage, un compilateur et un linker,non ? Oui, eh bien la, on zappe ca, on va ecrire directement en Hexa dans un fichier texte. Bon, vu comme ca c'est assez inhumain je vous l'accorde, mais pour realiser notre executable PE, on va avoir le droit d'utiliser le compilateur assembleur NASM en mode binaire, et ca, ca va non pas nous permettre de realiser notre programme en asm x86 (sinon on est plus dans le sujet hein :-)), mais d'utiliser le "langage" NASM ou disons les facilitees qu'il va nous fournir comme les labels et la creations de variables nommees. Bon, si vous comprenez rien, voici une ptite illustration toute simple:
| listing a. ----------------------dw 0001h dd 0300000Ch ---------------------- dd 0000000Ch ;"taille code en octets" | listing b. code_debut: dw 0001h dd 0300000Ch code_fin: dd $code_debut - $code_fin |
ALors, je pense que vous avez compris l'interet la. Listing a, vous avez 2 "instructions" et la 3eme etant la taille de votre code (somme de ce que vous venez d'ecrire). Vous devez marquer en dur la taille de votre code, et ca c'est mega chiant, car vous devez calculer la taille de ce que vous venez d'ecrire, ici un Word (4octets) et un DWord (8), et si vous ajoute du code, bah faudra recompter. Bon compris le principe ? Bien, alors avec ce genre de chose on peut faire plein de trucs sachant qu'un label n'a p as de taille et que la ligne qui le suit est directement pointee par le label. Enfin bref, je m'egare, si vous avez deja code en asm ca vous parle, sinon...pas sur.
Bien donc maintenant que vous avez une idee de la tete du projet, si je vous dit qu'il fallait realiser une MessageBox toujours sans linker (c'est a dire sans importer kernel32 ni user32.dll (DLL qui contient la fonction MessageBox))
Ah ouais tout de suite c un peu plus chaud hein :-)
Finalement, si vous vous penchez dessus, et avec une doc du format PE, vous verrez que non, c'est assez simple et vous avez pleins de manieres de le faire tres tres rapidement. Par contre, oubliez les Machines Virtuelles, dans mon cas heureusement que mon binome bossait sur une "vraie" machine car certaines choses passent pas, et on s'arrache les cheveux pour rien lol.
En fin de compte on a valide ces deux projets donc c'est cool, et avec un A pour le Nocode, ca gere LOL
Publicité