Déchiffrement des prix moyens

Inscrit
13 Mars 2022
Messages
24
Reactions
3
#1
Bonjour,

je cherche a lire les prix moyens dans le fichier "C:\Users\xxx\AppData\Roaming\Dofus\itemAveragePrices.dat".
Quelqu'un aurait une solution pour ça?

Je suis tombé sur ce poste: https://cadernis.fr/index.php?threads/fichiers-locaux.1573/
La solution qu'ils ont trouvé est d'utiliser FluorineFX mais je n'ai pas reussi à l'installer/utiliser et le site n'existe plus
Je code en python si jamais

Merci d'avance
 
Inscrit
16 Aout 2023
Messages
1
Reactions
2
#2
Hello !

En fouillant un peu dans les sources du jeu (décompiler DofusInvoker.swf avec ffdec), on trouve rapidement les classes associées à ce fichier, à savoir:
com.ankamagames.dofus.logic.game.common.frames.AveragePricesFrame
com.ankamagames.jerakine.managers.StoreDataManager
com.ankamagames.jerakine.types.CustomSharedObject

Ce qui mène à la fonction responsable de la lecture du fichier:
JavaScript:
private function getDataFromFile() : void
{
   if(!this._file)
   {
      this._file = new File(COMMON_FOLDER + this._name + "." + DATAFILE_EXTENSION);
      this._fileStream = new FileStream();
   }
   if(this._file.exists)
   {
      try
      {
         this._fileStream.objectEncoding = ObjectEncoding.AMF3;
         this._fileStream.open(this._file,FileMode.READ);
         this.data = this._fileStream.readObject();
         this._fileStream.close();
      }
      catch(e:Error)
      {
         if(_fileStream)
         {
            _fileStream.close();
         }
         _log.error("Impossible d\'ouvrir le fichier " + _file.url);
         if(throwException)
         {
            throw new CustomSharedObjectFileFormatError("Malformated file : " + _file.url);
         }
      }
   }
   if(!this.data)
   {
      this.data = new Object();
   }
}
Ça utilise donc l'encodage AMF3.
Il reste plus qu'à trouver un outil qui permette de décoder ça (ou d'en faire un sois-même).
Après avoir essayé 2-3 truc j'ai eu du succès avec ce package node.js: libamf.

Le code est assez simple:
script.js:
const fs = require('node:fs');
const path = require('node:path');
const libamf = require('libamf');

const itemAveragePricesPath = path.join(process.env.APPDATA, "Dofus/itemAveragePrices.dat");
const buf = fs.readFileSync(itemAveragePricesPath);
const data = libamf.deserialize(buf, libamf.ENCODING.AMF3);
console.log(data);
 
Inscrit
13 Mars 2022
Messages
24
Reactions
3
#3
super réponse, merci d'avoir aussi bien détaillé.
Il me reste donc plus qu'a trouvé une lib qui gère la lecture AMF3 sinon je vais avoir quelques soucis ahha
Merci encore
 
Haut Bas