2

J'essaye de désérialiser un ancien format de fichier qui a été sérialisé en Delphi, il utilise une sérialisation binaire. Je ne connais rien à la structure du fichier, sauf quelques enregistrements de très haut niveau qui s'y trouvent.Binary Serialized File - Delphi

Quelles mesures prendriez-vous pour résoudre ce problème? Des outils, etc.?

Répondre

3

Un bon hexadapteur et utilisez la matière grise pour identifier les structures.

Si vous avez une idée du type de fichier, vous pouvez rechercher des outils plus spécialisés.

L'exécution de la commande "fichier" unix/Linux peut être bonne aussi (*) Voir le commentaire de Barry ci-dessous pour savoir comment cela fonctionne. Il peut s'agir d'une vérification rapide des types de fichiers courants tels que DBF, ZIP, etc. masqués en utilisant une extension différente. (*) Il existe des versions tierces pour les fenêtres, mais elles peuvent être décalées dans les versions. Si vous pouvez le faire sur une distribution * nix récente, il est conseillé de le faire.

+0

Que fait exactement la commande "file"? – kyndigs

+1

@kyndigs il utilise une liste de descriptions de formats - normalement des séquences d'octets auxquelles différents formats de fichiers sont supposés commencer - pour essayer d'identifier le format de fichier. Les descriptions de format sont appelées magie, et vous les trouverez dans/etc/magic ou/usr/share/file/magic ou similaire. –

2

Le processus de sérialisation boucle simplement sur toutes les propriétés publiées et transmet leur valeur à un fichier texte. Si vous ne connaissez pas les classes exactes qui ont été diffusées dans le fichier, vous aurez beaucoup de mal à désérialiser le fichier. (si ce n'est pas impossible)

+0

En supposant qu'il était vraiment sérialisé en utilisant des classes VCL. Les flux VCL (tbinarywriter) IIRC contiennent des noms de propriété et un type brut. –

+0

J'ai décompilé l'exe original avec lequel il a été ouvert, et j'ai trouvé une série d'enregistrements condensés qui sont dans le fichier, donc j'ai une idée approximative de ce qui se trouve dans le fichier, ce sera juste un cas. J'ai fait une chose similaire avec les librairies d'images, mais elles ont une sortie visuelle qui a rendu la tâche plus facile et une structure bitmap simple pour chaque image. – kyndigs

+0

Si vous identifiez l'application/le format - peut-être que quelqu'un a déjà ce dont vous avez besoin? –

1

Un bon éditeur hexadécimal est le premier. Si le fichier est lu sans mise en tampon (par exemple lu directement à partir d'un TFileStream), vous pouvez obtenir des informations lors de l'utilisation de ProcMon de SysInternals; Vous pouvez voir exactement quelles données sont lues dans quels morceaux et ainsi déterminer plus rapidement où se trouvent les limites entre les structures que vous avez déjà identifiées.

+0

Hmm, est-ce complètement non tamponné? S'il existe une mise en mémoire tampon, que ce soit dans Delhpi ou dans une couche Windows en dessous de laquelle procmon croise, vous pouvez voir uniquement des fragments de niveau de secteur. –

+0

@Marco: les tampons Windows dans le noyau et ce que vous voyez est l'appel CreateFile, ReadFile, WriteFile IoCtrl etc et ce qui est retourné. –