C# Patcher le RawDataMessage en runtime

Inscrit
14 Decembre 2012
Messages
48
Reactions
2
#1
Hello,

J'aimerai charger un tunnel (pipe) TCP entre mon proxy et le client Dofus (pour le déplacement mais pas uniquement). La méthode la plus intéressante me semble d'utiliser le loadBytes du RDM. J'ai donc décidé de jeter un coup d’œil au source code (ServerControlFrame.as). J'ai plusieurs solutions en tête mais j'aimerai votre avis :
  1. Patcher le code avant le JIT (mais compliqué d'allouer de la mémoire dans le p-code, du coup je peux simplement modifier ...).
  2. Patcher la clé (laquelle ? comment fonctionne la signature ?) le temps d'accepter le RDM modifié puis unpatcher.
  3. Hook la fonction loadBytes() dans Adobe.Air.dll et insérer son swf.
J'ai encore d'autres idées mais elles me semblent encore plus tordues ...
L'avez-vous déjà fait ? Quelqu'un a-t-il plus d'infos sur la méthode 2. ? Votre avis ?

Merci à vous !
 
Dernière édition:
Inscrit
14 Decembre 2012
Messages
48
Reactions
2
#2
Je reviens vers vous après avoir essayé la possibilité 1., je modifie le code source suivant :

1589377562299.png

Je modifie en effet (dans un premier temps, afin de voir si j’avançais dans le bon sens) le if(signature.verify(rdMsg.content,content)) par un ifnot (le p-code utilisé est le iffalse soit 0x12, que j'ai remplacé par un iftrue soit 0x11). Je fais un simple byte scan array dans la virtual memory et je tombe bien sur ma condition que je transforme en faisant un simple remplacement. Si le RDM est correctement signé (il vient du serveur, donc je suppose que oui) mon client ne devrait pas envoyé de response et confirmerai ainsi ma logique.

Vous vous en doutez, échec total ... mais pour quelle(s) raison(s) ? Je modifie bien le p-code avant un tout appel possible (la classe n'est pas encore initialisée), car un petite recherche dans la mémoire avec CG me prouve bien que mon byte array est unique (et je garantis aussi qu'il est bien modifié après le patch).

Est-ce que je m'y prends bien ?
 
Inscrit
26 Janvier 2020
Messages
8
Reactions
5
#3
salut travaille tu toujours sur ton idée ?
 
Inscrit
14 Decembre 2012
Messages
48
Reactions
2
#4
Nop j'ai jamais trouvé le problème à ma méthode, sorry l'ami :/
 
Inscrit
26 Janvier 2020
Messages
8
Reactions
5
#5
triste :/
 
Inscrit
16 Mars 2014
Messages
214
Reactions
30
#6
Nop j'ai jamais trouvé le problème à ma méthode, sorry l'ami :/
Tu avais pris en compte que le RDM ne peut s'effectuer que durant la phase d'authentification ?
 

Elwazo

Contributeur
Inscrit
30 Mars 2020
Messages
9
Reactions
6
#7
On remarque quand même que dans le code de la ServerControleFrame, la réponse envoyé est `true`, et ce quelle que soit l'issue du if.
Ton problème vient peut-être de là, si je comprends ce que tu fais: l'envoi de réponse se fait peut-être en fonction de ce booléen.
 
Haut Bas