Suite de
./99 : je n'arrive pas à sortir la clé Blowfish de ce machin obfuscé, j'ai beau tourner le truc dans tous les sens avec OpenSSL.
Mais comme certains morceaux de load_os peuvent être simulés sans problèmes avec GDB,
l'OS est maintenant décrypté 
La recette, en partant d'un boot2.bin décompressé et d'un TI-Nspire.img issu d'un upgrade d'OS :
- Installer
YAGARTO GNU ARM Chain --change-addresses 0x11800000 boot2.bin boot.elf
- Convertir le boot 2 décompressé au format ELF :arm-elf-objcopy.exe -I binary -O elf32-littlearm - Extraire le champ de certificat
8070 de
TI-Nspire.img vers un fichier
os_encrypted.bin- Lancer GDB : arm-elf-gdb
- Lancer les commandes suivantes de GDB, qui exécutent la fonction de décryptage lors du chargement de TI-Nspire.img par le boot 2 :
# GDB setup
file boot2.elf
target sim
load boot2.elf
break *0x11800000
display/i $pc
run
# OS code (dummy address)
set $r0=0x20000
# size of os_encrypted.bin (v1.7, .tno)
set $r1=3417512
# boolean (?)
set $r2=1
# key selector
set $r3=0x119538f9
# stack
set $r11=0x8000
# blowfish_decrypt
set $pc=0x11802618
restore os_encrypted.bin binary 0x20000
# may take a few seconds...
advance *0x1180261C
# $r0: size decrypted
dump memory os_decrypted.zip 0x20000 0x20000+$r0
- Extraire
phoenix.raw de
os_decrypted.zip- Comme indiqué dans le champ de certificat
8080, la base address est 0x10000000.
- Laisser mouliner l'IDA, et explorer les milliers de petits maillons faibles.
(Ce n'est pas dans notre intérêt de faire trop de bruit sur le sujet, le boot 2 est modifiable par TI, même si l'absence de clé de cryptage écrite en NOR à l'usine n'est maintenant plus rectifiable par TI).