Analyse CheckFileRequestMessage, une vraie sécurité ?

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#1
Coucou, je viens de me poser une petite question :

Admettons que je modifie le DofusInvoker (je sais pas dans quelle mesure on peut le recompiler). Une fois qu'il est chargé, a priori il n'est plus lu (je crois).

Si je remets le fichier original après le lancement du jeu, évidemment le CheckFileRequestMessage ne trouvera rien. Ci-dessous le code qu'il utilise.
Code:
file = file.resolvePath("./" + cfrmsg.filename);
fileStream.open(file,FileMode.READ);
fileStream.readBytes(fileByte);
fileStream.close();
Du coup, je me demande : est-ce que si on ne modifie que le DofusInvoker et qu'on le remet en place après lancement c'est invisible pour le CheckFileRequestMessage ?

C'est à moitié une question et à moitié un partage de certitude.
 
Inscrit
14 Mars 2015
Messages
68
Reactions
0
#2
je pense que tu peux by-pass cette sécurité ,
"./" path de dofus patché donc tu peux modifié par votre path de dofus original
Java:
file = file.resolvePath("./" + cfrmsg.filename);
DofusInvoker2.swf original

exemple 1
Java:
file = file.resolvePath("./path de dofus/DofusInvoker2.swf);
OU

Java:
file = file.resolvePath("./path de dofus original" + cfrmsg.filename);
 
Dernière édition:
Inscrit
10 Mai 2015
Messages
357
Reactions
55
#3
Il trouvera rien si tu utilises ce que librosang à dit. Sinon si tu as des doutes, en mitm tu peux simuler l'envoie du packet au "bon client", tu save la réponse, et lorsque le client est modifié, tu modifies ton packet que le client va envoyer en y insérant, le contenu de la réponse.
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#4
@librosang Ouais merci ça confirme ce que je pensais ! Mais il me semble qu'en remplaçant juste le fichier après le lancement ça marchera aussi…
@Brizze oui, oui, bien sûr !
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#5
Le modérateur peut controller n'importe quel fichier du client, tu dois retourner un hash en md5 soit du contenu du fichier soit du nombre de bytes.
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#6
Oui je sais :)
 
Inscrit
2 Juin 2016
Messages
82
Reactions
3
#7
Et hook la lecture du fichier ? Comme ça, tu modifies tout les fichier que tu souhaites et tu gardes une copie clean à côté, que tu utiliseras lorsque mr le vilain modérateur viendra regarder
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#8
Oui voila c'est une alternative, mais l'inconvénient c'est de mettre à jour les hash de chaque fichier à chaque maj.
 
Inscrit
2 Juin 2016
Messages
82
Reactions
3
#9
Oui voila c'est une alternative, mais l'inconvénient c'est de mettre à jour les hash de chaque fichier à chaque maj.
bah nah, tu conserves une copie des fichier. Admettons qu'il veuille regarder ton fichier random.txt (et qu'il est modifié par tes soins)
tu as random.txt (le fichier modifié) et random_clean.txt, lorsque le hook va voir qu'il essaye de lire random.txt, il va juste le rediriger vers random_clean.txt...pas besoin de conserver les hashs etc des fichiers, c'est intrinsèque à l'implémentation
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#10
c'est legal ca d'aller fouiller dans l'ordi de son client/joueur ?
 

Arth

Contributeur
Inscrit
28 Aout 2016
Messages
80
Reactions
3
#11
@BlueDream
dans le code j'ai vu qu'ils peuvent récupérer le md5 de n'importe quel fichier et sa taille. Mais pas le contenue. (Mais c'est pas le code de la dernière version)

Il faut noter que pour savoir si il y a eu des modifications le couple md5 + size est top, car il existe très peu de collision pour des données de même taille. Si ils ne vérifiaient pas la taille, il existe des méthodes pour ajouter du texte inutile dans un fichier pour définir le md5 que l'on désire.

Do coup : chance de collision très faible + exigence d'un fichier cohérent => quasi unicité des possibilités de contenu.

Maintenant, même si le packet prévu pour vérifier les fichiers ne permet pas de récupérer son contenu... Le RDM permet à ankama (et en faite a n'importe qui, car il n'y a pas de vérification que le RDM viens bien de ankama) d'exécuter du bytecode flash arbitraire (chez moi on appelle ça une backdoor, mais bon). Donc ils peuvent bien faire ce qu'ils veulent, même si c'est pas dans client. En théorie en tout cas ;)


@ToOnS
Il y a les CGUs pour ça :p, et tu penses que mettre en place une backdoor c'est legal ?

Edit: Dans les sources que je lit (donc pas à jour), le RDM est vérifié avec un certificat d'ankama. Donc je suis une mauvaise langue ^^. Mais cela reste une backdoor.
 
Dernière édition:

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#12
@Arth Oui, c'est pour ça que je trouve la méthode de remettre le DofusInvoker d'origine assez élégante, ils ont AUCUN moyen de savoir (à moins d'utiliser de la reflection très avancée).

Si ils ne vérifiaient pas la taille, il existe des méthodes pour ajouter du texte inutile dans un fichier pour définir le md5 que l'on désire.
Je suis intéressé (pour d'autres applications), tu peux m'en dire plus ?
 

Arth

Contributeur
Inscrit
28 Aout 2016
Messages
80
Reactions
3
#13
Je n'ai pas non plus dit que c’était facile ;). Je n'ai jamais pratiqué cela et je ne connais que très peu la cryptographie alors pour éviter de dire des bêtises, je ne peux que te rediriger vers des liens. De plus, je pense que développer cela serait plus intéressant dans un tuto complet ^^.
On appel cela une attaque par collision (collision attack), le but étant de produire une collision entre 2 messages (avec bien-sur des contraintes sur ces messages) via l'algo MD5 sans pour autant faire une attaque brute force (car trop longue).

Une thèse en anglais sur le sujet: https://www.win.tue.nl/hashclash/On Collisions for MD5 - M.M.J. Stevens.pdf
(c'est long mais ça à l'air passionnant :))
 
Haut Bas