Bases pour faire un MITM en Python (+MacOS)

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#41
Pfff c'est vraiment horrible : depuis que j'ai décidé de faire ce bot, je n'ai pas écrit une seule ligne de code intéressant, je cherche toujours comment faire le MITM !!! La prog sous Mac, c'est pas top...

EDIT : J'AI TROUVE !!!
A l'aide de ces deux liens (et de man ifconfig), on comprend comment faire !
http://apple.stackexchange.com/questions/80978/mac-os-x-ipfw-forward-from-ipport-to-ipport
http://superuser.com/questions/567185/linux-iptables-forward-from-ip1port1-to-ip2port2

Je teste demain (aujourd'hui XD) ou après demain ou non en fait Mercredi pour voir si ça fonctionne avec une adresse qui n'est pas en local !
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#42
Sa doit surement marcher, bravo et bonne chance
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#43
Merci de tes félicitations (pas du tout méritées :oops: ) et de tes encouragements !
Bon, voilà, j'ai écrit mon code pour tout rediriger, j'ai écrit les en-têtes de quelques autres fonctions... :roll:

En gros, j'ai une fonction qui exécute la commande (au fait, si vous cherchez comment utiliser des commandes avec sudo, vous utilisez bien les fonctions du système classiques, et vous lui faites taper "echo "+password+"| sudo -S ...", voilà j'ai un peu cherché :D) (D'ailleurs, pas pour le bot, mais pour d'autres projets, comment on fait pour récupérer la réponse du terminal ? Pas le code de retour, mais par exemple la liste des fichiers si on tape "ls").
Puis j'ai une deuxième fonction (à écrire demain ou Mercredi, c'est là que je saurai si ça fonctionne ou pas) centrale, celle qui "Ouvre les connections entrantes et sortantes, et renvoie les deux sockets associés dans un tuple".

Voilà, c'est tout pour les fonctions de création du MITM.

2ème étape : On réceptionne les paquets, on les comprend, on les transfère, et on en envoie d'autres aussi (sinon ça sert à rien :lol: )

Ben c'est là que j'ai besoin de votre expérience pour savoir comment j'organise ce bazar, et que feront mes Threads (je suppose au moins 2, un pour recevoir et renvoyer dans un sens et un pour l'autre mais pas plus pour le réseau sinon je ne peux pas gérer un socket avec 2 threads).

Je me demande même si c'est utile de les utiliser, vu qu'en Python, il existe l'instruction "select" qui permet de créer une pile pour stocker des paquets avant de les "recevoir" dans le programme. De plus, il me semble faisable d'incorporer l'AI dans la même boucle, parce qu'à moins qu'elle prenne une demie-seconde (ce qui est impossible pour un A* sur une petite map par exemple), la durée du ping couvrira la latence occasionnée par le MITM.

D'un autre côté, une AI séparée serait plus efficace, mais comme je fais du beau code (je me flatte, sissi ^^), j'aime pas les variables globales, donc je me tâte, mais un MITM dans l'AI serait galère.

Enfin, propositions :idea: (ne soyez pas indulgents, on apprend de ses erreurs) :
(j'ai utilisé une présentation style python, ne m'en veuillez pas :mrgreen: )

MITM1():
select(socket1)
select(socket2)
reçoit(socket1)
reçoit(socket2)
gère les listes définies plus loin

MITM2(): deux sockets qui ont deux piles (sous la forme de listes) et chacun alimente la pile de tâche de l'autre. En plus des deux sockets, une boucle gère les listes d'échange entre MITM et AI.

Programme 1
GROSSE BOUCLE:
MITM()
AI()

Programme 2
THREAD 1 = MITM() en boucle
THREAD 2 = AI() en boucle

Schéma UNIQUE (l'autre possibilité est compliquée avec l'AI qui contient le MITM) :
Serveur <----------> <MITM> <----------> Client
__________________________/\ Liste globale de paquets à envoyer, remplie par l'AI, vidée progressivement par le MITM
___________________________|
___________________________|
___________________________|
___________________________V Liste globale de paquets intéressants (choisis) remplie par le MITM, vidée (ou non) par l'AI
___________________________AI

EDIT : les '_' ne veulent rien dire, je les ai mis parce que je me suis aperçu que les espaces ne passent pas

Il me semble que le schéma est bon, la question la plus grave est de savoir si la fréquence d'envoi/réception des paquets permet la solution (de facilité, j'ai peur des Threads que je n'ai jamais utilisé :o ) MITM1 et/ou (j'attends votre opinion) Programme 1.

En tous cas, j'apprends beaucoup de ce projet !!! Je voudrais aussi savoir si vous avez besoin de dons pour entretenir le site, parce que j'aimerais aider à mon tour ;)
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#44
UP s'il-vous-plaît ? :cry:
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#46
Ben c'est là que j'ai besoin de votre expérience pour savoir comment j'organise ce bazar, et que feront mes Threads (je suppose au moins 2, un pour recevoir et renvoyer dans un sens et un pour l'autre mais pas plus pour le réseau sinon je ne peux pas gérer un socket avec 2 threads).

Je me demande même si c'est utile de les utiliser, vu qu'en Python, il existe l'instruction "select" qui permet de créer une pile pour stocker des paquets avant de les "recevoir" dans le programme. De plus, il me semble faisable d'incorporer l'AI dans la même boucle, parce qu'à moins qu'elle prenne une demie-seconde (ce qui est impossible pour un A* sur une petite map par exemple), la durée du ping couvrira la latence occasionnée par le MITM.

D'un autre côté, une AI séparée serait plus efficace, mais comme je fais du beau code (je me flatte, sissi ^^), j'aime pas les variables globales, donc je me tâte, mais un MITM dans l'AI serait galère.
Et aussi choisir entre mes différentes idées de MITM et de programme.
 
Inscrit
15 Avril 2011
Messages
457
Reactions
1
#47
Je trouve que tu te poses beaucoup de questions, as-tu commencé à coder un peu ? Je pense que commencer par connecter ton perso au jeu serait pas mal, le pathfinding et l'IA viendront après. Pour ce qui est des threads, je fais actuellement un bot "full socket" et pour le moment, je ne les ai pas utilisé, et je ne vois pas en quoi elles pourraient m'être utiles. Par contre, pour un MITM, je crois qu'il faut une thread pour chaque socket, comme ça le client communique avec le MITM en même temps que le MITM communique avec le serveur.
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#48
Un programme se commence sur le papier selon moi, mais j'ai déjà codé la partie redirection et à peu près celle envoi-réception de paquets, seulement je ne sais pas quoi faire des paquets que je reçois ! Sinon, c'est vrai que je pose beaucoup trop de questions !!!

Mais connecter mon perso, je le fais depuis le client normal, non ? C'est le principe du MITM, non ?
 
A

Anonymous

Invité
#49
Bien sûr mais tu as dû modifier le message 42 SelectedServerDataMessage ? Ça te permettra de savoir si ton envoi/réception de packets fonctionne bien.
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#50
Oui, j'avais déjà posé cette question :
Nouvelle petite question : comment on sait au lancement à quel serveur le client va se connecter ? Il y a 2 IPs dans la liste.

Edit : Mon sniff avec Wireshark a fonctionné, il y a eu 2 ips, la première était celle en ...39 (dans le xml il y a 39 et 40), puis quand je me suis connecté à mon serveur de jeu, c'est passé à la .85. Est-ce que l'IP du serveur est fixe ?
Parce que comme ça j'aurais juste à ajouter une option de choix de serveur !
Mais finalement, je ne redirige le traffic qu'après la connection avec le serveur de jeu. La connexion avec les serveurs d'authentification .39 et .40 n'est pas redirigée.

Sinon, j'ai pas compris tout de suite ce que tu disais, alors j'ai cherché sur Google.
J'ai trouvé ça qui explique comment fonctionne le proxy : http://boraxemu.wordpress.com/2012/07/12/le-proxy/.
J'ai aussi trouvé une vieille liste des paquets avec leurs IDs si ça peut aider : http://pastebin.com/tv8GuEkS
Et enfin, des sources du bot de ToOnS sur un site chinois : http://www.dssz.com/1796555.html

Je pense que j'ai de quoi coder pour afficher les paquets et les identifier, mais j'ai une question : Si au lieu de rediriger avec ipfw et ipconfig la connexion avec les serveurs de jeu, je ne redirigeais que la connexion avec les serveurs d'authentification, et que je modifiais le paquet 42 pour faire croire au client que l'ip du serveur de jeu est 127.0.0.1, ça marcherait ? Ou est-ce qu'il y a une sécurité comme un hash crypté en RSA ?
 
A

Anonymous

Invité
#51
Si tu intercepte le message 42 en provenance du serveur, que tu modifie juste l'adresse et le port, et que l'envoie au client ça marche très bien car c'est ce que je fais :p

Je pense que c'est ce que la plupart des personnes sous Windows font aussi car la DLL No.Ankama.dll ne redirige que la connexion vers les serveurs d'identification.
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#52
Ah, super !!! Trop cool !!!
Merci beaucoup !
 
Haut Bas