Plop les amis ! on continue les aventure AutoIt pour les exprets !
Vous devez savoir lire aisément l'AutoIt pour continuer car vous devrez comprendre seul le fonctionnement des fonctions complexe !
Ce tuto va vous permettre d'utiliser la même technologie que WireShark par exemple.
WireShark utilise un module "WinPcap" qui sert à recevoir les trames de données via une interface choisis. Nous verons donc ici, comment recevoir ces trames (Sockets) et les utiliser. Pour l'envoi de sockets, on verra ça plus tard car c'est plus complexe.
Trouvez vers ce lien, l'installeur WinPcap : Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
Sur celui ci, un fichier ".au3" : Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
C'est un Zip contenant les fonctions édité par Nicolas Ricquemaque.
Sans ça, ne continuez pas le tutoriel, ça ne pourra pas fonctionner.
Toutes le fonctions qui suivent sont entièrement ma création, veuillez s'il vous plait respecter ce travail.
1. Installez WinPcap.
2. Extraire le fichier ".au3" qui se trouve dans le Zip.
3. Pour plus de confort, nous avons besoin des droits administrateur. placez cette ligne au sommet du projet.
4. Incluez ce fichier dans votre projet de la manière suivante.
5. On déclare nos variables.
6. Créons une fonction pour initialiser sans difficulté notre réception. Plusieurs interface sont disponible mais nous utiliserons uniquement celle utile aux Bots.
Cette fonction démarre WinPcap et choisis automatiquement l'interface nécessaire.
7. Je vous donne une belle fonction qui sert à attendre une ou plusieurs informations bien précise ce situant au début de la trame après les informations IP et Protocole. Copiez puis collez la dans votre projet, je vous explique son fonctionnement.
Cette fonction vérifie dans un premier temps que la trame n'est pas une "envoyé" par notre machine.
Ensuite, elle découpe la trame après les information IP et protocole afin de redécouper encore une fois pour vérifier la présence de la valeur recherché.
La fonction répète ce processus autant de fois qu'il y a de valeur à chercher. (4 maxi)
En cas de succès, la fonction retourne la trame découpé après les information IP et Protocole.
En cas d'échec, elle retourne 0
Comment utiliser cette fonction ?
La syntaxe :
Plus d'infos :
Voici un exemple utilisable sur le jeux Dofus (2.x) qui attend le changement de carte.
8. Une fonction assez similaire à la précédente. Cet fonction recherche n'importe où dans une trame un valeur définie.
Comment utiliser cette fonction ?
La syntaxe :
Plus d'infos :
Voila ! Avec toutes ces belles lignes de code, vous devrez être prêt à faire des merveilles ... Avec vos modifications personnel bien sûre.
N'hésitez pas à poser des questions pour obtenir plus d'informations.
Bye Bye, et à la prochaine pour de nouvelle aventures !
Vous devez savoir lire aisément l'AutoIt pour continuer car vous devrez comprendre seul le fonctionnement des fonctions complexe !
Ce tuto va vous permettre d'utiliser la même technologie que WireShark par exemple.
WireShark utilise un module "WinPcap" qui sert à recevoir les trames de données via une interface choisis. Nous verons donc ici, comment recevoir ces trames (Sockets) et les utiliser. Pour l'envoi de sockets, on verra ça plus tard car c'est plus complexe.
Trouvez vers ce lien, l'installeur WinPcap : Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
Sur celui ci, un fichier ".au3" : Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
C'est un Zip contenant les fonctions édité par Nicolas Ricquemaque.
Sans ça, ne continuez pas le tutoriel, ça ne pourra pas fonctionner.
Toutes le fonctions qui suivent sont entièrement ma création, veuillez s'il vous plait respecter ce travail.
1. Installez WinPcap.
2. Extraire le fichier ".au3" qui se trouve dans le Zip.
3. Pour plus de confort, nous avons besoin des droits administrateur. placez cette ligne au sommet du projet.
PHP:
#RequireAdmin
4. Incluez ce fichier dans votre projet de la manière suivante.
PHP:
#include "Winpcap.au3"
5. On déclare nos variables.
PHP:
Global $winpcap,$pcap_devices,$pcap,$packet,$src,$int
6. Créons une fonction pour initialiser sans difficulté notre réception. Plusieurs interface sont disponible mais nous utiliserons uniquement celle utile aux Bots.
PHP:
Func Socket_Initialise()
$winpcap=_PcapSetup()
If $winpcap=-1 Then MsgBox(0,"WinpCap_Err01","Impossible d'initialiser la liaison. Verifier votre installation de WinpCap")
$pcap_devices=_PcapGetDeviceList()
If $pcap_devices=-1 Then MsgBox(0,"WinpCap_Err02","Impossible d'initialiser la liaison. Verifier votre installation de WinpCap")
For $n = 0 to Ubound($pcap_devices)-1
If StringInStr($pcap_devices[$n][1], "Microsoft") Then
$int=$pcap_devices[$n][0]
ExitLoop
EndIf
Next
$pcap=_PcapStartCapture($int)
If $pcap=-1 Then MsgBox(0,"WinpCap_Err03","Impossible d'initialiser la liaison. Verifier votre installation de WinpCap")
EndFunc
Cette fonction démarre WinPcap et choisis automatiquement l'interface nécessaire.
7. Je vous donne une belle fonction qui sert à attendre une ou plusieurs informations bien précise ce situant au début de la trame après les informations IP et Protocole. Copiez puis collez la dans votre projet, je vous explique son fonctionnement.
PHP:
Func SEARCH_Packet_OnLeft_Wait($SEARCH_Value,$SEARCH_Time=0,$Search_Verif="",$SEARCH_Value2="",$Search_Verif2="",$SEARCH_Value3="",$Search_Verif3="",$SEARCH_Value4="",$Search_Verif4="")
Local $Arr_PackSearch[2]
Local $Timer000001
If $SEARCH_Time=0 Then
$Timer000001=-1
Else
$Timer000001=TimerInit()
EndIf
While TimerDiff($Timer000001)<$SEARCH_Time
$packet=_PcapGetPacket($pcap)
If IsArray($packet) Then
$src=Number(BinaryMid ($packet[3], 27 ,1))&"."&Number(BinaryMid ($packet[3], 28 ,1))&"."&Number(BinaryMid ($packet[3], 29 ,1))&"."&Number(BinaryMid ($packet[3], 30 ,1))
If StringLeft($src,7)<>"192.168" And StringTrimLeft($packet[3],110)<>"" And StringLeft($src,7)<>"0.0.0.0" Then
If StringLeft(StringTrimLeft($packet[3],110),StringLen($SEARCH_Value))=$SEARCH_Value Then
If Not $Search_Verif="" Then
If StringInStr(StringTrimLeft($packet[3],110),$Search_Verif) Then
$Arr_PackSearch[0]=1
$Arr_PackSearch[1]=StringTrimLeft($packet[3],110)
Return $Arr_PackSearch
EndIf
Else
$Arr_PackSearch[0]=1
$Arr_PackSearch[1]=StringTrimLeft($packet[3],110)
Return $Arr_PackSearch
EndIf
EndIf
If $SEARCH_Value2<>"" And StringLeft(StringTrimLeft($packet[3],110),StringLen($SEARCH_Value2))=$SEARCH_Value2 Then
If Not $Search_Verif2="" Then
If StringInStr(StringTrimLeft($packet[3],110),$Search_Verif2) Then
$Arr_PackSearch[0]=2
$Arr_PackSearch[1]=StringTrimLeft($packet[3],110)
Return $Arr_PackSearch
EndIf
Else
$Arr_PackSearch[0]=2
$Arr_PackSearch[1]=StringTrimLeft($packet[3],110)
Return $Arr_PackSearch
EndIf
EndIf
If $SEARCH_Value3<>"" And StringLeft(StringTrimLeft($packet[3],110),StringLen($SEARCH_Value3))=$SEARCH_Value3 Then
If Not $Search_Verif3="" Then
If StringInStr(StringTrimLeft($packet[3],110),$Search_Verif3) Then
$Arr_PackSearch[0]=3
$Arr_PackSearch[1]=StringTrimLeft($packet[3],110)
Return $Arr_PackSearch
EndIf
Else
$Arr_PackSearch[0]=3
$Arr_PackSearch[1]=StringTrimLeft($packet[3],110)
Return $Arr_PackSearch
EndIf
EndIf
If $SEARCH_Value4<>"" And StringLeft(StringTrimLeft($packet[3],110),StringLen($SEARCH_Value4))=$SEARCH_Value4 Then
If Not $Search_Verif4="" Then
If StringInStr(StringTrimLeft($packet[3],110),$Search_Verif4) Then
$Arr_PackSearch[0]=4
$Arr_PackSearch[1]=StringTrimLeft($packet[3],110)
Return $Arr_PackSearch
EndIf
Else
$Arr_PackSearch[0]=4
$Arr_PackSearch[1]=StringTrimLeft($packet[3],110)
Return $Arr_PackSearch
EndIf
EndIf
EndIf
EndIf
WEnd
Return 0
EndFunc
Cette fonction vérifie dans un premier temps que la trame n'est pas une "envoyé" par notre machine.
Ensuite, elle découpe la trame après les information IP et protocole afin de redécouper encore une fois pour vérifier la présence de la valeur recherché.
La fonction répète ce processus autant de fois qu'il y a de valeur à chercher. (4 maxi)
En cas de succès, la fonction retourne la trame découpé après les information IP et Protocole.
En cas d'échec, elle retourne 0
Comment utiliser cette fonction ?
La syntaxe :
PHP:
SEARCH_Packet_OnLeft_Wait($SockID_0001,$Temp_Avant_Erreur,$Verif_Sock0001,$SockID_0002,$Verif_Sock0002)
Plus d'infos :
PHP:
$SockID_0001= "Première valeur à chercher"
$Temp_Avant_Erreur= "(optionnel) Temps avant que la fonction retourne 0."
$Verif_Sock0001= "(optionnel) Valeur à rechercher n'importe où dans la trame en cas de succès de $SockID_0001."
$SockID_0002= "(optionnel) Seconde valeur à chercher"
$Verif_Sock0002 "(optionnel) Valeur à rechercher n'importe où dans la trame en cas de succès de $SockID_0002."
Voici un exemple utilisable sur le jeux Dofus (2.x) qui attend le changement de carte.
PHP:
Global Const $SockID_0001="038"
Global $Result
While 1
$Result=SEARCH_Packet_OnLeft_Wait($SockID_0001,15000)
If $Result<>0 Then
MsgBox(0,"Yahouuu !","Le changement de carte à été effectué !")
EndIf
WEnd
8. Une fonction assez similaire à la précédente. Cet fonction recherche n'importe où dans une trame un valeur définie.
PHP:
Func SEARCH_Packet_ValueInPacket_Wait($SEARCH_Value,$SEARCH_Time=0,$SEARCH_Value2="",$SEARCH_Value3="",$SEARCH_Value4="")
Local $Timer000001
Local $Arr_PackSearch[2]
If $SEARCH_Time=0 Then
$Timer000001=-1
Else
$Timer000001=TimerInit()
EndIf
While TimerDiff($Timer000001)<$SEARCH_Time
$packet=_PcapGetPacket($pcap)
If IsArray($packet) Then
$src=Number(BinaryMid ($packet[3], 27 ,1))&"."&Number(BinaryMid ($packet[3], 28 ,1))&"."&Number(BinaryMid ($packet[3], 29 ,1))&"."&Number(BinaryMid ($packet[3], 30 ,1))
If StringLeft($src,7)<>"192.168" And StringTrimLeft($packet[3],110)<>"" And StringLeft($src,7)<>"0.0.0.0" Then
If StringInStr(StringTrimLeft($packet[3],110),$SEARCH_Value) Then
$Arr_PackSearch[0]=1
$Arr_PackSearch[1]=StringTrimLeft($packet[3],110)
Return $Arr_PackSearch
EndIf
If $SEARCH_Value2<>"" And StringInStr(StringTrimLeft($packet[3],110),$SEARCH_Value2) Then
$Arr_PackSearch[0]=2
$Arr_PackSearch[1]=StringTrimLeft($packet[3],110)
Return $Arr_PackSearch
EndIf
If $SEARCH_Value3<>"" And StringInStr(StringTrimLeft($packet[3],110),$SEARCH_Value3) Then
$Arr_PackSearch[0]=3
$Arr_PackSearch[1]=StringTrimLeft($packet[3],110)
Return $Arr_PackSearch
EndIf
If $SEARCH_Value4<>"" And StringInStr(StringTrimLeft($packet[3],110),$SEARCH_Value4) Then
$Arr_PackSearch[0]=4
$Arr_PackSearch[1]=StringTrimLeft($packet[3],110)
Return $Arr_PackSearch
EndIf
EndIf
EndIf
WEnd
Return 0
EndFunc
Comment utiliser cette fonction ?
La syntaxe :
PHP:
SEARCH_Packet_ValueInPacket_Wait($SockID_0001,$Temp_Avant_Erreur,$SockID_0002)
Plus d'infos :
PHP:
$SockID_0001= "Première valeur à chercher"
$Temp_Avant_Erreur= "(optionnel) Temps avant que la fonction retourne 0."
$SockID_0002= "(optionnel) Seconde valeur à chercher"
Voila ! Avec toutes ces belles lignes de code, vous devrez être prêt à faire des merveilles ... Avec vos modifications personnel bien sûre.
N'hésitez pas à poser des questions pour obtenir plus d'informations.
Bye Bye, et à la prochaine pour de nouvelle aventures !
Last edited: