Buonasera a tutti,
io ho approfittato dei sorgenti che teils ha gentilmente postato per la VPS e ho spulciato un po', senza successo alcuno (non sono capace).
Ci ho passato un po' di tempo e visto che qui mi sembra ci sia qualche utente che conosce l'arte, lascio qui un breve resoconto della strada che ho seguito. Spero faccia comodo, anche se non penso di aver inventato nulla, non ho nessuna esperienza. Conosco poco l'assembler arm, non so nulla su come è organizzata la memoria per linux su arm.
Seguendo un po' le discussioni ho letto che per la VSR esisteva un trucco per ottenere la password dell'utente admin dopo il reset, poi pare che sia pure stata trovata la password di default, mentre per la VPS ancora niente e il trucco precedente non funziona più (intercettazione traffico tra server vodafone e VSR con fibra e switch con mirroring).
Guardando un po' i file che ci sono nei sorgenti, ho notato che c'è un file V3.5.01.12 GPL\.rootfs\etc\default.xml, e ipotizzo sia la configurazione di default del router.
Questo file xml è crittografato, non so dire come, però visto che sembra la config di default, mi aspetto(avo?) che ci fosse qualche chiave a giro nel router per decifrarlo.
In qualche modo sono arrivato a guardare l'eseguibile cmld, che dentro ha la stringa /etc/default.xml. Uno dei punti in cui viene usata chiama la funzione "crypt_decrypt_file2buffer_c" che suona interessante. L'ho trovata nella libreria libsex_crypt.so, e qui ho trovato che questa funzione si prende un descrittore e un puntatore (allocato prima da malloc se ricordo bene), chiama un sacco di funzioni che fanno magie crittografiche, però qui mi sono arenato.
C'è una chiamata alla funzione util_scDrv_get_aes_key che si trova in libutility.so, da qui ho scoperto che in questo router c'è un dispositivo /dev/scDrv che sembra un char device, viene aperto e poi eseguito un ioctl(fd, 0x13, altro). Questo device sembra sia collegato al driver sc_drv.ko, di cui non ho capito come è possibile che non ci siano i sorgenti. Ho trovato anche un header in V3.5.01.12 GPL\user\private\include\sc_drv\sc_drv.h, dove è definito un enum e il parametro 0x13 di ioctl corrisponde a SC_DRV_IOCTL_GET_SEC_AES_KEY, se ho indovinato gli ifdef, ed è ragionevole visto i nomi delle funzioni fin qui trovati. Ho guardato anche il listato del driver sc_drv.ko, credo di aver trovato il punto in cui viene fatto un confronto interessante (cmp r2, 0x13). Da lì, non so più cosa succede e non riesco a capire, viene letto un indirizzo (0x8? O forse 0x8000008), se ci trova 0 finisce a 0x80005a8 e salta su sé stesso... (non capisco se questo significhi piantare il kernel). Altrimenti fa altro ma mi arrendo.
Saluti.
