(1) Existe t il ou est il envisageable d'avoir un mode qui permete de découper un fichier dont le debut n'est pas connu ?
Oui ! Hé hé hé. Je me suis essayé à la rétro-ingénierie, et j'ai noté des motifs particuliers. J'ai écrit un algo pour reconnaitre l'organisation utilisée dans le format PNG par exemple :
(entête de 64 octets max)
bloc 1 : (entête entre 0 et 20 octets)(taille)(données)
bloc 2 : (entête, même taille)(taille)(données)
bloc 3 : (entête, même taille)(taille)(données)
...
La taille étant un entier, signé ou non, d'un taille de 8, 16 ou 32 bits.
Bref oui, c'est de la "brute force", et ça marche plutôt bien ! (testé avec succès sur le format Worms2 DIR et PNG) En plus c'est très rapide (moins d'une seconde je crois bien) ;-)
Si ça t'intéresse, je vais refaire fonctionner le code que j'avais écrit. C'est le fichier "reverse.py" qui contient des trucs comme ça.
(2) [est il] possible de gérer des formats de fichiers dont la présence de certains champs (ou groupe de champs) est optionelle, ou encore dépend de la valeur d'un champ précédent ?
Bien sûr ;-) J'ai justement fait un gros travail là-dessus. C'était un des objectifs à remplir. Ca pourrait être un CRC32 recalculé lors de l'enregistrement, des champs qui sont supprimés quand on modifie un flag, ou un champ qui est ajouté quand on modifie un autre drapeau.
D'ailleurs, mes essais sur l'écriture ont été fait sur le format Gzip : lorsqu'on assigne la valeur "True" au champ "has_comment", un événement est déclanché qui va insérer un nouveau champ.
Je prévois un peu tout et n'importe quoi comme événement : champ déplacé, champ redimensionné, champ modifié, nouveau champ, etc. Après, il faut écrire le code qui gère tous les cas ... c'est pas gagné :-P
[^] # Re: bruteforce
Posté par Victor STINNER (site web personnel) . En réponse au journal Nouvelles du programme Hachoir. Évalué à 4.
Oui ! Hé hé hé. Je me suis essayé à la rétro-ingénierie, et j'ai noté des motifs particuliers. J'ai écrit un algo pour reconnaitre l'organisation utilisée dans le format PNG par exemple :
La taille étant un entier, signé ou non, d'un taille de 8, 16 ou 32 bits.
Bref oui, c'est de la "brute force", et ça marche plutôt bien ! (testé avec succès sur le format Worms2 DIR et PNG) En plus c'est très rapide (moins d'une seconde je crois bien) ;-)
Si ça t'intéresse, je vais refaire fonctionner le code que j'avais écrit. C'est le fichier "reverse.py" qui contient des trucs comme ça.
(2) [est il] possible de gérer des formats de fichiers dont la présence de certains champs (ou groupe de champs) est optionelle, ou encore dépend de la valeur d'un champ précédent ?
Bien sûr ;-) J'ai justement fait un gros travail là-dessus. C'était un des objectifs à remplir. Ca pourrait être un CRC32 recalculé lors de l'enregistrement, des champs qui sont supprimés quand on modifie un flag, ou un champ qui est ajouté quand on modifie un autre drapeau.
D'ailleurs, mes essais sur l'écriture ont été fait sur le format Gzip : lorsqu'on assigne la valeur "True" au champ "has_comment", un événement est déclanché qui va insérer un nouveau champ.
Je prévois un peu tout et n'importe quoi comme événement : champ déplacé, champ redimensionné, champ modifié, nouveau champ, etc. Après, il faut écrire le code qui gère tous les cas ... c'est pas gagné :-P
Haypo