MITM Bot Dofus Retro

Inscrit
3 Avril 2023
Messages
3
Reactions
0
#1
Bonjour,

J'ai pour projet de coder un bot MITM pour Dofus Retro.
J'aimerais le coder sous Python qui est mon langage de prédilection.

J'ai compris le principe du bot et des étapes a mettre en place. Cependant je bloque sur la conception du MITM pour me placer entre le serveur et le client afin de sniffer les paquets, intercepter et modifier ceux qui m'intéressent. Comment créer ce "faux server/faux client" au milieu?
J'ai également une autre question: Est-ce que l'Ankama Launcher est un frein au développement du bot MITM ou bien on peut réussir à lancer Dofus depuis le launcher et hook la fenêtre Dofus Retro par la suite?

Merci d'avance
 

tazman59

Contributeur
Inscrit
20 Decembre 2012
Messages
149
Reactions
27
#2
Hello !
Pour concevoir le serveur MITM, tu peux suivre ces différentes étapes :
  1. Récupérer l’IP sur laquelle le client officiel se connecte. Assez facile à faire avec pleins d’outils que tu pourras trouver sur le web ou alors par ligne de commande si tu t’y connais un peu plus. Et attention ! Il y a deux IP différentes : une pour le serveur de login et l’autre pour le serveur de jeu (variable en fonction du serveur sélectionné).
  2. Rediriger le client officiel vers ton ip local (127.0.0.1). Là plusieurs techniques existent. Tu peux hook le client, ou encore modifier le bytecode du client (attention tout de même aux sécurités. Je ne suis plus à la page quant à ce sujet.)
  3. Pour intercepter la connexion tu devras ouvrir au préalable un serveur acceptant des connexions sur l’ip et le port établi. Facilement faisable dans beaucoup de techno. Sur Cadernis on utilise beaucoup de .Net, mais aussi de plus en plus de Node et de nouvelles techno à la mode. C’est ton choix.
  4. Une fois que tu acceptera la connexion avec ton serveur. Tu pourras à ton tour te connecter à l’ip et au port que tu auras récupéré à l’étape 1. Ainsi tu possèdes un serveur relié au client officiel et au serveur officiel.
  5. L’étape suivant consiste à envoyer au serveur ce que le client envoie, et inversement. Quand le serveur envoie un packet, il pense communiquer avec un vrai client. Sauf qu’en vérité le vrai client n’en est pas un et le serveur communique directement avec ton application. Tu peux donc recevoir les packets du serveur, les modifier ou non et les envoyer au client (avec qui tu as une connexion depuis l’étape 3.)
Enfin, les informations que tu feras transiter seront formatées dans un certain format. On appelle ça un protocole. Chaque version du jeu à son protocole. Tu pourras trouver plus d’informations quant à ceux ci en fouillant dans le forum.

N’hésite pas si tu as des questions. Tu as l’air de t’être pas mal renseigné et ça c’est rare :)

@+
 
Inscrit
3 Avril 2023
Messages
3
Reactions
0
#3
Salut !

Merci beaucoup pour la réponse.

J'aurais quelques questions concernant ta réponse:

Pour le deuxième point, "Rediriger le client officiel vers ton ip local (127.0.0.1). Là plusieurs techniques existent. Tu peux hook le client, ou encore modifier le bytecode du client ", est-ce que je hook le client une fois la connection au jeu faite? Sinon il faut que je hook ankama launcher et ensuite la fenêtre de jeu? Est-ce que modifier le bytecode du client est trop dur, ou bien avec un peu de pratique et quelques lignes de code bien rodées c'est atteignable?

Est-ce que tu me conseilles mitmproxy pour python pour ce qui est de l'interception et modification des paquets?

Encore merci :)
 
Inscrit
7 Octobre 2019
Messages
18
Reactions
5
#4
Salut,
"Sinon il faut que je hook ankama launcher et ensuite la fenêtre de jeu? ", à mon avis après voir lu quelque sujet du forum dont lui /bypass-apizaap-dofus-retro-1-39-x-sockets-http-2.2940/ , je crois qu'il faut émuler le launcher dans un premier temps, donc tu n'as pas besoin de hook le launcher si tu l'émule.

Sinon pour te simplifier la tâche tu as cet outils : /injecteur-retro.2947,
J'utilise Python aussi, tu peux t'en servir pour "Passer par un proxy local pour intercepter le traffic" .

J'espère avoir été utile :D.
 

AzureHaze

Contributeur
Inscrit
27 Septembre 2019
Messages
47
Reactions
250
#5
Hello, ça dépend de ce que tu veux faire, mais si tu veux lancer toi-même le client tu vas devoir émuler le launcher tu peux checker le repo qu'a posté janembam au-dessus. Pour ce qui est de rediriger la connexion, le plus safe est de hooker connect(), car le client détecte si tu modifies ta config ou le loader.swf. Je te conseille de commencer par coder ton proxy qui va sinplement relayer une connexion tcp et de le tester avec netcat. Ensuite ton client n'aura plus qu'à s'y connecter, tu peux tester avec mon tool l'option --proxy pour la redirection. Il y aussi le projet Malaluna.CLI qui lance un proxy local. Après tu peux utiliser l'injecteur independamment du proxy c'est simplement pour lancer le jeu (la partie chiante)
 
Inscrit
3 Avril 2023
Messages
3
Reactions
0
#6
Merci pour vos réponses, je me lance dans le proxy, une fois que je me serais bien fait la main dessus, je passerai à hook le client :)
@AzureHaze quand tu dis "tu peux tester avec mon tool", tu parles de quel tool?

Encore merci :)
 

AzureHaze

Contributeur
Inscrit
27 Septembre 2019
Messages
47
Reactions
250
#7
Inscrit
3 Juillet 2023
Messages
7
Reactions
5
#8
Pour rebondir sur ce sujet. Il est dit:


  1. Récupérer l’IP sur laquelle le client officiel se connecte. Assez facile à faire avec pleins d’outils que tu pourras trouver sur le web ou alors par ligne de commande si tu t’y connais un peu plus. Et attention ! Il y a deux IP différentes : une pour le serveur de login et l’autre pour le serveur de jeu (variable en fonction du serveur sélectionné).
  2. Rediriger le client officiel vers ton ip local (127.0.0.1). Là plusieurs techniques existent. Tu peux hook le client, ou encore modifier le bytecode du client (attention tout de même aux sécurités. Je ne suis plus à la page quant à ce sujet.)
  3. Pour intercepter la connexion tu devras ouvrir au préalable un serveur acceptant des connexions sur l’ip et le port établi.
Dans ce point 3, le fameux serveur c’est le MITM ? Il doit si j’ai bien compris, accepter les connexions du Client (IP + port 5555) mais aussi de notre machine (localhost) ?

Merci
 
Inscrit
10 Septembre 2020
Messages
12
Reactions
3
#9
Tu as un Serveur MITM (appelé aussi Proxy, car il va jouer le rôle à la fois de Serveur et de Client) qui écoute sur un port en attente de la connexion des Clients (disons le port 12345).

Tu hook la fonction connect() du Client, en modifiant l’IP et le Port « officiel » du Socket du Client, par l’IP et le Port de ton Serveur MITM (127.0.0.1:12345).

Le Client se connecte alors au Serveur MITM. Une fois la connexion effectué, le Serveur MITM doit « passer en mode Client » ou il doit se connecter au Serveur pour forward les packets entre le Client et le Serveur. Ce qui permet de modifier à la volée les packets envoyés par le Client, ou d’envoyer à la volée des packets au Serveur à la place du Client de façon transparente, et d’automatiser la suite à partir de la.
 
Inscrit
3 Juillet 2023
Messages
7
Reactions
5
#10
Merci je pense y voir plus clair et je crois que j'étais sur la bonne piste en concevant mon "DofusHook" que voici :


using System;
using System.Net;
using System.Runtime.InteropServices;
using EasyHook;
public class DofusHook : IEntryPoint
{
// Définir un délégué pour la fonction connect()
[UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)]
delegate int ConnectDelegate(int socket, IntPtr addr, int addrlen);
// Fonction connect() originale
[DllImport("Ws2_32.dll", SetLastError = true)]
static extern int connect(int socket, IntPtr addr, int addrlen);
// Notre fonction hook qui sera appelée à la place de connect()
static int ConnectHook(int socket, IntPtr addr, int addrlen)
{
// Ici, vous pouvez rediriger la connexion vers votre proxy MITM
// en utilisant les informations d'adresse et de port de votre proxy.
var proxyIP = "127.0.0.1";
var proxyPort = 5555;
var proxyEndpoint = new IPEndPoint(IPAddress.Parse(proxyIP), proxyPort);
var proxyAddr = Marshal.AllocHGlobal(Marshal.SizeOf(proxyEndpoint));
Marshal.StructureToPtr(proxyEndpoint, proxyAddr, false);

// Par exemple :
// var proxyIP = "127.0.0.1"; // Adresse IP de votre proxy MITM
// var proxyPort = 5555; // Port de votre proxy MITM
// var proxyEndpoint = new IPEndPoint(IPAddress.Parse(proxyIP), proxyPort);
// var proxyAddr = Marshal.AllocHGlobal(Marshal.SizeOf(proxyEndpoint));
// Marshal.StructureToPtr(proxyEndpoint, proxyAddr, false);
// return connect(socket, proxyAddr, addrlen);
// Pour éviter toute modification non autorisée du client Dofus,
// nous ne ferons rien ici et appellerons simplement la fonction connect() originale.
return connect(socket, addr, addrlen);
}
public void Run(RemoteHooking.IContext context, string channelName)
{
// Afficher un message dans la console
Console.WriteLine("Le hook est maintenant actif et toutes les connexions de Dofus seront redirigées vers le proxy MITM.");
// Installer le hook sur la fonction connect()
LocalHook hook = LocalHook.Create(
LocalHook.GetProcAddress("Ws2_32.dll", "connect"),
new ConnectDelegate(ConnectHook),
this);
// Activer le hook
hook.ThreadACL.SetExclusiveACL(new int[] { 0 });
RemoteHooking.WakeUpProcess();
}
}


Cela dit, en conversant avec ChatGPT, je lui demande s'il faut rediriger le client vers "localhost" ou ma "véritable" IP. Il me répond :

"Pour hooker le client Dofus vers votre proxy MITM, vous devez rediriger les connexions du client Dofus vers l'adresse IP de votre machine sur le réseau local (votre adresse IP locale). Dans votre cas, votre adresse IP locale est 192.168.1.125.
Ainsi, lorsque le client Dofus essaie de se connecter au serveur Dofus réel (par exemple, à l'adresse IP 172.65.220.96), vous devez hooker le client pour rediriger ces connexions vers votre proxy MITM en utilisant l'adresse IP locale (192.168.1.125)."

Et concernant le port dois-je laissé 5555 ou 8080 ? j'avoue que je ne sais pas trop, j'ai regardé dans mon terminal "ipconfig" sans trop de succès

merci pour ta réponse
 
Inscrit
10 Septembre 2020
Messages
12
Reactions
3
#11
il faut rediriger le client vers "localhost" ou ma "véritable" IP
La première question à se poser, c'est sur quelle interface (IP) un Serveur écoute/doit écouter.

Si ton Serveur écoute sur localhost (127.0.0.1), tu ne pourra t'y connecter que depuis ton propre ordinateur, car c'est l'adresse IP locale unique de tout ordinateur, si n'importe quel autre ordinateur cherche à joindre 127.0.0.1 il tombera juste sur lui même.

Si ton Serveur écoute sur 192.168.1.125, tout les autres appareils connectés à ton réseau local qui peuvent joindre cette adresse IP pourront se connecter a ton Serveur.

On voit qu'en terme de fonctionnalités et de sécurité ça a des implications différentes. Par exemple si tu veux heberger un site web et le partager sur ton réseau local, tu devra faire en sorte que ton Serveur écoute sur 192.168.1.125 ; car s'il écoute sur 127.0.0.1 les autres machines de ton réseau ne pourront pas joindre le Serveur. Dans ton cas précis, comme c'est un Serveur MITM, on suppose que tu souhaites uniquement le joindre depuis l'ordinateur qui l'éxécute, donc tu pourrais mettre 127.0.0.1 ; en sachant que 192.168.1.125 fonctionnerait aussi, car tu peux te joindre toi même (tu peux test de te "ping" a ton adresse IP, ca marche).

Et concernant le port dois-je laissé 5555 ou 8080 ? j'avoue que je ne sais pas trop, j'ai regardé dans mon terminal "ipconfig" sans trop de succès
La dessus, je te conseil de faire un simple test pour te rendre compte par toi même (ce qui sera plus formateur :p).

1. Ecris un Client "Hello World" et un Serveur "Hello World" en socket.
2. Ecris le Proxy qui transfère les packets entre ton Client et ton Serveur (pas forcement avec un hook, tu peux modifier le Port en dur dans ton Client pour qu'il se connecte au Proxy au lieu de se connecter au Serveur).

Pour écrire ton Proxy :
- accepte la connexion du Client
- initie la connexion au Serveur
- transfère le packet du Client au Serveur
- transfère le packet du Client au Serveur

Tu devrais voir les packets passer par le Proxy ; et être affichés au niveau de ton Client et de ton Serveur. Quand tu aura ça, je pense que tu saura :p C'est quoi 5555 ou 8080 ?
 
Inscrit
3 Juillet 2023
Messages
7
Reactions
5
#12
Merci pour ta réponse @fioutubs ça m'a donné à réfléchir et je pense avoir compris le principe et le principal. En récréant un Serveur/Proxy, je crée directement le MITM. Il s'agit donc de Hooker la fonction connect() vers ma machine.

Après 48h j'ai eu je pense davantage de soucis avec .NET et EasyHook qu'avec le reste... c'est désespérant.

J'avais commencé à créer un DofusHook.cs que je t'ai montré plus haut, j'en ai fais une DLL ("C:\Users\Alexandre\.nuget\packages\easyhook\2.7.7097\lib\net40\EasyHook.dll") pour l'injecter dans mon Program.cs mais problème:

"Le package 'EasyHook 2.7.7097' a été restauré en utilisant '.NETFramework,Version=v4.6.1, .NETFramework,Version=v4.6.2, .NE​
TFramework,Version=v4.7, .NETFramework,Version=v4.7.1, .NETFramework,Version=v4.7.2, .NETFramework,Version=v4.8' au lieu du framework cible du projet 'net6.0'. Ce package n'est peut-être pas totalement compatible avec votre projet. "​

--> j'ai testé avec Net 6.0 / 7.0 / 4.7 et c'est la même histoire (pourtant je change bien la version dans la <target> sur .csproj
--> Inlassablement j'obtiens : Could not load file or assembly 'System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. Le fichier spécifié est introuvable.

BREF, je contourne le problème on oublie la DLL, et on insère le DofusHook.cs directement au coeur du program.cs ce qui donne ça :


using System;
using System.Net;
using System.Runtime.InteropServices;
using EasyHook;
public partial class Program
{
// Définir un délégué pour la fonction connect()
[UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)]
delegate int ConnectDelegate(int socket, IntPtr addr, int addrlen);
// Fonction connect() originale
[DllImport("Ws2_32.dll", SetLastError = true)]
static extern int connect(int socket, IntPtr addr, int addrlen);
// Notre fonction hook qui sera appelée à la place de connect()
static int ConnectHook(int socket, IntPtr addr, int addrlen)
{
// Ici, vous pouvez rediriger la connexion vers votre proxy MITM
// en utilisant les informations d'adresse et de port de votre proxy.
var proxyIP = "127.0.0.1";
var proxyPort = 8080;
var proxyEndpoint = new IPEndPoint(IPAddress.Parse(proxyIP), proxyPort);
var proxyAddr = Marshal.AllocHGlobal(Marshal.SizeOf(proxyEndpoint));
Marshal.StructureToPtr(proxyEndpoint, proxyAddr, false);
// Pour éviter toute modification non autorisée du client Dofus,
// nous ne ferons rien ici et appellerons simplement la fonction connect() originale.
return connect(socket, addr, addrlen);
}
public static void Main(string[] args)
{
// Obtenez l'ID du processus du client Dofus
int dofusProcessId = GetDofusProcessId();
if (dofusProcessId == -1)
{
Console.WriteLine("Le client Dofus n'est pas en cours d'exécution. Veuillez lancer le client Dofus avant d'exécuter le bot.");
return;
}
try
{
// Afficher un message dans la console
Console.WriteLine("Le hook est maintenant actif et toutes les connexions de Dofus seront redirigées vers le proxy MITM.");
// Installer le hook sur la fonction connect()
LocalHook hook = LocalHook.Create(
LocalHook.GetProcAddress("Ws2_32.dll", "connect"),
new ConnectDelegate(ConnectHook),
typeof(Program));
Console.WriteLine("En attente d'activation du Hook");
// Activer le hook
hook.ThreadACL.SetExclusiveACL(new int[] { 0 });
RemoteHooking.WakeUpProcess();
Console.WriteLine("Le Hook est actif");
// Attendez indéfiniment pour que le hook soit actif (peut être remplacé par une logique de vérification appropriée)
Console.WriteLine("Le hook a été injecté dans le client Dofus. Appuyez sur n'importe quelle touche pour quitter.");
Console.ReadKey();
}
catch (Exception ex)
{
Console.WriteLine("Une erreur s'est produite lors de l'injection du hook : " + ex.Message);
}
}
private static int GetDofusProcessId()
{
System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName("Dofus");
if (processes.Length > 0)
{
return processes[0].Id;
}
return -1;
}
}



Ce coup-ci, on ne me remonte pas de problème lié DLL manquant.
Si je "run" mon program.cs sans Dofus, j'obtiens bien "Le client Dofus n'est pas en cours d'exécution. Veuillez lancer le client Dofus avant d'exécuter le bot." (ça ça fait plaisir au moins c'est conforme au code :D )

Et avec le client de lancer j'obtiens:
"Le hook est maintenant actif et toutes les connexions de Dofus seront redirigées vers le proxy MITM.
Une erreur s'est produite lors de l'injection du hook : The given library is not loaded into the current process."

Saurais tu me conseiller une solution ou m'éclairer ? Je regarde actuellement des projets qui utilisent WinSockHook mais j'ai remarqué que c'est une dépendance de EasyHook aussi.


Je suis sur le point de tenter ma chance en Python pour abandonner ce .NET qui me donne mal au crâne.

Bien sûr je lache pas le morceau, je suis novice, donc ça prendra du temps.

PS : J'ai écris un sujet similaire "Comment créer un bot MITM (pour de bon) il n'y a pas encore de réponses.

Merci
 
Inscrit
10 Septembre 2020
Messages
12
Reactions
3
#13
Je connais pas .NET, mais l'erreur semble assez parlante, "The given library is not loaded into the current process", elle se produit après l'affichage du message "Le hook est maintenant actif..."

Donc ça doit venir de :

```
// Installer le hook sur la fonction connect()
LocalHook hook = LocalHook.Create(
LocalHook.GetProcAddress("Ws2_32.dll", "connect"),
new ConnectDelegate(ConnectHook),
typeof(Program));
```

C'est quoi la librairie dont on parle la ? x)

Pour hooker une fonction on ne parle presque plus de réseau ; on parle de comprendre l'API de la librairie qui te permet de hooker une fonction (pour ça que c'est une partie différente de réaliser le Proxy, comprendre le Client/Proxy/Serveur, etc).

En Python, il y a la librairie "frida" qui te permet d'injecter du Javascript dans un processus a partir de son PID. Dans ton code JS, tu peux utiliser la fonction "Interceptor.attach" fournie par frida qui te permet de récuperer chaque appel d'une fonction. Tu récupères l'appel de la fonction que tu veux, et tu peux modifier directement en mémoire la valeur des arguments (des structures de données) passé à la fonction.
 
Inscrit
3 Juillet 2023
Messages
7
Reactions
5
#14
Ma conversation avec ChatGPT m’éclaire un peu mais peut être que vous me fournirez la clef qui déverrouillera mon mécanisme :

gpt:

Ce bout de code utilise la bibliothèque EasyHook pour créer un "hook" sur la fonction connect() de la bibliothèque système Ws2_32.dll. Permettez-moi de vous expliquer en détail ce que fait chaque ligne de code :
  1. LocalHook hook = LocalHook.Create(...): Cette ligne crée une instance de LocalHook, qui sera utilisée pour créer le hook sur la fonction connect(). Un hook est un mécanisme qui permet de détourner l'exécution d'une fonction vers une autre fonction personnalisée (dans ce cas, ConnectHook).
  2. LocalHook.GetProcAddress("Ws2_32.dll", "connect"): Cette méthode récupère l'adresse mémoire (pointeur) de la fonction connect() dans la bibliothèque Ws2_32.dll. Cela permet d'obtenir l'emplacement de la fonction en mémoire afin que le hook puisse être établi.
  3. new ConnectDelegate(ConnectHook): C'est une déclaration d'une déléguée ConnectDelegate qui pointe vers la fonction ConnectHook. Le délégué est utilisé pour spécifier la fonction personnalisée qui sera appelée à la place de la fonction connect() lorsqu'elle est accrochée (hooked).
  4. typeof(Program): Cela spécifie la classe Program comme le contexte de ce hook. Le contexte est généralement utilisé pour s'assurer que le hook est actif seulement dans le contexte spécifié.
Le code en lui-même semble correct, mais il est essentiel de noter que l'utilisation de hooks peut être délicate et nécessite une bonne compréhension des mécanismes internes des fonctions et des bibliothèques que vous souhaitez accrocher

Moi: Mais moi je veux hooker la fonction connecte du client dofus. Il n’est jamais fais mention du client via par exemple un chemin de destination menant à un fichier du code source (dans le DofusInvoker qu’on a decompilé)

gpt:

Je comprends mieux maintenant. Vous souhaitez accrocher la fonction connect() du client Dofus pour effectuer des opérations personnalisées lors de l'appel de cette fonction. Cependant, dans le code que vous avez fourni, il manque effectivement la mention spécifique du chemin ou du processus du client Dofus.
Pour pouvoir hooker la fonction connect() du client Dofus, vous devez d'abord obtenir le processus du client Dofus en cours d'exécution. Une fois que vous avez accès au processus, vous pouvez utiliser EasyHook pour créer le hook sur la fonction connect() dans le contexte de ce processus.
Voici les étapes générales pour accomplir cela :
  1. Obtenir le processus du client Dofus en cours d'exécution : Vous pouvez utiliser des méthodes telles que Process.GetProcessesByName() pour rechercher le processus du client Dofus par son nom.
  2. Une fois que vous avez le processus, vous pouvez injecter une bibliothèque (DLL) dans l'espace d'adresse du processus Dofus. Cette DLL contiendra le code avec le hook que vous souhaitez établir sur la fonction connect().
  3. À l'intérieur de la DLL, vous utiliserez le code que vous avez fourni précédemment pour créer le hook sur la fonction connect() du processus Dofus.
  4. Assurez-vous que la version de la bibliothèque EasyHook que vous utilisez correspond à l'architecture du processus Dofus que vous ciblez (32 bits ou 64 bits).

    ça te semble une solution ? Pour cibler la fonction Connect du client, comment faire ? Je dois chercher dans quel dossier du DofusInvoker ? HTTP ServerConnection / IConnectionProxy / iserverconnection / MultiConnection / ServerConnection etc il y a tellement de fichier c’est un peu déroutant
 
Inscrit
10 Septembre 2020
Messages
12
Reactions
3
#15
Essaye d'y aller étape par étape aulieu de copier/coller le code de quelqu'un... Ou alors pose tes questions à ChatGPT jusqu'au bout, en lui demandant des précisions sur ce que tu ne comprends pas, mais me copie/colle pas le prompt de ChatGPT en me demandant d'expliciter sa réponse...
 
Inscrit
3 Juillet 2023
Messages
7
Reactions
5
#16
Alors non c’est le code de personne justement, c’est des heures de conversations avec Chat GPT qui me donne ce code ! Crois moi j’en ai écris des messages orientés pour savoir telle ou telle notion, c’est vraiment 100% son code ‍ Mais justement faut pousser l’IA dans ses retranchements pour qu’elle fournisse quelque chose de correct. C’est ma méthodologie étant donné que je ne suis pas développeur.

c’est vraiment cette histoire de matière dans le code source du jeu, que j’ai décompilé et que je ne sais pas encore exploiter pleinement : pour fixer le hook et donc la notion de Connect du client, faut-il se concentrer sur le protocole de connexion ? Je te remercie de m’aider, cela dit je ne demande pas qu’on me mâche le boulot pas de lezard
 
Inscrit
10 Septembre 2020
Messages
12
Reactions
3
#17
GPT4 fait des statistiques sur les données sur lesquelles il a été entrainé pour prédire le prochain mot. Dans le cadre d'un projet informatique, si il a jamais vu tel ou tel type de projet durant son entrainement, il te sortira jamais un code 100% fonctionnel, surtout sur des projets complexes, la preuve en est malgré tes heures de conversations. Il faudra corriger derrière ; d'ou l'utilité de lire et de comprendre les erreurs retournées par le programme ; d'ou la question que je t'ai posé.

Je connais pas .NET, mais l'erreur semble assez parlante, "The given library is not loaded into the current process", elle se produit après l'affichage du message "Le hook est maintenant actif..."

Donc ça doit venir de cette ligne :

```
// Installer le hook sur la fonction connect()
LocalHook hook = LocalHook.Create(
LocalHook.GetProcAddress("Ws2_32.dll", "connect"),
new ConnectDelegate(ConnectHook),
typeof(Program));
```


C'est quoi la librairie dont l'erreur parle ?

GPT4 est un bon moyen pour expliciter des concepts connus qui paraissent complexes, en donnant en exemples des petits bouts de code, mais c'est pas un outil pour générer des projets fonctionnels de A à Z. Python est a mon avis le meilleur langage, tout niveau confondu. Si tu veux apprendre, tu peux utiliser ce site : https://python.doctor/ ; demander à ChatGPT de t'expliciter ce qui ne le serait pas ; puis demander ici si vraiment ça n'est pas clair.
 
Haut Bas