C/C++ Faire un bot

Inscrit
26 Janvier 2011
Messages
21
Reactions
0
#1
Salut à tous,

Cela fait depuis pas mal de temps que je suis sur le forum (depuis l'ancien) mais je ne me suis jamais fait remarquer.

Après un essai pour faire un bot il y a cela longtemps (l'ancien forum) qui s'était soldé par un échec, je m'étais dit que je n'avais sûrement pas assez d'expérience en socket et autres. C'est alors que j'ai continué à m'améliorer ou apprendre des choses dans des domaines vastes.

Aujourd'hui, je pense que j'ai assez de bagages (du moins j'espère) pour entamer la création d'un bot D. que ce soit au niveau langage, binaire, sockets, pthreads et j'en passe.

Pour cela, j'ai lu les chapitres pour sniffer un bot, dé-compiler les sources etc..

Le problème dans tout ça c'est que je ne comprends toujours pas comment m'y prendre. Je m'explique:

On nous dit que le serialize sert à créer le paquet et que le deserialize est la fonction qui décortiquera tout ça.
Dans notre cas donc, aurons-nous besoin que du serialize pour envoyer le paquet ?

Par exemple, dans le paquet 4 (IdentificationMessage), nous avons ce code:
Code:
public function serializeAs_IdentificationMessage(param1:IDataOutput) : void
        {
            var _loc_2:uint = 0;
            _loc_2 = BooleanByteWrapper.setFlag(_loc_2, 0, this.autoconnect);
            _loc_2 = BooleanByteWrapper.setFlag(_loc_2, 1, this.useCertificate);
            _loc_2 = BooleanByteWrapper.setFlag(_loc_2, 2, this.useLoginToken);
            param1.writeByte(_loc_2);
            this.version.serializeAs_VersionExtended(param1);
            param1.writeUTF(this.lang);
            param1.writeUTF(this.login);
            param1.writeShort(this.credentials.length);
            var _loc_3:uint = 0;
            while (_loc_3 < this.credentials.length)
            {
                
                param1.writeByte(this.credentials[_loc_3]);
                _loc_3 = _loc_3 + 1;
            }
            param1.writeShort(this.serverId);
            return;
        }// end function
Est-ce qu'on doit coder toutes les fonctions comme ici setFlag de BooleanByteWrapper et/ou serializeAs_IdentificationMessage pour pouvoir
faire une connexion au serveur.

Doit-on récupérer des valeurs de HelloConnectMessage ou de ProtocolRequired envoyés avant ça ?

Dernière question, que signifie ce IDataOutput.

Merci d'avance,
Dardanboy.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#2
Salut , oui ont doit coder toutes les fonctions comme ici setFlag de BooleanByteWrapper et/ou serializeAs_IdentificationMessage pour pouvoir faire une connexion au serveur.
ProtocolRequired c'est facultatif il sert pas a part a verifier que le bot est peu etre perimé si le protocole a beaucoup changé , le hello par contre il contient les clefs rsa pour coder le mot de passe donc lui il est obligatoire.
IDataOutput c'est le tableau de bytes qui seront envoyé au socket
 
Inscrit
17 Février 2011
Messages
194
Reactions
0
#3
En gros tu dois développer une application qui va émuler le client de Dofus. Pour cela il faut reproduire le protocole d'échange en le client et le serveur. Le plus simple celons moi pour commencer est de sniffer l'échange de packet entre ton client et le serveur, ne serait-ce que pour la connexion pour commencer. Tu pourras ainsi grâce soit à un des utilitaires disponibles, ou au tient si tu arrives à en développer un, identifier l'ordre dans lequel les packets sont échangés. La POO est d'une aide inestimable, tu peux donner à chacune de tes classes un rôle précis. Tu peux aussi t'aider des Interface ou des classes abstraites pour organiser ton code. Par exemple, tout les packets clients pourront hériter d'une classe abstraite PacketClient qui te donnera un standard à respecter.

Un très bon tutoriel est celui de Maxilia:
https://cadernis.fr/index.php?threads/[tuto]-bot-socket-les-fondamentaux.491/

Il faut bien sûr adapter les sources exemples qui sont données dans le langage que tu souhaites (Visiblement C/C++, très bon choix!) et roule !
 
Inscrit
26 Janvier 2011
Messages
21
Reactions
0
#4
Merci énormément pour vos réponses.

Alors j'ai réussi à recevoir le paquet n°3. J'y ai retiré le salt (je ne sais pas s'il sert à quelque chose) et la clé.
Le problème c'est le cryptage du mdp.

Je suppose donc que cette clé est publique.
Le problème c'est que suivant la loi du RSA, il nous faut la clé publique e et n or ici je ne reçois qu'un tas de 294 valeurs (48 130 1 34 48 13 6 9 42 134 ..)
Que dois-je faire pour que j'obtienne respectivement e et n ?

Pour le reste, je vais essayer de faire moi-même une fonction qui calcul tout ça même si ça reste un peu chaud.
 
A

Anonymous

Invité
#6
Nan le RSA en C et C++ c'est difficile utilise cryptoRsa plus difficile mais sur que sa marche :)
 
A

Anonymous

Invité
#7
Pourquoi ce serai plus dificile qu'en VB.NET ?
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#8
parceque en .net (enfin dans le Framework) y'a la crypto qui est "native" mais en C/C++ il y'a des "class" qui le font tres bien aussi
 
A

Anonymous

Invité
#9
Donc c'est a peu pres equivalent pour finir ?
 
Inscrit
26 Janvier 2011
Messages
21
Reactions
0
#11
J'utilise le C personnellement donc pas de classes, rien. Et je comprends pas ce qu'est ce cryptoRSA que propose Overedge.
Et il n'y a pas de "class" en C++ qui fait tout le travail.

Donc oui, c'est plus difficile qu'en VB.Net car j'utilise un langage bas-niveau.
 
A

Anonymous

Invité
#13
La simplicité avant tout chère ami
 
Inscrit
26 Janvier 2011
Messages
21
Reactions
0
#14
J'ai essayé de traduire la source VB en C mais ces langages sont très différents.
Le soucis qui se pose et pour lequel je cherche toujours la réponse c'est comment on utilise toutes ces ressources que sont key, salt, le mot de passe.
Expliqué avec un pseudo-code serait parfait.

Merci d'avance,
dardanboy.
 
A

Anonymous

Invité
#15
Bah en fait avec ces 3 infos tu crypte en RSA. key la clé public, salt clé privé (y me semble si c'est pas l'inverse) et le mot de passe. Après t'envoi ceci crypté au serveur
 

4R7Y

Contributeur
Inscrit
6 Mars 2011
Messages
213
Reactions
0
#16
A partir du VB.net tu devrais pouvoir écrire toi même le pseudo code !
Sinon pour mieux comprendre le RSA, fais des recherches par toi même, c'est toujours plus fructueux :)
 
Inscrit
26 Janvier 2011
Messages
21
Reactions
0
#18
Tout le problème ici est de transformer la clé public en quelque chose qui respecte la norme RSA.
A la base, c'est des nombres premiers qu'on a pour créer cette clé, ici le résultat c'est du texte, tout le problème est là:
Comment transformer cette clé en 2 nombres premiers e, n
 
Haut Bas