VB/VB.Net RSA 2.9

A

Anonymous

Invité
#1
le 2.9 new RSA

le key change le top et le bottom tout les 10 min

le dofus verif si le clé crée par le server dofus ou nn

si tu write en byte le valeur negative sera positive 256 + (key(i) Mod 256)
et finalment :
Code:
    public function setPublicKey(param1:Vector.<int>) : void
        {
            var _loc_2:* = new ByteArray();
            var _loc_3:int = 0;
            while (_loc_3 < param1.length)
            {
                
                _loc_2.writeByte(param1[_loc_3]);
                _loc_3++;
            }
            _loc_2.position = 0;
            var _loc_4:* = new ByteArray();
            var _loc_5:* = PEM.readRSAPublicKey((new this._verifyKey() as ByteArray).readUTFBytes((new this._verifyKey() as ByteArray).length));
            PEM.readRSAPublicKey((new this._verifyKey() as ByteArray).readUTFBytes((new this._verifyKey() as ByteArray).length)).verify(_loc_2, _loc_4, _loc_2.length);
            this._publicKey = "-----BEGIN PUBLIC KEY-----\n" + Base64.encodeByteArray(_loc_4) + "-----END PUBLIC KEY-----";
            return;
        }// end function
class de 2.8
Code:
    public function setPublicKey(param1:Vector.<int>) : void
        {
            var _loc_2:* = new ByteArray();
            var _loc_3:int = 0;
            while (_loc_3 < param1.length)
            {
                
                _loc_2.writeByte(param1[_loc_3]);
                _loc_3++;
            }
            var _loc_4:* = Base64.encodeByteArray(_loc_2);
            this._publicKey = "-----BEGIN PUBLIC KEY-----\n" + _loc_4 + "-----END PUBLIC KEY-----";
            return;
        }// end function
 
Inscrit
29 Septembre 2011
Messages
393
Reactions
3
#2
Salut, tu veux dire quoi par la key change le top et le bottom?
 
A

Anonymous

Invité
#3
dans le 2.8 le key =
top = -126, 1, .... -9, 13, 1, 1, 1, 5, _

bottom ={2, 3, 1, 0, 1}

et le taille de key = 294

en 2.9 = 305
 

bouh2

Membre Actif
Inscrit
12 Septembre 2008
Messages
184
Reactions
21
#4
Un aperçu de _verifyKey() ?
 
A

Anonymous

Invité
#5
un void mais .verify(_loc_2, _loc_4, _loc_2.length)) = vraix fonction avec un return
 

bouh2

Membre Actif
Inscrit
12 Septembre 2008
Messages
184
Reactions
21
#6
Affiche le code alors
 
A

Anonymous

Invité
#7
Code:
   public function verify(param1:ByteArray, param2:ByteArray, param3:uint, param4:Function = null) : void
        {
            this._decrypt(this.doPublic, param1, param2, param3, param4, 1);
            return;
        }// end function
Code:
  private function _decrypt(param1:Function, param2:ByteArray, param3:ByteArray, param4:uint, param5:Function, param6:int) : void
        {
            var _loc_9:BigInteger = null;
            var _loc_10:BigInteger = null;
            var _loc_11:ByteArray = null;
            if (param5 == null)
            {
                param5 = this.pkcs1unpad;
            }
            if (param2.position >= param2.length)
            {
                param2.position = 0;
            }
            var _loc_7:* = this.getBlockSize();
            var _loc_8:* = param2.position + param4;
            while (param2.position < _loc_8)
            {
                
                _loc_9 = new BigInteger(param2, _loc_7, true);
                _loc_10 = this.param1(_loc_9);
                _loc_11 = this.param5(_loc_10, _loc_7, param6);
                if (_loc_11 == null)
                {
                    throw new TLSError("Decrypt error - padding function returned null!", TLSError.decode_error);
                }
                param3.writeBytes(_loc_11);
            }
            return;
        }// end function
et le RSA sera :
Code:
        private function cipherRsa(param1:String, param2:String, param3:TrustCertificate) : Vector.<int>
        {
            var _loc_5:ByteArray = null;
            var _loc_8:int = 0;
            var _loc_4:* = new ByteArray();
            if (param3)
            {
                _loc_4.writeUTFBytes(this._salt);
                _loc_4.writeUnsignedInt(param3.id);
                _loc_4.writeUTFBytes(param3.hash);
                _loc_4.writeByte(param1.length);
                _loc_4.writeUTFBytes(param1);
                _loc_4.writeUTFBytes(param2);
            }
            else
            {
                _loc_4.writeUTFBytes(this._salt);
                _loc_4.writeByte(param1.length);
                _loc_4.writeUTFBytes(param1);
                _loc_4.writeUTFBytes(param2);
            }
            _loc_5 = RSA.publicEncrypt(this._publicKey, _loc_4);
            var _loc_6:* = new Vector.<int>;
            _loc_5.position = 0;
            var _loc_7:int = 0;
            while (_loc_5.bytesAvailable != 0)
            {
                
                _loc_8 = _loc_5.readByte();
                _loc_6[_loc_7] = _loc_8;
                _loc_7++;
            }
            return _loc_6;
        }// end function

        public static function getInstance() : AuthentificationManager
        {
            if (_self == null)
            {
                _self = new AuthentificationManager;
            }
            return _self;
        }// end function

    }
}
 
Inscrit
29 Septembre 2011
Messages
393
Reactions
3
#8
le key change le top et le bottom tout les 10 min

le D. verif si le clé crée par le server D. ou nn

Salut,
mais en fait sa casse un peut côté Emulateur D. mais côté bot je n'est pas encore tester.
 

bouh2

Membre Actif
Inscrit
12 Septembre 2008
Messages
184
Reactions
21
#9
Pas du tout, il n'y a aucune vérification de clé.
 
Inscrit
13 Septembre 2011
Messages
37
Reactions
0
#10
Personnellement, je ne sais pas du tout vers ou chercher pour mettre mon bot à jour >_< J'ai juste remarqué que le login n'est plus présent dans IdentificationMessage (4).

Vous avez des idées de votre coté ? :/
 

bouh2

Membre Actif
Inscrit
12 Septembre 2008
Messages
184
Reactions
21
#11
Faut juste comparer le code source de la 2.8.3 et celui de la 2.9.0, tu vois tout de suite ce qu'il faut mettre à jour.
 
A

Anonymous

Invité
#12
bouh2 a dit:
Faut juste comparer le code source de la 2.8.3 et celui de la 2.9.0, tu vois tout de suite ce qu'il faut mettre à jour.
C'est pas si "simple" que ça. J'ai trouvé nul part comment décrypter la clef rsa.
 
A

Anonymous

Invité
#13
moi aussi la clef change de taille de 294 ---> 305

avec la 2.8 tu trouve la clef RSA aprés 33 integer et tu prend que les 256 entiers
le rest = footer de clef
avec la 2.9 ..... je comprend ri1
 
Inscrit
1 Aout 2010
Messages
44
Reactions
0
#14
Si quelqu'un y est arrivé, si il peut aider.
J'ai jamais étais fort dans ces cryptages ... Bref, je vais continuer d'essayer en attendant.

Merci d'avance pour vos aides.
 
Inscrit
29 Septembre 2011
Messages
393
Reactions
3
#15
Salut, il y a un début à tout c'est le moment de comprendre le secret du RSA car générer une paire de clef RSA c'est simple mais le RSA cache beaucoup plus de chose.

Sinon il y a un autre poste qu'un membre a très bien expliquer le changement du cryptage en 2.9

Nefast a dit:
Salut,
certains me connaisse peut-être deja je développe un emu D. depuis quelque temps en C++ (BoraxEmu).Après un pause plutôt longue j'ai voulu reprendre la dev de mon emu et la ben la super blague de la 2.9, comme visiblement personne ou très peux de personnes on trouvé une solution je me suis mis en tète de patché le client et de viré ce foutu cryptage par RSA... Sans résultat en premier temps,mais par la suite j'ai découvert une clé "caché" dans le client, il s'agit d'une clé Publique qui n'est rien de plus que la "VerifyKey" grâce a sa j'ai pu patché le client, et comme je vois que tout le monde galaire avec sa je vais vous expliqué ce qu'il ce passe :

1 - le serveur génère 2 paires de clés (que je nommerais clé1 et clé2)
2 - il signe la clé1(partie public) grâce à la clé2
3 - il envoi le tout au client
(ici commence la partie bot)
4 - le client "vérifie" le contenue envoyé grâce a la fameuse verifyKey, de cette vérification decoule la clé1(partie public)
5 - ensuite le client continu sa route ^^

j’espère avoir été assez clair, ne confondé surtout pas les 2 paires de clés (cf.1) ce sont bien 2 paires de clés différentes.
Pour la VerifyKey il suffi de bien chercher (SWF Decompiler ne vous trouvera rien)
Bonne année d'avance a tous ;)

Cordialement tifoux.
 
Inscrit
1 Aout 2010
Messages
44
Reactions
0
#16
Bon moi pour l'instant je vois comme ça :

Le commencement dans DofusInvoker\Action\com\ankamagames\dofus\logic\connection\managers\AuthentificationManager.as & AuthentificationManager__verifyKey.as :

Code:
private var _publicKey:String;
private var _verifyKey:Class;

public function setPublicKey(param1:Vector.<int>) : void
        {
            var _loc_2:* = new ByteArray();
            var _loc_3:int = 0;
            while (_loc_3 < param1.length)
            {
                
                _loc_2.writeByte(param1[_loc_3]);
                _loc_3++;
            }
            _loc_2.position = 0;
            var _loc_4:* = new ByteArray();
            var _loc_5:* = PEM.readRSAPublicKey((new this._verifyKey() as ByteArray).readUTFBytes((new this._verifyKey() as ByteArray).length));
            PEM.readRSAPublicKey((new this._verifyKey() as ByteArray).readUTFBytes((new this._verifyKey() as ByteArray).length)).verify(_loc_2, _loc_4, _loc_2.length);
            this._publicKey = "-----BEGIN PUBLIC KEY-----\n" + Base64.encodeByteArray(_loc_4) + "-----END PUBLIC KEY-----";
            return;
        }// end function
Ensuite c'est tout les fichiers dans DofusInvoker\Action\com\hurlant qui eux traite la partie RSA.
Mais bon j'ai du mal à comprendre le principe des 2 clés.
 
Inscrit
29 Septembre 2011
Messages
393
Reactions
3
#18
Salut, regarde en haut tu message de titidecormo je vous et remis encore une fois la solution^^ elle et fonctionne l'explication elle a été tester.
 
A

Anonymous

Invité
#19
Ouais mais moi c'est la difficulté que j'ai pour traduire qui me ralenti. ^^
 
Inscrit
29 Septembre 2011
Messages
393
Reactions
3
#20
Salut, a vrais dire ankamas son pas des devins il utilise des fonctions qui existes déjà donc il suffit de trouver l'équivalent en .net.
 
Haut Bas