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 !
|