Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| fr:decrypter_ryzom_patch [2019/05/15 07:03] – aleajactaest | fr:decrypter_ryzom_patch [2021/12/03 18:19] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 2: | Ligne 2: | ||
| - | {{tag> | ||
| Nous allons expliquer comment décrypter le fichier " | Nous allons expliquer comment décrypter le fichier " | ||
| Ligne 8: | Ligne 7: | ||
| De plus, on retrouve la base de la communication réseau (enfin je pense) | De plus, on retrouve la base de la communication réseau (enfin je pense) | ||
| Par la suite, je vais considéré le fichier comme un document. | Par la suite, je vais considéré le fichier comme un document. | ||
| + | |||
| + | |||
| + | |||
| + | {{INLINETOC}} | ||
| + | |||
| + | ===== Fonction de ce fichier ===== | ||
| + | |||
| + | Ce fichier a pour fonction de lister tous les fichiers contenu dans le patch ainsi que la catégorie pour ces fichiers. | ||
| + | |||
| + | Catégorie permette de désigné si le fichier est complet (ou incrémentale), | ||
| + | |||
| + | Dans les fait, nous avons deux listes. | ||
| + | |||
| + | * Une liste définissant les fichiers (nom, taille, checksum, date de modification) | ||
| + | * Une liste catégorie qui définit le type de fichier (et la liste de fichier dans cette catégorie) | ||
| Ligne 3126: | Ligne 3140: | ||
| === Analyse du fichier bnp_patch.h === | === Analyse du fichier bnp_patch.h === | ||
| - | Ce fichier contient la définition de toute la structure du fichier patch. | + | Ce fichier |
| On commence par la fin pour trouver la structure principale. | On commence par la fin pour trouver la structure principale. | ||
| Ligne 3151: | Ligne 3165: | ||
| - _HashKey | - _HashKey | ||
| - | Résumé du fichier | + | Résumé du fichier |
| < | < | ||
| #include " | #include " | ||
| Ligne 3201: | Ligne 3214: | ||
| }; | }; | ||
| </ | </ | ||
| + | |||
| + | Remarque: | ||
| + | le type " | ||
| + | | ||
| + | Le fichier [code/ | ||
| + | |||
| + | Par exemple pour CBNPFileVersion: | ||
| + | ^Mot de clef ^Type^ | ||
| + | | _VersionNumber | uint32 | | ||
| + | | _FileSize | uint32 | | ||
| + | | _7ZFileSize | uint32 | | ||
| + | | _FileTime | uint32 | | ||
| + | | _PatchSize | uint32 | | ||
| + | | _HashKey | liste de uint32 | | ||
| + | |||
| + | |||
| + | Résumé du fichier : | ||
| + | < | ||
| + | #define PERSISTENT_TOKEN_FAMILY RyzomTokenFamily | ||
| + | |||
| + | #define PERSISTENT_CLASS CBNPFileVersion | ||
| + | #define PERSISTENT_DATA \ | ||
| + | PROP(uint32, | ||
| + | PROP(uint32, | ||
| + | PROP(uint32, | ||
| + | PROP(uint32, | ||
| + | PROP(uint32, | ||
| + | PROP_VECT(uint32, | ||
| + | |||
| + | //# pragma message( PERSISTENT_GENERATION_MESSAGE ) | ||
| + | #include " | ||
| + | |||
| + | #undef PERSISTENT_CLASS | ||
| + | #undef PERSISTENT_DATA | ||
| + | |||
| + | |||
| + | #define PERSISTENT_CLASS CBNPFile | ||
| + | #define PERSISTENT_DATA\ | ||
| + | PROP(std:: | ||
| + | STRUCT_VECT(_Versions) | ||
| + | |||
| + | //# pragma message( PERSISTENT_GENERATION_MESSAGE ) | ||
| + | #include " | ||
| + | |||
| + | #undef PERSISTENT_CLASS | ||
| + | #undef PERSISTENT_DATA | ||
| + | |||
| + | |||
| + | #define PERSISTENT_CLASS CBNPFileSet | ||
| + | #define PERSISTENT_DATA\ | ||
| + | STRUCT_VECT(_Files) | ||
| + | //# pragma message( PERSISTENT_GENERATION_MESSAGE ) | ||
| + | #include " | ||
| + | |||
| + | #undef PERSISTENT_CLASS | ||
| + | #undef PERSISTENT_DATA | ||
| + | |||
| + | |||
| + | #define PERSISTENT_CLASS CBNPCategory | ||
| + | #define PERSISTENT_DATA\ | ||
| + | PROP(std:: | ||
| + | LPROP(bool, | ||
| + | LPROP(std:: | ||
| + | LPROP(bool, | ||
| + | LPROP(std:: | ||
| + | LPROP(bool, | ||
| + | PROP_VECT(std:: | ||
| + | |||
| + | //# pragma message( PERSISTENT_GENERATION_MESSAGE ) | ||
| + | #include " | ||
| + | |||
| + | #undef PERSISTENT_CLASS | ||
| + | #undef PERSISTENT_DATA | ||
| + | |||
| + | |||
| + | #define PERSISTENT_CLASS CBNPCategorySet | ||
| + | #define PERSISTENT_DATA\ | ||
| + | STRUCT_VECT(_Category) | ||
| + | //# pragma message( PERSISTENT_GENERATION_MESSAGE ) | ||
| + | #include " | ||
| + | |||
| + | #undef PERSISTENT_CLASS | ||
| + | #undef PERSISTENT_DATA | ||
| + | |||
| + | |||
| + | #define PERSISTENT_CLASS CProductDescriptionForClient | ||
| + | #define PERSISTENT_DATA\ | ||
| + | STRUCT(_Files)\ | ||
| + | STRUCT(_Categories) | ||
| + | |||
| + | //# pragma message( PERSISTENT_GENERATION_MESSAGE ) | ||
| + | #include " | ||
| + | |||
| + | #undef PERSISTENT_CLASS | ||
| + | #undef PERSISTENT_DATA | ||
| + | </ | ||
| + | |||
| + | Dans le fichier [code/ | ||
| + | < | ||
| + | #define PROP(type, | ||
| + | #define LPROP(type, | ||
| + | #define PROP_VECT(type, | ||
| + | #define STRUCT(varName) _STRUCT(__Tok## | ||
| + | #define STRUCT_VECT(varName) _STRUCT(__Tok## | ||
| + | |||
| + | |||
| + | |||
| + | #ifdef PERSISTENT_TOKEN_FAMILY | ||
| + | |||
| + | //#pragma message( "Using token family " | ||
| + | |||
| + | // setup some macros for constructing the classname and object name that we need for | ||
| + | // the ' | ||
| + | #define _EVAL(b,c) b##c | ||
| + | #define _BUILD_TOKENS_CLASSNAME(c) _EVAL(c, | ||
| + | #define _BUILD_TOKENS_OBJNAME(c) _EVAL(c, | ||
| + | |||
| + | // setup the class name and object name for the ' | ||
| + | #ifdef PERSISTENT_TOKEN_CLASS | ||
| + | #define _TOKENS_CLASSNAME _BUILD_TOKENS_CLASSNAME(PERSISTENT_TOKEN_CLASS) | ||
| + | #define _TOKENS_OBJNAME _BUILD_TOKENS_OBJNAME(PERSISTENT_TOKEN_CLASS) | ||
| + | #else | ||
| + | #define _TOKENS_CLASSNAME _BUILD_TOKENS_CLASSNAME(PERSISTENT_CLASS) | ||
| + | #define _TOKENS_OBJNAME _BUILD_TOKENS_OBJNAME(PERSISTENT_CLASS) | ||
| + | #endif | ||
| + | |||
| + | |||
| + | // define the set of tokens required by this class | ||
| + | // adding them to some pre-defined token family | ||
| + | struct _TOKENS_CLASSNAME | ||
| + | { | ||
| + | // the ctor is used to setup the values of the static tokens | ||
| + | _TOKENS_CLASSNAME() | ||
| + | { | ||
| + | #define _ADD_TOKEN(token) CPdrTokenRegistry:: | ||
| + | |||
| + | __Tok__MapKey= _ADD_TOKEN(" | ||
| + | __Tok__MapVal= _ADD_TOKEN(" | ||
| + | #define _PROP(token, | ||
| + | #define _STRUCT(token, | ||
| + | #define _PROP_MAP(token, | ||
| + | #define _STRUCT_MAP(token, | ||
| + | #define _FLAG(token, | ||
| + | PERSISTENT_DATA | ||
| + | #undef _PROP | ||
| + | #undef _STRUCT | ||
| + | #undef _PROP_MAP | ||
| + | #undef _STRUCT_MAP | ||
| + | #undef _FLAG | ||
| + | |||
| + | #undef _ADD_TOKEN | ||
| + | } | ||
| + | |||
| + | // define the set of static variables to act as constants for stocking the set of tokens for this persistet data class | ||
| + | uint16 __Tok__MapKey; | ||
| + | uint16 __Tok__MapVal; | ||
| + | #define _PROP(token, | ||
| + | #define _STRUCT(token, | ||
| + | #define _PROP_MAP(token, | ||
| + | #define _STRUCT_MAP(token, | ||
| + | #define _FLAG(token, | ||
| + | PERSISTENT_DATA | ||
| + | #undef _PROP | ||
| + | #undef _STRUCT | ||
| + | #undef _PROP_MAP | ||
| + | #undef _STRUCT_MAP | ||
| + | #undef _FLAG | ||
| + | }; | ||
| + | static _TOKENS_CLASSNAME _TOKENS_OBJNAME; | ||
| + | |||
| + | #undef _TOKENS_CLASSNAME | ||
| + | #undef _TOKENS_OBJNAME | ||
| + | |||
| + | #else | ||
| + | |||
| + | #ifdef NL_OS_WINDOWS | ||
| + | #pragma message( " ") | ||
| + | #pragma message( " | ||
| + | #pragma message( " ") | ||
| + | #endif | ||
| + | </ | ||
| + | |||
| + | ==== Vers l' | ||
| + | |||
| + | Pour trouver les autres structures du même type, il suffit de recherche la clef qui active/ | ||
| + | |||
| + | Il faut rechercher " | ||
| + | |||
| + | < | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | code/ | ||
| + | </ | ||
| + | |||
| + | Il suffit de regarder le fichier header (remplacer l' | ||
| + | |||
| + | <WRAP caution> | ||
| + | Soit on utilise une autre structure, soit on utilise la définition coté serveur. | ||
| + | Bref, il faut analyser | ||
| + | </ | ||
| + | |||
| ==== Little endian ==== | ==== Little endian ==== | ||
| + | |||
| little endian : structure des nombres (le poids de plus faible en premier et ainsi de suite) | little endian : structure des nombres (le poids de plus faible en premier et ainsi de suite) | ||
| Ligne 3220: | Ligne 3469: | ||
| | ryzom/ | | ryzom/ | ||
| + | |||
| + | |||
| + | {{tag> | ||





