Bonjour,
Pour cette sécurité le serveur (modérateur en jeu) envoie un packet contenant un identifiant et un chemin vers un fichier, exemple :
"BC1;loader.swf"
Le job c'est de renvoyer la taille du fichier demandé depuis le répertoire d'installation du jeu + "\resources\app\retroclient\", ici loader.swf.
On renvoie "-1" en taille si le fichier demandé n'existe pas.
Petite spécificité : vous aurez surement remarqué que le fichier demandé est chargé dans un conteneur temporaire, dans la fonction
checkFileSize, c'est pour récupérer la taille du fichier non pas en termes d'octets utilisés pour le stockage, mais la taille du clip chargé. C'est cette taille qu'il faut envoyer.
En examinant un SWF en hexa, on se rend compte que les magic_bytes sont 0x43 0x57 0x53 (CWS)
Suivi par l'octet d'offset 3 qui indique la version du SWF 0x08 pour la version 8 par exemple.
Les 4 octets suivants (offset 4, 5, 6 et 7) déterminent la taille du clip (en little-endian) ^_^
0x25 0x00 0x56 0x00
En retournant on a 0x00 0x56 0x00 0x25, ce qui donne 5 636 133 en décimal soit la taille du clip (en octets), celle à envoyer en réponse. https://prnt.sc/25mn50y (en date du 02/01/2022)
Bien différent de la taille du fichier https://prnt.sc/25mnf5q
Donc on vérifie si le fichier demandé existe, si pas, réponse "BC[ID];-1"
Si existe, on ReadAllBytes, on skip les 4 premiers, on prend les 4 suivants et on met ça dans un Array.
Enfin, on converti pour obtenir la size.
En C# cela donne :
byte[] fileBytes = File.ReadAllBytes("path_to_file").Skip(4).Take(4).ToArray();
int trueFileSize = BitConverter.ToInt32(fileBytes, 0);
Bien avoir le jeu à jour bien sur ;)