Autoit Création d'un bot socket

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#21
Euh non mais, ces fonctions existent pas sur AutoIt, c'est pour ça que je te pose toutes ces questions, je suis en train de les créer moi-même :D.

Mais alors... Un ReadByte() sur 05 retourne donc 5?
Et aussi :

Code:
While $_loc_3 < $_loc_2
	$_loc_4 = ReadByte()
	_ArrayAdd($key, $_loc_4)
	$_loc_3 += 1
WEnd
Alors $_loc_4 a en retour un décimal aussi..? En fait à la fin de chaque fonction, je dois convertir ce qui est rendu en nombre décimal?

Rah, en fait j'vais devoir tout recommencer du début...
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#22
oui ca retourne 5 mais 5 c'est 0x05 (hexa) , c'est en fait la meme chose peu importe la base de toute facon c'est pareil pour l'ordi , c'est juste si tu l'affiches que nous on le lit differement
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#23
J'y pense, un ReadBytes(2) sur 05 4A renvoie donc
Code:
Dec("05") + Dec("4A")
ou bien
Code:
Dec("054A")
? Dans le premier cas, ça voudrait dire qu'on ferait ReadByte() + ReadByte().
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#24
2 ieme solution ou 1ere mais comme ca : Dec("05")*256 + Dec("4A") , ce qui revient a la 2ieme
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#25
*256..? Ok j'essaierai même pas de comprendre :D.
Merci ToOnS, si je rencontre encore des soucis je saurai que je peux faire appel à toi, c'est super !
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#26
256 car un byte c'est 256 valeurs , on commence du dernier qu'on laisse comme il est puis pour les suivants a chaque fois on multiplit par 256 fois plus :
readbytes(3) sur 01 02 03 = 0x03 + 0x02 * 256 + 0x01 * 256 * 256 = 66051
tu peux verifier avec la calculette de windows en mode programmeur : tu te mets en hexa tu tapes 010203 (ca va ignorer le 1er 0 car il sert a rien) , puis tu passes en decimal = 66051
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#27
ReadUTF() encode le résultat décimal en UTF-8 ou pas?

Parce que sur OverEdge, on a :

Code:
Public Overrides Function ReadString() As String
            Dim ByteArray() As Byte = MyBase.ReadBytes(ReadUInt16())
            Return System.Text.Encoding.UTF8.GetString(ByteArray)
        End Function
GetString fait quoi? Il convertit juste l'array en string?
Du genre si on avait :

------------------------
ByteArray | Valeur
------------------------
0 | 35
1 | 58
2 | 74
------------------------

Est-ce que le résultat serait "355875" ou bien est-ce qu'il fait une quelconque conversion?
Ensuite, la fonction UTF8, qu'est-ce qu'elle fait?

Sur AutoIt, j'ai une fonction BinaryToString qui, contrairement à ce qu'elle annonce, convertit de l'hexadécimal à décimal, et si je lui ajoute le flag 4, en encodage UTF-8.
Donc est-ce que je peux traduire ton
Code:
Return System.Text.Encoding.UTF8.GetString(ByteArray)
Par un
Code:
Return BinaryToString(StringHex, 4)
Avec mon exemple, si StringHex = "64 34 72 6B 76 34 6E", alors BinaryToString(StringHex, 4) = "d4rkv4n". C'est ce qu'on veut, non? Parce qu'en fait j'ai converti en chaîne de caractères, mais il ne faut pas le décimal correspondant à chaque caractère?

Et donc convertir chaque hexa en caractère, puis en décimal?

J'obtiendrai donc :
Code:
$string = "d4rkv4n"

$bin = StringToBinary($string, 4) ;renvoie 0x6434726B76346E
$recon = BinaryToString($string, 4) ;renvoie d4rkv4n
$asciiArray = StringToASCIIArray($recon) ;renvoie un tableau
$arrayToString = _ArrayToString($asciiArray) ;renvoie 100|52|114|107|118|52|110
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#28
Un problème qui se suit...

Si on a

Code:
05 4A 25 68 95
Si on applique 5 ReadByte(), qu'on met dans un Array, qu'on inverse l'Array, on aurait :

------------------
|.Array.|.Colonne.|
------------------
|....0...|....149....|
|....1...|....104....|
|....2...|.....37....|
|....3...|.....74....|
|....4...|......5.....|
------------------

Si on suit l'acheminement de tout à l'heure, je devrai effectuer l'opération 149 + 104 * 256 + 37 * 256^2 + 74 * 256^3 + 5 * 256^4

Seulement là, je dois faire un ReadBytes(330)... Ce qui veut dire x+ 256^330. Tu vois où je veux en venir? Rien qu'un 256^5 retourne déjà 25 600 000. Pour un 256^330, ça retournerait un résultat beaucoup trop immense !! C'est simple, AutoIt me refuse le résultat en me disant :

Ai-je fais quelque chose de travers?
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#29
Salut , pour readUDF oui Return System.Text.Encoding.UTF8.GetString(ByteArray) ca transforme le tableau ByteArray qui on va dire serait :
0|64
1|34
2|72
3|6B
4|76
5|34
6|6E
en chaine de caracteres donc la focntion retournerais dans ce cas "d4rkv4n"

heu pour le 330 c'est une chaine que tu dois lire ou juste 330 bytes car ca me semble bizarre une chaine de 330 caracteres , en fait il vient d'ou ce 330?
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#30
Merci pour ta réponse :).

Ce 330? Le retour de ReadUInt16(). C'est la longueur du message avec id 3, donc 330 octets.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#31
c'est la clef ? je ne sais pas ce que c'est car en fait je ne code plus le pass depuis un bon moment et y'a eu des changement depuis , si c'est la clef alors il faut lire les 330 octets byte a byte et les mettre dans un tableau d'entier d'apres ce que j'ai vu , ce n'est plus une chaine de caracteres
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#32
Ce n'est pas la clé, mais le salt... =/. On fait comment alors?
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#33
la salt est apperement bien une chaine de caracteres (a confirmer par quelqu'un qui sait vraiment) donc il faut faire comme on a dit depuis le depart, transformer les 330 octets en une chaine de 330 caracteres
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#34
Donc ReadBytes(5) n'est pas équivalent à ReadByte()*256^5 + ReadByte()*256^4 + ReadByte()*256^3 + ReadByte()*256^2 + ReadByte() alors? Puisque ReadByte() renvoie un décimal, et ReadBytes() apparemment un Array de bytes.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#35
non c'est pas l'equivalent ca renvoit un tableau, en fait le coup des 256^x c'etait surtout pour faire les readuint16 et tout ca et l'heure tardive n'aidant pas j'ai tout melangé
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#36
Et attends voir. ReadBytes(), tu es sûr que c'est un array de bytes? Parce que le retour des ReadByte() et cie sont toujours des int... Ca renvoie donc un Array de Bytes, Int, ou Char?
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#38
Euh... que je sois au clair :D.
Un byte, c'est pas de l'hexadécimal? Ou alors, un byte est de l'hexadécimal, mais est aussi du décimal?

Genre un byte peut être "4A" et "74" ? Ou bien que "4A" ou que "74" ?

EDIT : D'après ton lien, ça renvoie du Int... Donc un Byte est un Dec("hex")? (D'ailleurs, je n'arrête pas de naviguer sur ce site depuis hier x) )
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#39
non d'apres mon lien ca renvoit ca : Lit le nombre d'octets spécifié à partir du flux actuel dans un tableau d'octets et avance la position actuelle de ce nombre d'octets.

un byte peu aller que de 0x00 a 0xFF (en hexa) ou de 0 a 255 en decimal , quand on parle de byte on parle en hexa car c'est plus "simple" mais hexa ou decimal c'est la meme chose , juste que ca s'ecrit pas pareil
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#40
ReadByte() renvoie :

Valeur de retour
Type : System.Int32

Et ReadBytes() renvoie donc un code hexadécimal à 2 chiffres? C'est donc la définition d'un byte... Un byte = code hexa deux chiffres, donc 0 à 255 en décimal. Okay ! :)
 
Haut Bas