C/C++ AutoIT><C(socket) le + pratique comme "assistant" ?

A

Anonymous

Invité
#1
Bonjour,

je viens de lire pas mal de tuto et je dois m'y perdre, je n'ai pas compris un principe "de base" ...
de ce que je déduis de mes lectures (nocturnes et pas forcément fiables :p)
il est possible de créer un programme "d'assistance" en AutoIT = qui peut se lancer pendant une partie, sans forcément se préoccuper d'une identification préalable
par contre en passant par les sockets, il nous faut créer le socket pour y lire/écrire donc obligation de coder "toute la chaine" connexion au socket+jouabilité+fermeture du socket !?
sinon comment est-il possible de lire/écrire dans le socket utilisé par le client ?
J'ai dans l'idée de lancer mon programme en tâche de fond, il analyserait les informations qui transitent pendant mes parties de jeu, pour en récolter des statistiques par exemple ou plutôt me faire une base de données des monstres croisés ... ou autre.
Je n'ai pas de but précis pour le moment, je profite de ce jeu pour tester mes connaissances et me faire un peu de mise en pratique ^^'

en tout cas merci pour ces tuto bien complets,
ils m'ont rappelé mes cours d'administration ^^ même parfois en étant bien + compréhensibles ! :)

Cdt.
 
A

Anonymous

Invité
#2
Je pense avoir trouvé un élément de réponse par ici ...
viewtopic.php?f=53&t=1110
c'est d'ailleur comme ca qu'on arrive a le faire marcher, on intercepte le message 42 qui vient du serveur => MITM => envoie d'un faux message 42 au client avec ip du serveur de jeu "127.0.0.1" (ip local) et donc le client se reconnecte en local au lieu de se reconnecter sur le serveur (c'est le bot du mitm qui se connecte au serveur avec l'ip du vrai message 42, comme un bot standart)
mais là je bug :roll: "intercepte" ... comment ? MITM ?
... ok j'ai vu rapidement sur internet pour MITM, je suis partie lire d'autres docs :)
 
A

Anonymous

Invité
#3
Alors explication:
Mitm:
Server <> Programme <> Client

Le client se connecte a notre programme comme si il se connecte au server.
Le programme lit ces infos et les renvoi au server.
Idem pour le serrver, les infos recu sont renvoyé au client mais sont analysé pour connaitre ce que fait le client.

Le programme intercepte ces infos et les renvoi, il veut juste les lire.
Par exemple on intercepte le packet 226. On sait que le personnage vient d'entrer sur la map X.
Par exemple on recoit X paquet, on sait que le client a fini de récolter sa ressource. Du coup on envoi un autre paquet.

J'espere que j'ai ete clair.

Ensuite les infos recu, le programme les parse (decrypte si tu prefere), et dans chaque class de dofus il y a une function deserialize. On deserialize la class corrspondante avec les packet decrypté et cela rempli toute les valeurs des variables a l'interieur.
Et voila.
 
A

Anonymous

Invité
#4
Je vous explique ma façon de voir la chose, rectifiez moi si/où je me trompe.

Il va me falloir coder un programme/serveur à 3 clients :
- client 1 : le client D.
- client 2 : le serveur D. (connexion)
- client 3 : le serveur D. (jeu)
mon programme/serveur va :
a) écouter client 1 > analyser/lire le paquet > envoyer à client 2
b) écouter client 2 > analyser/lire/modifier le paquet > envoyer à client 1 (c'est là que je modifie @serveur:5555 par @monprogramme:12345)
c) écouter client 1 > analyser/lire(/modifier si bot) le paquet > envoyer à client 3
d) écouter client 3 > analyser/lire le paquet > transférer à client 1 (modification inutile si je ne m'amuse)
e) je boucle les étapes c et d

- a) : écouter le client 1 ... sur quel port ? car chez moi le port source utilisé par le client D. est aléatoire (mais bien à destination des ports 443 et 5555 des serveur D.)
comment récupérer ce port, choisis semble t-il aléatoirement par le client, en langage C ? et vu qu'il en génère un nouveau pour chaque personnage..
- a) et c) : écouter le client 1 ... j'ai supposé que le client D. avait un proxy de configuré et qu'il envoyait ses paquets de connexion et de jeu depuis 2 ports sources différents mais bien vers le même port (12345) de mon programme. Est-ce bien cela ?
- j'ai vu qu'il y avait des bots qui permettent de bouger plusieurs personnages simultanément ... s'ils sont codés en C, ils utilisent les threads c'est ça ?
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#5
salut,
a) peu importe
a) et c) c'est ca (enfin presque , en fait c'est configuré sur un des 2 ports)
x) surement

pour conclure => fonce (mais pas en autoit, c'est du temps de perdu)


pour b) ca se fera que pour le paquet 42 (le dernier paquet du serveur de connexion , le client 2) car il contient l'ip du serveur de jeu (client 3) , donc il faut modifier ce paquet pour pas que le client 1 essais de se reconnecter sur client 3 mais sur ton programme (qui lui va se reconnecter sur client 3) , c'est le seul paquet de client 2 a intercepter(ne pas renvoyer en l'etat)/analyser/modifier(renvoyer modifié) et pendant que tu es la il faut aussi recuperer l'ip du client 3 pour que ton programme se reconecte a ce IP , tout les autres paquets seront juste a reenvoyer en l'etat
 
A

Anonymous

Invité
#6
Of course, je pars pour du C ! de toute façon il était déjà mon favoris.
Est ce que je vais devoir passer par des threads pour le MITM ou ça marche sans ? (savoir si je vais devoir me retaper de la lecture ... ^^')
tu parles du "42°" paquet ... plutôt que de l'identifier via son contenu tu as fais un compteur je suppose !? (+ rapide un compteur qu'une analyse..)

(et merci pour l'aide déjà apportée ;) )
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#7
Salut , oui va falloir passer par les threads (enfin c'est mieux ca va eviter le lag) , mais ca a rien de mechant un thread (ca a pas de dents)
pour le 42 ieme en fait c'est pas le 42 ieme c'est son identifiant qui est 42 , il peu arriver en 8ieme , en 14 ieme ... obligé d'au moins parser les 2 premiers octets de chaque paquet (voir plus dans certains cas car il peu avoir plusieur message dans un paquet) pour connaitre l'identifiant des messages
 
A

Anonymous

Invité
#8
- l'ip du serveur de connexion est bien 213.nian.nian.180:5555 et celui de jeu est le 213.nian.nian.156:5555 ? leurs adresses ne changent pas / jamais ?
- j'ai aperçu une ip passer (via mon parefeu) : 213.nian.nian.151:5555
- de souvenir, avant mes vacances, je pensais avoir vu une connexion sur leurs serveurs de connexion via le port 443 mais je ne la voit plus ... modification suite à une mise à jour ?
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#9
Salut ca depent comment le jeu est configuré , 2 ports possibles 443 ou 5555 , pour le serveur de connection il a toujours la meme adresse , pour le serveur de jeu ca va dependre sur quel serveur tu veux jouer (jiva , heroique ...)
 
A

Anonymous

Invité
#10
Hello, dsl j'ai écris un peu sèchement, revenu de vacances je me suis remis à coder et à buter sur des questions : je suis venu me décharger ici ^^ vous avez (tu as..) passé des bonnes vacances ? :)
sinon ça roule, j'vais préférer le port 5555 pour la connexion+jeu, comme ça je me rapprocherais au + de mon client
et puis bon maintenant on va faire un peu de concret et arrêter de poser des questions sur la théorie, je suis sûr que tu préférerais lire un peu de code à débugger que des questions ^^ il est en cours (avec des threads, du c et tout ^^), je posterais certainement qq morceaux d'ici qq jours ;)
 
Haut Bas