116Fermer118
ExtendeDLe 07/11/2009 à 23:23
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é smile

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).