• PartageC#
  • SocketHook injector (alternative à No.Ankama.dll )

steaze

ça sert à quoi en faite ce tools ?

Je pensais que l'apprentissage de la lecture n'était pas à inclure dans la courbe d'apprentissage de l'outil :

".dll injector based on EasyHook which redirect the traffic to your local server. "

Je répète dans la langue de Molière :

"Outil permettant de rediriger le trafic TCP d'une application vers un serveur local"

C'est utile pour un émulateur "patch-less" ou un bot MITM.

Merci de l'infos,

désolé je n'avait tout simplement pas été voir l'informations sur le git,

j'y avait pas pensé comme je suis sur smartphone j'ai pas cliqué sur le git.

3 mois plus tard

Est-ce qu'il y a moyen de faire un "sniffer" avec cet outil ?

J'essaie de simplement lire ce que j'intercepte, et renvoyez indemne les données aux serveurs, mais après ma lecture du BasicPingMessage, il m'est impossible de renvoyer les informations. J'utilise le hook et une application serveur locale pour attraper le paquet redirigé en localhost.

Sinon, il y a moyen de lire le paquet via le hook, avant de l'envoyer en local ?

Oui c'est le but de cet outil. Mettre en place une redirection vers un autre serveur.

Tu peux donc faire un sniffer sans problème. Il te faudra deux socket : un qui reçoit du client, un connecte au serveur distant et tu peux intercepter et travailler entre les deux

Je te partage ma problématique: En ce moment, je réussis à intercepter le premier paquet (BasicPingMessage) et le lire avec succès. Par contre, je coince sur la suite, car je suis incapable de me connecter (TCP) sur le serveur de connexion, pour continuer le processus de connexion.

SocketException: System.Net.Sockets.SocketException (0x80004005): 
A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 
34.252.21.81:45845

Pour ce faire, je fais un simple socket, mais clairement je manque quelques choses.

Socket s = new Socket(AddressFamily.InterNetwork,
    SocketType.Stream,
    ProtocolType.Tcp);
s.Connect("34.252.21.81", 45845);

C'est pas un topic d'aide ici...

Cree ton propre sujet avec ton code et des logs propre et tu auras de l'aide

Effectivement, mais ma question porte sur l'outil, donc je ne suis pas convaincu de la pertinence à faire un autre poste...

Je ne suis pas certains de comment communiquer avec les serveurs en utilisant le SocketHook. Est-ce que l'on doit gérer la réponse de la communication aux serveurs, ou répondre via le hook? Je dois admettre que c'est tout nouveau pour moi, je fonctionne encore avec SharpPcap pour mes outils, mais je cherche à pousser plus loin ma programation avec ce joli partage.

Typiquement il ne fait rien de plus que de rediriger le traffic du Auth (port 5555) de dofus vers ton serveur local

Le hook ne fait rien d'autre que ça, c'est à toi de gérer après la communication avec le client et le serveur.

On peut rediriger deux connexions différentes sur deux ports différents avec cet outil ?

Dans l'illustration on voit {C1, C2, C3 ... } -> {L1}

Peut-on faire simultanément {C1} -> {L1} et {C2} -> {L2} et {C3} -> {L3} ... ainsi de suite ?

P.S. Les {Li} sont disjoints

    da2h

    On peut rediriger deux connexions différentes sur deux ports différents avec cet outil ?

    Dans l'illustration on voit {C1, C2, C3 ... } -> {L1}

    Peut-on faire simultanément {C1} -> {L1} et {C2} -> {L2} et {C3} -> {L3} ... ainsi de suite ?

    P.S. Les {Li} sont disjoints

    Oui, aucun soucis, tu peux rediriger autant de connexion que tu veux à condition d'adapter le code :-)

      DrBrooklyn

      Oui, aucun soucis, tu peux rediriger autant de connexion que tu veux à condition d'adapter le code :)

      Je me rend compte qu'il suffit de lancer plusieurs instances de ton code avec à chaque fois des ip/port différents.

      Mais c'est un peu sale car il faut recompiler le code pour chaque cible ...

      En tout cas ça fait plais de voir que l'esprit du partage continue à faire ses preuves sur le forum.

      Merci :)

      Une autre question :teeth: c'est quoi la différence entre les sources dans SocketHook et SocketHook.injector ?

        da2h

        Je me rend compte qu'il suffit de lancer plusieurs instances de ton code avec à chaque fois des ip/port différents.

        Mais c'est un peu sale car il faut recompiler le code pour chaque cible ...

        En tout cas ça fait plais de voir que l'esprit du partage continue à faire ses preuves sur le forum.

        Merci :)

        Une autre question :teeth: c'est quoi la différence entre les sources dans SocketHook et SocketHook.injector ?

        Tu peux faire en sorte qu'il lise un fichier à chaque tentative de connect et ainsi avoir un hook configurable sans devoir recompiler pour changer les IPs à rediriger

        Le projet est scindé en deux :

        L'injecteur qui s'occupe de créer un thread dans le process cible (il peut aussi créer ce process pour toi) et y executer le code de la dll

        La dll contient la logique de redirection

        J'essaie de compiler ton code mais j'ai un problème avec EasyHook.

        msbuild 
        ne reconnaissait pas les dlls du projet je les ai donc ajouté au dossier C\..\Microsoft\...\.NETFramework\v4.7.2. Ca n'a rien changé.

        J'ai donc remplacé la reference EasyHook par EasyHook32 dans les .csproj du projet.

        Maintenant il les trouve mais la compilation fail avec le message suivant:

        ResolveAssemblyReferences:
          Référence primaire "EasyHook32, Version=2.7.7097.0, Culture=neutral, PublicKe
          yToken=4b580fca19d0b0c5, processorArchitecture=MSIL".
              Impossible de trouver les fichiers dépendants. Impossible d'ouvrir le fic
          hier d'assembly 'EasyHook32.dll'. L'image PE ne contient pas de métadonnées g
          érées.
        
        C:\Program Files\Mono\lib\mono\msbuild\15.0\bin\Microsoft.Common.CurrentVersion
        .targets(2126,5): warning MSB3245: Impossible de résoudre cette référence. Impo
        ssible de trouver l'assembly "EasyHook32, Version=2.7.7097.0, Culture=neutral,
        PublicKeyToken=4b580fca19d0b0c5, processorArchitecture=MSIL". Vérifiez que l'as
        sembly existe sur le disque. Si elle est requise par votre code, vous risquez d
        'obtenir des erreurs de compilation. [C:\Users\da2h\Desktop\Hook\SocketHook-mas
        ter\src\SocketHook\SocketHook.csproj]

        Apparemment le compilateur n'arrive pas à lire EasyHook32.dll.

        J'ai pas VS sur ma machine et la compilation des C#/.NET c'est nouveau pour moi.

        2 mois plus tard

        Hey salut !

        J'ai lu ton code et dans le Main.cs de SocketHook.dll je ne saisis pas tous. C'est peut-être une question super bête mais je ne comprends pas comment les paramètre du constructeur peuvent avoir une valeur ? Peut-être est-ce quelque chose que je n'ai pas vu en c# *-*

                public Main(IContext context, string channelName, List<string> ipsWhitelist, int redirectionPort)
                {
                    _interface = IpcConnectClient<HookInterface>(channelName);
                    _whitelist = ipsWhitelist.Select(ip => IPAddress.Parse(ip));
                    _redirectionPort = (ushort)redirectionPort;
        
                    _interface.Ping();
                }

        Tu peux jeter un oeil à la doc de la lib qui est utilisé pour en savoir plus : http://easyhook.github.io/tutorials/remotefilemonitor.html#injectionentrypoint

        Le hook se connecte via ipc a l'injecteur et lui transmet les paramètres que tu vois dans le constructeur du point d'entrée du hook, comme c'est la lib qui est responsable d'instancier cette classe elle peut lui injecter les dépendances associés (que tu lui passe dans la méthode d'injection de l'injecteur, ici : https://github.com/thenameless314159/SocketHook/blob/master/src/SocketHook.Injector/Program.cs#L46 ).

        11 jours plus tard

        L'application a été mise à jour, elle supporte désormais la configuration sois via la CLI, sois via un fichier json, soit via les deux. J'y ai aussi ajouter une API REST pour permettre de la controler "à distance".

        14 jours plus tard

        Update avec ajout d'une application WPF

        [Image Introuvable]

        EDIT: il y a un onglet release sur le repo qui permet de télécharger la release compilé

        Merci @Nameless pour ta contribution.

        Petit rappel, pour ceux qui savent pas lire le GitHub (comme moi ;)). Si vous avez cette exception:

        img

        C'est parce que vous n'avez pas configurer de règle dans votre parefeu. Voilà un lien qui explique l'exception ainsi que les work-arrounds: MSDN.

        img

        Merci de vous tourner vers ces work-arrounds.

        Bonne journée.

        un an plus tard

        Bonjour,

        Merci pour le tool, j'ai télécharger la release mais j'ai un soucis quand je veux enregistrer la configuration j'ai cette erreur et le programme plante. Si quelqu'un saurait m'aider ou connait un autre outils pour rediriger les ips des serveurs sur le localhost pour faire du MITM svp.

        img

          un an plus tard

          Powablocks

          Bonjour,

          Merci pour le tool, j'ai télécharger la release mais j'ai un soucis quand je veux enregistrer la configuration j'ai cette erreur et le programme plante. Si quelqu'un saurait m'aider ou connait un autre outils pour rediriger les ips des serveurs sur le localhost pour faire du MITM svp.

          img

          Yo, pas compliqué, tu créés un fichier injectionoptions.json ou TotoAimeLesCourgettes.json, tu le fou où tu veux, dedans tu lui mets ça :

          {
              "InjectToExe": "{TON CHEMIN VERS TON EXE}",
              "RedirectionPort": {TON PORT DE DESTINATION},
              "RedirectedIps": [
                "{L'IP OU LES IP A REDIRIGER}"
              ]
          }

          Tu sélectionneras ce json en tant que fichier de conf dans l'appli, il va remplir tout seul les champs port et ip(s).

          Ensuite tu run l'appli en admin ou alors tu configure une exception au pare feu Windows.

          ATTENTION: Pour les configs Windows en français c'est un peu différent : netsh http add urlacl url=http://+:80/ user="Tout le monde"

          Bisous