Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Champ BLOB WDZIP10


Sujet :

WinDev

  1. #1
    Expert éminent sénior
    Champ BLOB WDZIP10
    Bonjour,

    Je dois récupérer des données dans une application WinDEV qui utilise une base MySQL...je pensais pouvoir m'en sortir facilement (sans WinDev), mais je trouve des champs BLOB qui contiennent des données binaires préfixées par "WDZIP10"

    je suppose que c'est le format ZIP à la sauce WinDev...est-ce que le format est connu, je suppose que quelque part là dedans j'ai du Inflate avec une entête spécifique WinDev; ou existe-il au moins un outils en ligne de commande que je puisse lancer pour déziper les données sur disque ?

    Merci
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  2. #2
    Expert éminent
    Bonjour,

    Oui, WDZIP est un utilitaire de compression de fichiers à la sauce Windev. Les informations sur ce soft sont ici : https://doc.pcsoft.fr/?3527005

    Je ne pense pas qu'il existe un système de ligne de commande.

    Cerise sur le gâteau, l'outil n'est pas redistribuable.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Make it real not fantasy.

  3. #3
    Expert éminent sénior
    Oui, j'ai installé une version démo et j'ai vu leur outil qui sait en effet lire les données

    de ce que j'ai vu, le format du fichier est assez basique surtout que je n'ai qu'un fichier par blob

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    "WDZIP10", 0
    <méthode de compression, 0 = sans, 4 = ? >
    <Taille des données compressées - ou pas - (32bits)>
    <données non compressées - ou - données compressées + taille>
    <description du fichier>
     
    les données compressées contiennent:
    <Taille des données décompressées (32bits)>
    <les données compressées>


    par contre je ne sais pas quel algorithme de compression ils utilisent...manifestement pas quelque chose de très performant, un RTF de 54Ko passe à 20Ko en WDZ, 10Ko en ZIP et 9Ko en GZ

    du coup je suis bien embêté
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Expert éminent
    Comme c'est un algorithme maison, la solution est, je pense, de passer par programme.

    Effectivement, leur algorithme de compression n'est pas top. Je crois qu'il l'ont créé initialement pour leur installeur, pour "agglomérer" les fichiers donc. Puis, ils ont dû l'ouvrir pour que les développeurs puissent regarder ce qu'il y a dedans...
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Make it real not fantasy.

  5. #5
    Membre habitué
    Citation Envoyé par Paul TOTH Voir le message

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    "WDZIP10", 0
    <méthode de compression, 0 = sans, 4 = ? >
    <Taille des données compressées - ou pas - (32bits)>
    <données non compressées - ou - données compressées + taille>
    <description du fichier>
     
    les données compressées contiennent:
    <Taille des données décompressées (32bits)>
    <les données compressées>


    par contre je ne sais pas quel algorithme de compression ils utilisent...manifestement pas quelque chose de très performant, un RTF de 54Ko passe à 20Ko en WDZ, 10Ko en ZIP et 9Ko en GZ

    du coup je suis bien embêté
    Tu as presque tout! L'algo est un simple: LZW

  6. #6
    Expert éminent sénior
    oui ça doit être quelque chose comme ça...mais je viens de tester avec https://sourceforge.net/projects/lzw/, je n'obtiens pas la même compression

    ça m'agace...voici ce que donne un WDZ pour un fichier comprenant 80 fois le même caractère


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    80 x '@' 1000000
    00 00 41 04 0e 24 58 d0 e0-41 84 09 15 2e 64 28
     
    80 x 'A' 1000001
    00 00 42 04 0e 24 58 d0 e0-41 84 09 15 2e 64 28
     
    80 x 'B' 1000010
    00 00 43 04 0e 24 58 d0 e0-41 84 09 15 2e 64 28
     
    80 x 'U' 1010101
    00 00 56 04 0e 24 58 d0 e0-41 84 09 15 2e 64 28
     
    80 x '*' 0101010
    00 00 2b 04 0e 24 58 d0 e0-41 84 09 15 2e 64 28
     
    @ 01000001.00000100000011100010010001011000110100001110000001000001100001000000100100010101001011100110010000101000
    A 01000010.00000100000011100010010001011000110100001110000001000001100001000000100100010101001011100110010000101000
    B 01000011.00000100000011100010010001011000110100001110000001000001100001000000100100010101001011100110010000101000
    U 01010110.00000100000011100010010001011000110100001110000001000001100001000000100100010101001011100110010000101000
    * 00101011.00000100000011100010010001011000110100001110000001000001100001000000100100010101001011100110010000101000


    je ne comprend pas le découpage...en LZW je devrais avoir "le caractère",256,257,258,259,260,261,262,263,264,265,266,267,259
    donc une séquence de 14 codes, soit 14 x 9 = 126 bits

    ça colle presque mais je n'arrive pas à trouver le découpage des bits...la nuit porte conseille, au lit !
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Membre habitué
    Oui, presque.
    Sauf que évidement c'est une implémentation à la PCSoft/Windev!
    Donc l'index commence à 1 et pas 0.
    D’où le @ que devient 0x41 et pas 0x40.

    Après pour comparer avec d'autre soft de compression,PCSoft :
    - ne rajoute pas la taille du buffer non compresser au début (contrairement au autre implémentation en général)
    - poids fort en premier

    Je pense que avec c'est info ça devrait être bon.

  8. #8
    Expert éminent sénior
    oh Yes !!! en fait ils stockent l'index + 1, les cons

    j'ai encore un truc qui coince mais j'ai bien le début de décodage de ma séquence

    Merci
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  9. #9
    Expert éminent sénior
    Ok, je résume pour ceux qui voudraient aussi déziper un WDZ

    Fichier WDZ:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    "WDZIP10", 0
    <fichiers compressés>
    <info sur les fichiers>


    Fichier compressé
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Methode sur 1 octet (4 = WDZIP, 0 = stored)
    <taille des données sur 32bits>
    <données compressées ou données brutes>


    Données compressées
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <taille décompressée sur 32bits>
    <zero sur 2 octets (ou taille sur 48bits ?)>
    <LZW sur 9bits avec des valeurs incrémentées de 1 !>


    pour la décompression LZW, on a donc un dictionnaire (1 => 0, 2 => 1, ... 256 => 255)
    il faut lire les valeurs sur 9bits au départ (étendre à 10, 11, 12 ... quand la taille du dictionnaire ne tient plus sur le nombre de bits)
    le code 257 est un reset du dictionnaire
    le code 0 ne serait jamais utilisé du coup

    pour les infos sur les fichiers je n'ai pas le détail, ni de méthode bien claire sur comment on passe de la compression aux infos, mon hypothèse est qu'on a
    <nombre de fichiers sur 32bits>,66
    comme indicateur de fin

    EDIT: ce n'est pas toujours 66...la logique doit être ailleurs

    donc sur 48bits, on a soit <méthode de compresssion sur 8 bits>+<taille sur 32bits>, soit <nombre de fichiers sur 32bits>+<un octet = 66>

    pour les infos sur le fichier je ne sais pas trop, mais ce sont des données variables

    après le 66 on a 3 fois 0

    ensuite la taille décompressée du 1er fichier sur 32 bits
    taille compressée + 11 (taille entête) sur 32 bits
    28 octets inconnus dont la date du fichier (EDIT:je pense que ce sont les dates de création, modification, et les attributs du fichier)
    le nom terminé par 0 (taille variable)
    18 octets inconnus à 0
    une valeur sur 32bits inconnue

    et la même chose pour chaque fichier
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  10. #10
    Membre régulier
    Citation Envoyé par Paul TOTH Voir le message

    ...
    ensuite la taille décompressée du 1er fichier sur 32 bits
    taille compressée + 11 (taille entête) sur 32 bits
    28 octets inconnus dont la date du fichier (EDIT:je pense que ce sont les dates de création, modification, et les attributs du fichier)
    le nom terminé par 0 (taille variable)
    18 octets inconnus à 0
    une valeur sur 32bits inconnue
    ...
    bonjour,

    je pense que cette partie doit correspondre à :
    Le nom du fichier et son chemin mémorisé.
    La taille originale du fichier.
    La taille compressée du fichier.
    La date et l'heure de création du fichier.
    La date et l'heure de modification du fichier.
    La date et l'heure d'accès du fichier.
    Les attributs du fichier.
    Le mode de cryptage du fichier.

    à remettre dans l'ordre, je ne suis pas un spécialiste du "découpage de fichier en bits"

    néanmoins pourquoi vouloir faire de la rétro-ingénierie sur un format uniquement utiliser par les outils PCSoft ?
    Cordialement JeAn-PhI

  11. #11
    Expert éminent sénior
    Citation Envoyé par JeAn-PhI Voir le message

    néanmoins pourquoi vouloir faire de la rétro-ingénierie sur un format uniquement utiliser par les outils PCSoft ?
    Tout simplement car je fais une récupération de données sur une base MySQL alimentée par un logiciel développé sous WinDev qui a compressé certains champs BLOB en WDZIP.

    En fait je n'ai pas besoin des détails ci-dessus, le champ ne contient qu'un seul fichier et je peux me contenter de décompressé le premier flux, mais tant que j'y étais j'ai regardé un peu plus le format qui est non documenté sur le net
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store