Mise à jour D..

A

Anonymous

Invité
#61
Pas du tout, tu n'as pas compris. Relis le post de Sorrow.
 

Sorrow

Membre Actif
Inscrit
5 Mai 2012
Messages
376
Reactions
26
#62
ArkhAnik a dit:
Est-ce que par hasard, je dois décompiler mon D..Inv0ker.swf, remplacé le SIGNATURE_KEY_DATA.bin, et recompiler avec ?
Comme je l'avais expliquer sur mon 1er post :
Sorrow a dit:
Modifier le client statiquement est une mauvaise idée, il y à des checksum de taille et tout ce bazar.
Je vais essayé d'expliquer simplement le fonctionnement et éventuellement une solution (théorique)

  • - Le client vérifie le header de la signature
  • - Il récupère une suite d'octets chiffré et les déchiffre avec la clé SIGNATURE_KEY_DATA, à l’intérieur : un hash md5
  • - Il hash en md5 les adresse IP
  • - Puis compare les deux hashs pour vérifié la validité de la signature

Par conséquence, il faudrait pouvoir chiffré notre propre signature, le seul hic c'est que contrairement à ce que j'ai pu dire, il paraitrait que SIGNATURE_KEY_DATA soit-une Public Key, hors pour générer la signature il nous faut la Private Key (qui bien sûr n'est pas dans le client).

Donc a défaut de ne pas pouvoir générer nos propre signature (pour le moment) un outil externe pour patcher dynamiquement le client serais le plus simple pour le moment.
Et ici il n'est pas question de changer la clé, mais simple un bytes pour bypass la vérification (par exemple passé un iftrue à iffalse).

EDIT: J'ai fait un tool qui liste les clients Dofus et les patch, mais j'ai quelques problème pour patché le client (même depuis Cheat Engine).

 
Inscrit
16 Aout 2011
Messages
184
Reactions
0
#63
Ca a l'air pas mal complexe tout ça ... Même si je développe un bot socket, mon petit MITM m'aidait pas mal pour analyser le jeu. Je vais essayer de relire un peu tout votre raisonnement, et d'apporter ma pierre à l'édifice :)
 

Geraff

Administrateur
Membre du personnel
Inscrit
13 Mars 2008
Messages
564
Reactions
0
#64
il y a un logiciel qui se nomme proxyFirewall cependant il ne marche que jusqu'a windows XP.
Sinon il y a http://www.proxifier.com/ qui est dit être une alternative.

Le but est de diriger le trafic réseau du jeu Dofus directment en 127.0.0.1 (la ou il y a vôtre MITM).
Le trafic de votre MITM ne sera lui pas redirigé car le trafic se fait par programme.

Avec cette solution vous ne modifiez pas le fichier config.xml. Les tests seront toujours valide. Vous ne modifiez pas le client Dofus. Et surtout les test de vérification de fichiers fait à la volé et demandé aléatoirement par le serveur ou sous demande de modérateurs seront toujours bons.

Je trouve ça beaucoup plus sur que de modifier un fichier de jeu. Je considère qu'un bon MITM doit utiliser une version 100% officielle du jeu.

EDit : apparement il existe d'autres logiciels dit comme alternative voici la liste je ne peux pas vérifier.
freecap, proxycap, sockscap, Widecap, ProxyWay
Sinon un post a dit de lancer proxyFirewall en compatibilité XP pour le faire marcher sur windows 7
source : http://www.blackhatworld.com
 
Inscrit
16 Aout 2011
Messages
184
Reactions
0
#65
Ca m'a l'air pas mal comme solution, dans mon cas, étant donné qu'il s'agit d'un MITM (Sniffer ) personnel, après, pour les personnes qui partagent leur MITM, c'est un peu plus compliqué .. Je vais essayer ça et je vous en dis des nouvelles :)
Merci !
 

bouh2

Membre Actif
Inscrit
12 Septembre 2008
Messages
184
Reactions
21
#66
Autre solution, utiliser RawDataMessage pour injecter un SWF et forcer le client à se connecter. Ça éviterait de devoir modifier le client. (Ce qui est nécessaire pour un émulateur)
Autrement pour un bot MITM il y a beaucoup d'autres solutions pour rediriger la connexion du client, une possibilité est d'injecter une DLL dans le client qui hook la fonction Winsock.connect() et qui force la connexion sur une certaine adresse (donc localhost).
 
A

Anonymous

Invité
#67
Sparkdaemon : cette solution est effectivement la meilleure pour le MiTM, ou même les serveurs privés, puisque elle est absoluement transparente et n'implique absolument aucune modification du client. Sous Linux elle est d'ailleurs très facile à mettre en place puisque un outil en ligne de commande existe pour forcer l'utilisation d'un proxy par une application ( cela fonctionne même avec wine ). Cependant elle implique de développer un proxy Socks maison modifié pour procéder à des connexions aux ips qui l'intéresse. Je m'étais documenté sur Socks cet été ( j'avais découvert cette méthode en réfléchissant à mon ému ), et c'est un protocol vraiment facile à implémenter, je vais peut être faire quelque chose en C++ avec Qt, ça pourrait être un bof PoC. On peut tout à fait imaginer embarquer un proxy socks sur les launchers des serveurs privés ou sur les bots MiTM comme module.

bouh2 a dit:
Autre solution, utiliser RawDataMessage pour injecter un SWF et forcer le client à se connecter. Ça éviterait de devoir modifier le client. (Ce qui est nécessaire pour un émulateur)
Il faut déjà que le client dofus soit connecté à un serveur pour cela, ce qui justement bloque ici.
 

bouh2

Membre Actif
Inscrit
12 Septembre 2008
Messages
184
Reactions
21
#68
Dans ce cas il faut patcher le client.
 

Geraff

Administrateur
Membre du personnel
Inscrit
13 Mars 2008
Messages
564
Reactions
0
#69
Je pense que Ankama attend de voir le problème contourné pour lancer une procédure de vérif d'intégrité du client sur des zones bien spécifique, perso, je ne me tenterai pas à modifier le client ^^.

De plus je pense même que certains personnels d'ankama viennent sur le forum.

Edit : merci de ne pas divaguer sur le sujet... j'ai du nettoyer le topic.
 

Sorrow

Membre Actif
Inscrit
5 Mai 2012
Messages
376
Reactions
26
#70
Ils répliquent en conséquence c'est tout a fait légitime de leur part.
Mais avec cette nouvelle "sécurité" j'ai du mal a voir comment faire sans patché (enfin ya aussi les techniques de proxy que vous avez énoncé)
Car sans la clé de chiffrement on ne peut pas générer nos propre signature, mais je trouve cela quand même vraiment bizarre que ce soit une Public Key qui déchiffre o_O (faut poussé les test vers ce champ là aussi).
 

asyade

Membre Actif
Inscrit
26 Avril 2013
Messages
368
Reactions
1
#71
Bien que je soit totalement d'accord avec le raisonnement de geraff je me suit comem pencher sur le patching du client (car je ne joue pas a dofus ,du moins plus et toute ce qui m'intéresse pour le moment c'est d'avancer dans mon bot donc si je peut trouver une metode provisoire quite a me faire ban je m'en fout royalement)et je doit dire que j'avance bien dans me recherche (J'arrive a modifier ce qui minteresse depuis cheat-engine) sauf que j'ais encore un tout petite probléme (j'ais dailleur poster une question dans la section c#) tout sa pour dire que je posterais bientot (si dieux veut xD) un petite projet qui patch le client d2 pour nous (coder en c#)
 

Geraff

Administrateur
Membre du personnel
Inscrit
13 Mars 2008
Messages
564
Reactions
0
#72
A priori on a tous la même clé de signature vu que j'ai la même que le premier post. J'essaie de me pencher dessus car j'aime bien les défis. Mais demain.
 

Sorrow

Membre Actif
Inscrit
5 Mai 2012
Messages
376
Reactions
26
#73
Petite info rapidement, depuis Linux (bien que je galère avec AIR U_u) dans la console j'ai eu sa au chargement du jeu :
Temps de hash pour validation de signature : 3 ms
Ce qui veut donc dire que la signature est testé à la connexion ET au chargement du jeu.

A priori on a tous la même clé de signature vu que j'ai la même que le premier post. J'essaie de me pencher dessus car j'aime bien les défis. Mais demain.
Oui, grosso modo la signature contient des donnés chiffrés qui contient un hash md5 de "213.248.126.39,213.248.126.40" puis le client compare avec le hash des IP dans config.xml
 
Inscrit
3 Février 2012
Messages
13
Reactions
0
#74
Quelqu'un aurait une idée de comment obtenir ce defaultSignatureKey (Constants.SIGNATURE_KEY_DATA()) ?
Il apparaissait déjà dans la v2.15, mais il n'était pas utilisé. Il était surement déjà intégré en prévention de la 2.16 ^^'
 

Sorrow

Membre Actif
Inscrit
5 Mai 2012
Messages
376
Reactions
26
#75
Cue a dit:
Quelqu'un aurait une idée de comment obtenir ce defaultSignatureKey (Constants.SIGNATURE_KEY_DATA()) ?
Il apparaissait déjà dans la v2.15, mais il n'était pas utilisé. Il était surement déjà intégré en prévention de la 2.16 ^^'
viewtopic.php?f=54&t=1435&start=50#p16157

J'ai une petit idée, c'est de créer un "launcher" qui démarre Dofus en processus fils, on attend quelques millisecondes que le SWF soit lancé puis on patch directement la fonction verify( ) de jerakine.utils.crypto.Signature pour lui faire renvoyer toujours "true". Comme ça la vérification au démarrage et à la connexion sont toujours Ok même avec des IPs modifiés.
 

bouh2

Membre Actif
Inscrit
12 Septembre 2008
Messages
184
Reactions
21
#76
Oui il n'y a pas de vérification mémoire du SWF, juste du fichier en lui même, donc si tu patch dynamiquement pas de soucis.
 

asyade

Membre Actif
Inscrit
26 Avril 2013
Messages
368
Reactions
1
#77
Salut, j'essay de patcher dynamiquement seulement voila j'ais toujours un value de 0 dans les byte que je lit et l'orsque je write sa ne semble pas marcher voici ma class

using System;
using System.Text;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace WindowsFormsApplication1
{

public class MemoryEditor
{

[DllImport("kernel32.dll")]
static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, UIntPtr nSize, out IntPtr lpNumberOfBytesWritten);

[DllImport("Kernel32.dll")]
static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, UInt32 nSize, ref UInt32 lpNumberOfBytesRead);
string pname = "";
IntPtr hand;

public MemoryEditor(string ProcName)
{
pname = ProcName.Replace(".exe", "");
Process[] proclist = Process.GetProcesses();
foreach (Process pr in proclist)
{

if (pr.ToString() == "System.Diagnostics.Process (" + pname + ")")
{
hand = pr.Handle;
}
}
}

public bool Write(int Address, byte[] data)
{
bool success = false;
Process[] proclist = Process.GetProcesses();
IntPtr bytesout;
success = WriteProcessMemory(hand, (IntPtr)Address, data, (UIntPtr)data.Length, out bytesout);
return success;
}

public byte[] Read(int Address, int length)
{
byte[] ret = new byte[length];
uint o = 0;
ReadProcessMemory(hand, (IntPtr)Address, ret, (UInt32)ret.Length, ref o);
return ret;
}
}
}

avez-vous une idée? merci d'avance

ps . la requestedExecutionLevel et a highestAvailable
 

Sorrow

Membre Actif
Inscrit
5 Mai 2012
Messages
376
Reactions
26
#78
Depuis quelques jours on discute pas mal sur Jabber sur des techniques de bypass de la nouvelle sécurité.
Une technique qui ma était proposé par bouh2 est de hooké la fonction connect( ) de WinSock pour détourné l'adresse IP de connexion.
Voici un petit screen qui montre le message que j'affiche à la connexion une fois la DLL injecté dans Dofus :D



Il y à également d'autre techniques de bypass en dev, je laisse les intéressés en parlé eux-même une fois exploitable ;)
Sachez aussi qu’apparemment il n'est plus possible de patché dynamiquement le client. Le code ActionScript chargé en mémoire est totalement "inutile", par exemple si vous le modifier n'importe comment dans la mémoire le client fonctionneras toujours correctement.
Et pour finir j'ai une version de DofusInvoker patché statiquement qui me permet d'être en DEBUG/EXPERIMENTAL et donc avoir accès à toutes les fonctionnalité (bien sûr, cela implique de bypassé le SWF de checksum dans le fichier .d2i).

Edit:

Voila ! Ma DLL est terminé et fonctionnel. Celle-ci une fois injecter hook la fonction connect( ) et si celle-ci est appelé, je vérifie l'ip, si c'est celle des serveurs de jeu officiel je la détourne par celle de mon émulateur.
Voici le résultat sur un client non modifier :

Il ne me reste plus que le "launcher" pour injecter la DLL a faire.
 
A

Anonymous

Invité
#79
J'ai commencé un petit outil en C++ comme promis pour tester la faisabilité de la technique du proxy-passerelle pour les émus et les MiTM


L'outil est encore très instable, beaucoup de choses sont à améliorer. Pour mes tests sous linux j'ai utilisé tsocks, avec Dofus 2 version windows sous wine. L'uplauncher fonctionne avec cette méthode, et du même coup le client dofus a le son, tout est donc parfaitement fonctionnel.
 

asyade

Membre Actif
Inscrit
26 Avril 2013
Messages
368
Reactions
1
#80
Salut , j'ais fait un petit injecteur en c# mais je n'arrive pas a faire la dll a injecter pour hooker winsock (je ne fait pas du tout de c++ et je dois avouer que je suit perdu dans les tutorielle pour hooker)


ps. l'injecteur est en piece jointe (il ne fonctionne pas mais ce n'est que a cause de l'interface que je nais pas fini la class injector fonctionne parfaitement)
 
Haut Bas