30

Lionel Debroux (./27) :
La modif de l'adresse de base fait apparaître un autre truc dans le désassemblage: qu'y a-t-il à 119cdxxx (voir l'extrait de ./16), puisque le boot2 ne va que jusqu'à 11997944 ?

J'ai vu plusieurs adresses hors boot de ce type, je ne sais plus vers quelle plage exactement.
squalyl (./26) :
protip: le boot2 est vérifié par le boot1. Il me semble.

C'est bien le cas, à son chargement.

31

Et en modifiant justement une des strings "test" en "toto" (en gardant la même taille dans un premier temps), le renvoi du boot2 fonctionne ou pas ?
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

32

J'avais testé la modification de quelques octets au hasard, donc probablement pas.

33

Pour faire comme si ça avançait : le sprintf est à l'adresse 0x118558B8 cheeky

34

\o/ cheeky (l'est quand même fort, ce ExtendeD hehe)

35

Le sprintf gère-t'il %n? Si oui, y a-t'il des vulnerabilités de chaînes de formatage quelque part?
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

36

Pen^2 (./34) :
l'est quand même fort, ce ExtendeD hehe

D'un autre côté, vu la tête de l'adresse, c'était forcément un sprintf embarrassed

bravo Extended grin

37

/documents/Developer Unit/devunit.cer.tns
/phoenix/cert/devunit.cer.tns
un moyen d'avoir ses propres certificats ?


On peut trouver facilement des fonctions de la libc:
free 0x11854E90
malloc 0x11854E9C
fclose 0x1185634C
fopen 0x11856590
fread 0x118566CC
fwrite 0x11856A80

Il y a vraiment beaucoup de choses dans ce boot2.

38

Et surtout des choses qui doivent se retrouver telles quelles dans l'OS.
hwti (./37) :
On peut trouver facilement des fonctions de la libc:

Est-ce que tu peux revérifier les adresses de free et fopen ? Il semble y avoir une coquille.
hwti (./37) :
un moyen d'avoir ses propres certificats ?

Il y a un truc qui m'échappe ou je lis de travers :
Je suppose que la fonction à 0x11801574 correspond à "check_if_dev_unit". Elle contient simplement MOV R0, #0 (désactivé en dur).
Elle est appelée en plein milieu de la séquence de startup à 0x11801264 (séquence qui donne d'ailleurs un sens à pas mal de fonctions grâce au chaînes de log RS232).
Pourtant après l'appel :
ROM:11801264                 BL      check_if_dev_unit ; disabled at factory
ROM:11801268                 CMP     R0, #0
ROM:1180126C                 BEQ     loc_1180143C    ; Configuring as dev unit
...
ROM:1180143C                 BL      configure_dev_unit
ROM:11801440                 LDR     R0, =aConfiguringAsA ; "Configuring as a developer unit."
ROM:11801444
ROM:11801444 loc_11801444                            ; DATA XREF: ROM:119905A0o
ROM:11801444                 BL      log_rs232___

Les logs RS232 ne contiennent pourtant évidemment pas "configuring as a developer unit", et vu la tête de check_if_dev_unit le beq est actif.

39

Kevin Kofler (./35) :
Le sprintf gère-t'il %n? Si oui, y a-t'il des vulnerabilités de chaînes de formatage quelque part?

En regardant rapidement non (en tout cas pas comme un CMP R3, #0x25 ; '%' ou CMP R3, #0x75 ; 'u').

40

ExtendeD (./38) :
Les logs RS232 ne contiennent pourtant évidemment pas "configuring as a developer unit", et vu la tête de check_if_dev_unit le beq est actif.

J'ai de vagues souvenirs d'ARM, pour affecter les flags il y a une extension sur l'instruction, non ? Là le cmp n'en a pas (mais bon, c'est un CMP, je te l'accorde grin)
Je suppose que CMP n'en a pas besoin, mais après tout, je tente triso

41

ExtendeD (./38) :
Et surtout des choses qui doivent se retrouver telles quelles dans l'OS.


Je ne serais pas surpris si il s'agissait en fait de tout l'OS, et que le reste ne soit que des libs/applis.
ExtendeD (./38) :
Est-ce que tu peux revérifier les adresses de free et fopen ? Il semble y avoir une coquille.

Effectivement, édité

42

il a pas dit que le boot2 etait tout l'OS (meme si ça pourrait) mais que les fonction utilisé pourrait etre les meme
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

43

Pen^2 (./40) :
Je suppose que CMP n'en a pas besoin, mais après tout, je tente triso.gif

Presque mais non : http://www.heyrick.co.uk/assembler/cmp.html#cmp
Obviously you do not need to explicitly specify the S suffix as the point of the command is to update the status flags... If you do specify it, it will be ignored.

44

Godzil (./42) :
il a pas dit que le boot2 etait tout l'OS (meme si ça pourrait) mais que les fonction utilisé pourrait etre les meme

Quand on voit que la moitié du boot est squatté par du FlashFX et Reliance ([1]), c'est vrai que ce serait idiot de retrouver la même chose dans l'OS, mais bon c'est TI.

45

bah, regarde linux, tu as une forme de duplication du code entre le kernel et grub (par exemple), donc bon, c'est possible
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

46

hwti (./37) :
On peut trouver facilement des fonctions de la libc:

Donc ce bout de code que je ne comprenais pas prend son sens :

log_rs232 à 11855078 fait un sprintf puis un fwrite avec comme FILE* l'adresse 0x119FB35C ( hum) [edit : qui ne semble jamais initialisé - ou par boot1 ?]

47

ExtendeD (./38) :
Les logs RS232 ne contiennent pourtant évidemment pas "configuring as a developer unit", et vu la tête de check_if_dev_unit le beq est actif.


Il y a un test plus haut
ROM:11801208 BL sub_11801B18
ROM:1180120C CMP R0, #0
ROM:11801210 BNE loc_11801260

En regardant rapidement sub_11801B18 :
on ouvre /phoenix/cert/devunit.cer.tns (appel de sub_118018C8)
sinon on essaye /documents/Developer Unit/devunit.cer.tns on le copie vers /phoenix/cert/devunit.cer.tns en cas de réussite

48

Avec un peu de chance /Developer Unit/devunit.cer.tns du protocole USB ( http://hackspire.unsads.com/wiki/index.php/USB_Protocol#Sending_a_file ) correspondrait à /documents/Developer Unit/devunit.cer.tns du système de fichier ? devil (et on aurait alors pas bossé complètement pour rien avec roms sur l'USB)

49

bah ya des chances ^^
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

50

ExtendeD (./46) :
log_rs232 à 11855078 fait un sprintf puis un fwrite avec comme FILE* l'adresse 0x119FB35C ( hum.gif ) [edit : qui ne semble jamais initialisé - ou par boot1 ?]


Initialisé dans 0x11859750 posix_file_init (nom donné par une trace)
0x119FB310 stdin ?
0x119FB35C stdout
0x119FB3A8 stderr ?

0x11858B88 open
0x11857EA4 close
0x118599E8 read
0x1185A4C4 write
0x118589F8 mkdir

fonctions écrites par TI grin (enfin je n'en sais rien mais elles ne sont pas très optimisées)
0x11856CCC memcpy
0x11856C8C memcmp
0x11856D54 memset
0x11856DD4 strchr
0x11856E00 strcmp (implémentation étrangement mauvaise, je me demande quel compilateur a produit ça)
0x11856E40 strlen

51

ExtendeD (./39) :
Kevin Kofler (./35) :
Le sprintf gère-t'il %n? Si oui, y a-t'il des vulnerabilités de chaînes de formatage quelque part?

En regardant rapidement non (en tout cas pas comme un CMP R3, #0x25 ; '%' ou CMP R3, #0x75 ; 'u').

C'est %n qui m'intéresse, pas %u!
http://en.wikipedia.org/wiki/Format_string_attack
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

52

D'après le contenu de la jump table à 11855a70, le handler de %n est à 1185606c:
1185606c:	e51b1080 	ldr	r1, [fp, #-128]
11856070:	e51b30b4 	ldr	r3, [fp, #-180]
11856074:	e063000a 	rsb	r0, r3, sl
11856078:	e2813004 	add	r3, r1, #4	; 0x4
1185607c:	e50b3080 	str	r3, [fp, #-128]
11856080:	e5912000 	ldr	r2, [r1]
11856084:	e5820000 	str	r0, [r2]
11856088:	eaffff90 	b	0x11855ed0

Vers le début de la fonction, on trouve:
118558d0:	e50b00b4 	str	r0, [fp, #-180]
118558d4:	e3540000 	cmp	r4, #0	; 0x0
118558d8:	e3a00000 	mov	r0, #0	; 0x0
118558dc:	e50b1090 	str	r1, [fp, #-144]
118558e0:	e50b2080 	str	r2, [fp, #-128]

c'est à dire que:
[ul][li]les 4 octets à -180(fp) sont le premier argument, "str", de sprintf (une seule écriture, plusieurs loads);[/li]
[li]les 4 octets à -144(fp) sont la format string (plusieurs loads et stores, avec au passage des incrémentations de la valeur, entre autre à travers des loads post-incrémentés);[/li]
[li]les 4 octets à -128(fp) sont la valeur courante du pointeur utilisé pour se déplacer dans les arguments de la partie varargs (plusieurs load+incrémentation+store).[/li][/ul]

Il n'y a que 7 sites d'appel (directs, du moins) pour sprintf: 11854f38 (2 fois), 11854ff8, 11855078 (mentionné en ./46), 11951b60, 11951bec (2 fois).
Aucune chaîne >= 2 caractères du boot2 ne comprend les octets '%n'.
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

53

D'autres fonctions:
0x11856E68 strncmp
0x11856EC8 strncpy
0x11856F24 strpbrk
0x11856F64 strrchr
0x11856F8C char * memrev(char *buf, size_t count);
0x11857A44 strcpy

54

Bien smile

Est-ce que quelqu'un poste tout ça sur hackspire ?
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

55

Il y aurait moyen de se partager ça facilement entre databases IDA ?

56

ExtendeD (./55) :
Il y aurait moyen de se partager ça facilement entre databases IDA ?

Je n'ai pas trouvé de manière directe, mais on peut créer manuellement des fichiers IDC de la forme
static main()
{
	MakeNameEx(0x11856E68, "strncmp", 0);
}

qu'on peut importer par File|IDC file...

57

Joint à "File -> Produce -> Dump database to IDC file" c'est jouable.

58

59

ExtendeD (./57) :
Joint à "File -> Produce -> Dump database to IDC file" c'est jouable.

J'espère que ça n'écrase pas ce qu'on a en local, en faisait des diffs pour réduire la taille ça semble pas mal

60

En attendant, des fonctions/const de zlib (je ne sais pas si ça nous servira, mais au moins on sait qu'on n'a pas besoin de regarder ces fonctions)
0x1192E8A8 inflate
0x1192FFE4 inflateEnd
0x11930054 inflateSetDictionary
0x11930158 inflateGetHeader
0x119301A0 syncsearch
0x11930204 inflateSync
0x1193033C inflateSyncPoint
0x1193038C inflateCopy
0x1192E760 updatewindow
0x11978E68 lenfix
0x11979668 distfix
0x1192E734 fixedtables
0x1192E724 inflateInit_
0x1192E614 inflateInit2_
0x1192E5BC inflatePrime
0x1192E538 inflateReset
0x1192E44C crc32_combine
0x1192E410 gf2_matrix_square
0x1192E3E4 gf2_matrix_times
0x1192E3A8 crc32
0x1192DC54 crc32_little
0x1192DF88 crc32_big
0x1192DC48 get_crc_table
0x11930F4C inflate_fast
0x11979A84 z_errmsg
0x11930B20 zError
0x11930B0C zlibVersion
0x11930B18 zlibCompileFlags
0x11976E68 crc_table
0x119304E8 inflate_table
0x11930B34 zcalloc
0x11930B3C zcfree
0x11930B54 adler32