Le principal problème pour créer un émulateur 2.0 (les dernière version) c'est cette fameuse encryptions des identifiant avec une clé RSA.
Beaucoup cherche a modifier la clé publique contenue dans le client (
Loading Image) mais du coup la taille du fichier peut être parfois modifié et d'après un article de bouh2 sur son blog (Mise à jour 2.4.6 : le cryptage RSA bien embêtant), un code malicieux s’exécute si le client est modifier (vérification de la taille ??).
Au lieu de modifier cette clé, pourquoi ne pas essayer de patché dynamiquement le client (de façons non permanente) pour que le client envoie les identifiant en brute et non crypté (et sans modifier la taille du client !!).
En cherchant dans les source de la version 2.11 (la méthode utilisé est la même dans les autres version) le client encrypte les identifiant avec la clé RSA, dans
Loading Image :
Cliquez pour révéler
Cliquez pour masquer
Loading Image
baIn = les données en claire.
baOut les données crypté.
En modifiant le P-Code du fichier on peut remplacé les lignes suivante :
baOut.position=0;
//par
baIn.position=0;
while(baOut.bytesAvailable!=0)
//par
while(baIn.bytesAvailable!=0)
n=baOut.readByte();
//par
n=baIn.readByte();
Mais là encore, si je recompile le fichier flash, la taille va changer :(
Je pourrais très bien modifier les quelques bytes qui m’intéresse en ouvrant avec un éditeur hexadécimal, mais alors il faudrait switché entre 2 fichier
Loading Image pour jouer entre l'officiel et un serveur privé.
Donc toujours en partant sur le principe de modifier les bytes qui nous intéresse, pourquoi ne pas patché dynamiquement le client (donc de façon non permanente, c'est-à-dire que dés que le client est fermé il n'est plus patché).
Cela nécessite de créer un logiciel qui patch notre client.
Le voici !!!!!
D2 NoRSA Patcher
Loading Image
Comment sa marche ?
Le logiciel demande le PID (il est encore à l'état de développement (mais fonctionnel) donc la recherche de PID n'est pas automatique, surtout s'il y a plusieurs client de lancé).
Il s'attache au processus et cherche les suite de bytes correspondant aux instructions de baOut, il récupère l'offset et modifie avec la suite de bytes patché.
La taille n'est donc pas modifié et le patch est valable tant que le client est lancé, on peut donc créer un launcher qui permettrais aux joueurs de jouer sur un serveur privé et donc de patché le client.
Le temps de recherche des offset est en moyenne d'une seconde (pour ma part i7 3,40 Ghz & 16 Go RAM, entre 0,010 et 1 seconde (très variable).
Testé aussi sur VM 1 coeur & 512 Mo, entre 1 et 4 secondes.
Et donc à quoi ressemble le packet d'authentification ?
0000 00 11 44 00 02 0B 00 00 01 18 02 01 01 01 01 00 ..D.............
0010 02 66 72 00 30 68 67 63 6B 33 63 79 61 79 2F 7D .fr.0hgck3cyay/}
0020 6D 48 60 7D 39 3D 3E 41 4C 53 5F 41 62 34 78 75 mH`}9=>ALS_Ab4xu
0030 3A 27 7E 74 22 08 4D 6F 6E 4C 6F 67 69 6E 4D 6F :'~t".MonLoginMo
0040 6E 50 61 73 73 00 00 nPass..
08 4D 6F 6E 4C 6F 67 69 6E 4D 6F 6E 50 61 73 73 00 00
La taille du login (1 bytes)
Le login (n bytes (n = taille du login))
Le mot de passe (nombres de bytes restant - 2)
Autres (2 booléan)
Et c'est open source !
Retrouvez les source de mon patcher sur GitHub a cette adresse : https://github.com/Sorrow-/D2.NoRSA.Patcher
Remerciement
Yokaze (pour son aide et ses connaissances des sources du client)
bouh2 (pour FFDec pour les source de la 2.11 et quelques informations)