Flanker's Home page

UN PEU PLUS D'INFOS SUR LES CERTIFICATS D'APPLICATIONS FLASH

Aucune donnée n'est alignée sur une adresse paire, même celles qui sont codées sur un word ou sur un longint !!!

Un certificat est constitué de différents champs alignés les uns à la suite des autres. Cette structure est récursive, i.e. un champ peut contenir plusieurs sous-champs.
Les deux premiers octets d'un champs indiquent sa nature et sa taille, ensuite il y a la valeur du champ lui même.
On va supposer que a0.l pointe vers le premier octet du certificat
En hexadécimal, ces deux octets s'écrivent xyzt (on a donc xy = (a0) et zt = 1(a0) ).
    xyz0 indique le type du champ
    pour la taille de ce champ, c'est un peu plus compliqué :   
        si t = $F, l'offset O est codé sur 32bits : O =2(a0) * $1000000 + 3(a0) * $10000 + 4(a0) * $100 + 5(a0)
        si t = $E, l'offset O est codé sur 16bits : O = 2(a0) * $100 + 3(a0)
        si t = $D, l'offset O est codé sur 8bits :O = 2(a0)
        si t <= $C, l'offset O est codé sur 4bits : O = 1(a0) AND $0F


On va prendre des exemples, pris sur ma Voyage 200 :

J'ai mis des [ et des ] pour mettre en valeurs les chiffres qui vont ensemble (un champ)

CMDPOST

$340000    [81   0F    00    00    84    D8]  [[81    12    ;$810F = application flash (810F) codée sur t bytes, t tenant sur un longint (810F)
$340008    01    01]  [81    21   00 [81     31    00]        ;$8121 = numéro de version (8121) codé sur 1 byte (8121)
                                                                                        ;$8131 = build number ? (8131) codé sur 1 byte (8131)
$340010    [81   47    'C'    'M'   'D'    'P'    'O'    'S'            ;$8147 = nom interne (8147) codé sur 7 chars (8147)
$340018    'T']  [03    26    09    04    0B    5B    FD        ; date ($0326) codée sur 6 chars ($0326)
$340020    FB] [02    0D   40    **    **     **     **        ; clé MD5 (020D) codé sur t bytes, t tenant sur un byte (020D)
....              **    **    **    **    **    **     **    **]    ; $40=64 octets de ***  (indépendants de la calc, mais pas de l'app flash)
$340064    [81   7F    00    00    84    74]   [[16    7B
$34006C   53    3D ** ** **]                                                   ; $167B533D permet d'identifier comme étant une app. Présent sur toutes les app
.... là il y a le AppHdr puis l'app en elle-même
$3484DE  ]] [02    0D    40   **    **    **    **    **]    ;$3484DE = $340000 + (2+4) +$000004D8 (1er champ du certificat à$340000)
                                                                                            ; clé MD5 (020D) codé sur t bytes, t tenant sur un byte (020D)
$348521    FF                                                                 ; $348521 = $3484DE + (2+1) + $40 (champ à $3484DE)
                                                le $FF signalerait la fin du certificat



L'app est finie et c'est la suivante :


TISMLTEQ

$348522    [81   0F    00    01    4E    50   [81    12              ;$810F = application flash (810F) codée sur t bytes, t tenant sur un longint (810F)
$34852A   01    01]   [81    21   01]   [81    32     06            ;$8121 = numéro de version (8121) codé sur 1 byte (8121)
                                                                                             ;$8132 = build number ? (8132) codé sur 2 bytes (8132)
$348532    05]  [81    48    'T'    'I'     'S'    'M'   'L'                ;$8148 = nom interne (8148) codé sur 8 chars (8148)
$34853A   'T'    'E'     'Q']  [03   26    09    04    08               ; date ($0326) codée sur 6 chars ($0326)
$348542    F3    21    B4]   [02  0D   40    **    **              ; clé MD5 (020D) codé sur t bytes, t tenant sur un byte (020D)
....              **    **    **    **    **    **     **    **]        ; $40=64 octets de ***  (indépendants de la calc)
$348588     [81  7F    00    01    4D   EA]  [16    7B
$348590     53   3D                                                             ; $167B533D permet d'identifier comme étant une app. Présent sur toutes les app
.... là il y a le AppHdr puis l'app en elle-même
$35D378    [02   0D    40   **    **    **    **    **]        ; $35D378 = $348522 + (2+4) + $00014E50
                                                                                            ; clé MD5 (020D) codé sur t bytes, t tenant sur un byte (020D)
$35D3BB    FF                                                             ; $35D3BB = $35D378 + (2+1) + $40
                                                                       le $FF signalerait la fin du certificat


L'app est finie et c'est la suivante :

TIPOLYRT


$35D3BC    [81   0E    C4   16]  [81   12    01    01]            ;$810F = application flash (810F) codée sur t bytes, t tenant sur un longint (810F)
$35D3C4    [81    21    01]  [81   32    06   05]   [81            ;$8121 = numéro de version (8121) codé sur 1 byte (8121)
                                                                                               ;$8132 = build number ? (8132) codé sur 2 bytes (8132)
$35D3CC    48    'T'     'I'    'P'    'O'    'L'    'Y'    'R                ';$8147 = nom interne (8148) codé sur 8 chars (8148)
$35D3D4    'T']   [03    26   09    04    08    F3    2E            ; date ($0326) codée sur 6 chars ($0326)
$35D3DC   5F]   [02    0D  40    **    **    **    **        ; clé MD5 (020D) codé sur t bytes, t tenant sur un byte (020D)
....                **    **    **    **    **    **     **    **]        ; $40=64 octets de ***  (indépendants de la calc)
$35D420    [81    7E    C3   B2]   [16   7B    53    3D]
....
$3697D6    [02    0D    40    **    **    **    **    **]        ;$3697D6 = $35D3BC + (2+2) + $C416
                                                                                            ; clé MD5 (020D) codé sur t bytes, t tenant sur un byte (020D)
$369819    FF                                                                     ; $369819 = $3697D6 + (2+1) + $40
                                                                           le $FF signalerait la fin du certificat
$36981A FF :               il n'y a plus d'app après !





D'après la doc de TIGCC (que j'ai un peu complétée), on a les champs suivants :
    010n : Certificate revision number
    020n : Signature
    030n : Flash Application certificate
    032n : Product Code
    033n : Flash ROM certificate
    040n : Serial number
    051n : Author name
    070n : Certificate data
    073n : signature
    0A1n : serial number
    0A2n : Certificate Key
    167n : Nom interne d'une flash app
    800n : 1er champ de l'AMS
    801n : 1ère partie du Prod ID de l'AMS
    802n : 3ème partie du Prod ID de l'AMS
    803n : 4ème partie du Prod ID de l'AMS
    804n : Product Name "Advanced Mathematics Software" de l'AMS
    807n : code de l'AMS
    80An : 2ème partie du Prod ID de l'AMS
    810n : 1er champ d'une app flash
    811n : ?
    812n : version
    813n : build number ?
    814n : Internal Name
    817n : début d'une application flash ?