Autoit Création d'un bot socket

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#41
Et ReadString() inverse-t-il les caractères?

Genre si j'ai un Array

0 | 4D
1 | 25
2 | F7
3 | 34

Est-ce que je dois inverser ce tableau ou pas?

EDIT : J'ai mon Array de caractères. C'est normal que le salt ne change jamais? Quand je réfléchis, je reçois toujours le même packet...
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#42
readbyte renvoie un chiffre entre 0 et 255 , readbyteS renvoie un tableau de chiffreS entre 0 et 255 (dans les 2 cas ca reste entre 0 et 255 donc des bytes)

pour ReadString() non tu ne dois pas inverser le tableau 4D sera le 1er caractere et 34 le dernier

c'est possible que le salt ne change jamais , j'en sais rien , ca j'ai jamais fait depuis les salts mais par contre que tu recois toujours le meme paquet ca me semble bizarre , y'a au moins la key qui doit changer
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#43
J'arrive à obtenir un salt !
Mais pas en UTF8 >.<. Lorsque j'essaie de le faire en UTF8, il me renvoie un salt vide.
En revanche, UTF16 Big Endian et UTF16 Little Endian fonctionnent.

Suis-je obligé d'avoir de l'UTF8..? =/
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#44
Je continue donc ma déserialization.
En gros on a

Code:
00 0E 01 4A 00 02 06 83 17 87 33 27 83 23 42 34 25 02 E2 55 27 14 73
00 0E > Hi-Header
01 4A > Length (ici donc, 330)

ReadUTF() choppe donc les 330 octets suivants. A la fin, on n'a plus aucun octet disponible.

Pourtant dans la source officielle on a
Code:
_loc_4 = param1.readByte();
Mais ça ne peut fonctionner..?
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#45
ah ok ... en fait ca marche pas tout a fait comme ca
00 0E 01 4A 00 02 06 83 17 87 33 27 83 23 42 34 25 02 E2 55 27 14 73 (heu ... t'es sur de ca ?? il me parait court ton paquet pour 330 octets ...enfin bref on va faire ca pour l'exemple)
tu as lu 4A (donc tu es sur 00) :
this.salt = param1.readUTF();
donc tu commences le readUTF a partir de 00 (apres 4A) , la taille de l'udf est sur 2 octets donc 00 02 , ce qui donne salt = 06 83 , il te reste encore 330-4 octets a lire

bon je confirme la paquet est pas bon salt fait pas 2 octets
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#46
Bien sûr, j'ai raccourci le paquet pour l'exemple :).

Ah... Donc, mon ReadBytes(ReadUInt16()) commençait pas au bon endroit alors... Il commençait au 01 4A. A mon avis, j'ai certainement fait un StringMid (fonction AutoIt) au lieu d'un ReadUInt16(), ce qui expliquerait que le décalage n'ait pas été effectué.

Je regarderai ça tout à l'heure, encore merci ToOnS! :)

EDIT : Euh salt fait pas 2 octets? T'es sûr de ça? Il me semble que je t'ai mis le bon paquet... Je t'enverrais le vrai paquet tout à l'heure.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#47
moi j'ai ca :
recu : id->3 len->330
00206831787530...

donc pas 2 octets mais 0020 (32 octets)
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#48
Voici la paquet complet :

00 0E 01 4A 00 20 68 31 78 75 35 32 75615645262D5A5A6323633D77234947262240617A2642693C73012630820122300D06092A864886F70D01010105000382010F003082010A02820101008B30D9D02A4545447D7FE6A0DC2DF687FE3758017BC14C021D5584E9971B8F4A7199A2E894C6D86330E92110495DEDD374ABA695229C28430C82FB5AE14E71D47262B0CE31990A821BFBB41D7F14D563F77E392CC8DECBBF266EDE4DA43FE2E04160F23071CB99F82D91165CAAE49CA39E09E0A09FBBE36780DF1399F3FDF886855CBFC82BAAE08D03E38FDF8AB7634C8F18502D38F41BB607FC4BDCCC47CF959F31DAD122CBB1DE443CA9C4215766F64D26D6AF565A546A2CC539AE6372FB3E53D513EDBE349C85E9ECC9A30F5F70A3FA52F9F80D1EE9CEBFF04269B29561648DE05E1418F4FBB017702CBFE19F7734C803B42ABCBB859183A3DE7389AF09DF0203010001
On voit bien :

Code:
00 0E 01 4A 00 20 68 31 78 75 35 32
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#49
ah oui c'est mieux comme ca , la tu as bien salt de 0020 (32 bytes)
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#50
^^ Donc j'ai mon salt, je pense :).

Tu crois que ce salt est correct?

h1xukdvzC=]_4;tML$j`#QhZU5kYrW<I

C'est normalement bien encodé là.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#51
je pense que oui c'est bon
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#52
Super ! Tu me fais bien avancer, je suis content !
Très gros merci à toi ! :)

Et un Array de Int de 294 cases pour la key, ça te semble correct?
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#53
oui c'est ca
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#54
Wahou c'est super ! :).
Je pense que je partagerai mes fonctions ReadByte(), ReadUInt16(), etc :).

Maintenant, c'est au tour de initIdentificationMessage()

Code:
            this.version = param1;
            this.lang = param2;
            this.login = param3;
            this.credentials = param4;
            this.serverId = param5;
            this.autoconnect = param6;
            this.useCertificate = param7;
            this.useLoginToken = param8;
            this._isInitialized = true;
1/ Quel fichier sert à la version?
2/ Comment on fait la langue?
3/ Qu'est-ce que les creditentials?
4/ userCertificate et useLoginToken, je mets True par défaut ou bien?
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#55
1/ com.ankamagames.dofus.network.types.version en hexa : 02 06 04 E5 8D 01 00 (pour la version 2.6.4.58765.1.0)
2/ c'est un utf "fr" donc en hexa : 00 02 66 72
3/ je sais pas
4/ tout a false sauf autoconnect a true (donc loc_2 = 01 en hexa)
ca doit donner un truc de ce genre : (mon pseudo a 11 caracteres que j'ai caché par XX donc une longueur de 00 0B)
00 12 01 1D 01 02 06 04 E5 8D 01 00 00 02 66 72
00 0B XX XX XX XX XX XX XX XX XX XX XX 01 00 1F
05 39 13 FA F2 A3 A9 68 99 72 F1 74 EF EA 3D 19
CB 30 0F BD CA BC 29 1B 44 BB FE 86 B4 12 8D D2
64 B6 90 58 8B 93 9B 87 18 31 36 73 4F 35 62 56
40 39 4F 22 0C AE DA 4D DC 6D F2 DA B1 F7 8C 01
B4 14 7A DE E0 17 88 17 3D B4 8B 86 C0 4F B5 86
13 F5 BC 26 37 FC 40 4A EA 36 45 42 00 FA E7 48
1D 22 A8 04 07 71 11 0B FA 36 1B 82 30 A1 D2 42
D1 0E 0F 30 69 F6 A7 AF 73 65 0F 72 BF 81 9F B9
57 2A E6 AB 0F 68 DC CE F3 87 AF 12 80 A7 3C C7
69 6A CF 16 C6 CC 5B C3 89 37 62 97 59 1A E2 F6
E7 B1 EE C1 4D E0 78 2D 96 F7 8F 89 D0 D7 8B B1
95 60 8E 7E 63 03 FF A4 A5 78 F8 FB F6 36 FF 6D
DB 12 4B DE 94 44 50 63 A0 09 80 A6 BB A0 33 2D
E7 AC A7 32 4C DF 6C 05 1F 95 6D 04 EF 19 E9 90
8E 58 94 91 0D B5 A8 1D 68 B5 59 4B 1B 07 EE 25
02 00 08 30 5B AC C5 DC E9 21 7C 7F F3 1F 91 00

(biensur le 1D rouge ca va dependre de la taille du paquet a envoyer donc de la taille du pseudo)
 
Inscrit
31 Mars 2012
Messages
102
Reactions
0
#56
creditentials : Mots de pass crypter en RSA :p
et connecte toi sur skype demain a 17h30 pliz, que je t'explique ce que j'ai pas fini ^^'
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#57
Merci les mecs :).
Pour l'instant je vais essayer de coder les fonctions WriteByte() etc. Après les fonctions Read viennent les fonctions Write ^^'.
D'ailleurs, la valeur qu'on passe à ces fonctions est de valeur décimale, non?

EDIT : Sauf WriteString() apparemment, je me trompe? Que prend-il?
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#58
oui ils prennent des valeurs decimales
writestring il prend en valeur une chaine de caracteres :D , il compte les caracteres , met le nombre sur 2 bytes puis transforme chaque caractere en byte
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#59
Bon, et bien, je pense être arrivé dans la partie la plus délicate ! :D.
J'ai (je pense) terminé mes fonctions Write. A ce que j'ai pu tester, elles fonctionnent !
Moins difficile que les Read, là j'ai quasiment pas à me soucier de ce qui arrive, et toutes se ressemblent beaucoup :).

Mais, maintenant, il me faut l'encryptage du pass... Sur les sources officielles y'a quelque chose que je comprends rien, et sur la source que j'ai, j'arrive pas à traduire... Vous auriez une piste? =/
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#60
J'ai, comme fonction de cryptage du pass, ça :

Code:
Public Class CryptPass
    ' Methods
    Public Function Crypt_Pass(ByVal Input As String, ByVal Key As List(Of Integer)) As List(Of Integer)
        Dim buffer4 As Byte() = New Byte(3 - 1) {}
        buffer4(0) = 1
        buffer4(2) = 1
        Dim buffer As Byte() = buffer4
        Dim buffer2 As Byte() = New Byte(&H100 - 1) {}
        Dim i As Integer
        For i = &H21 To &H121 - 1
            buffer2((i - &H21)) = CByte(Key.Item(i))
        Next i
        Dim bytes As Byte() = Encoding.UTF8.GetBytes(Input)
        Dim parameters As New RSAParameters
        Dim provider As New RSACryptoServiceProvider
        parameters.Modulus = buffer2
        parameters.Exponent = buffer
        provider.ImportParameters(parameters)
        Dim list As New List(Of Integer)
        Dim num2 As Byte
        For Each num2 In provider.Encrypt(bytes, False)
            list.Add(num2)
        Next
        Return list
    End Function

End Class
1/- C'est quoi ces &H21, &H121, etc? J'ai l'impression que ce sont des pointeurs... -_-
2/- Mais c'est quoi ces RSAParameters et RSACryptoServiceProvider? Des classes intégrées à VB.Net? Dans ce cas, je fais comment? =/

J'ai cru trouver sur le net une UDF pour le cryptage RSA. Mais j'ai des questions.

3/- Tous les fichiers que je vais trouver sur le cryptage RSA sont-ils les mêmes? Je veux dire, donnent-ils tous le même résultat?
4/- Sur ce que j'ai trouvé, le RSA travaille sur du fichier de clé Publique et Privée. Mais il me semble que D. intègre une clé publique, et la clé privée, on la génère?

EDIT : En source officielle, dans le RSAKey, j'ai la méthode _encrypt :

Code:
        private function _encrypt(param1:Function, param2:ByteArray, param3:ByteArray, param4:uint, param5:Function, param6:int) : void
        {
            var _loc_9:BigInteger = null;
            var _loc_10:BigInteger = null;
            if (param5 == null)
            {
                param5 = this.pkcs1pad;
            }
            if (param2.position >= param2.length)
            {
                param2.position = 0;
            }
            var _loc_7:* = this.getBlockSize();
            var _loc_8:* = param2.position + param4;
            while (param2.position < _loc_8)
            {
                
                _loc_9 = new BigInteger(this.param5(param2, _loc_8, _loc_7, param6), _loc_7, true);
                _loc_10 = this.param1(_loc_9);
                _loc_10.toArray(param3);
            }
            return;
        }// end function

Qui appelle d'autres fonctions etc, et qui finalement n'a pas l'air de ressembler à celle de mes sources OverEdge. Y aurait-il une DLL utilisable?
 
Haut Bas