Resulta complejo hacer un resumen para extraer la aplicación principal y luego recontruirla.
Pero vamos a intentarlo...
Aunque resulte un poco pesado vamos a repasar la estructura de los ficheros .ssu
olvidandonos de todos los datos que no afecten a la aplicación principal.
Nos encontramos 3 posibilidades principales, que son las que todos hemos visto:
all --> Todo el contenido de la FLASH (*.all.ssu).
db --> Solo la base de datos,canales, satelites.. (*.db.ssu).
app --> Solo la aplicación (*.app.ssu)
Los tres tipos tienen un encabezado común de 80 bytes del cual podemos extraer de que tipo
es.
Vender (16 bytes)
Chip (16 bytes)
ProductModel (16 bytes)
AppVersion (16 bytes)
DataLenght (4 bytes)(Al reves si little endian, tamaño del fichero completo)
Start Address (4 bytes)(Al reves si little endian, inicio posición en memoria flash)
DataOffset= (4 bytes)
FileType (2 bytes)
00 00 Boot
01 00 App1 (Es la que buscamos modificar sin actualizar el boot)
02 00 Second Application OTA
03 00 Private Data
04 00 Db
05 00 Backup Db
06 00 Share Bank
07 00 All (Es la que mas nos encontramos, que nos interesa sacar App1)
08 00 Customize
0A 00 DefDb
DbVersion (1 byte)
Endian=81 (1/2 byte) (0 big,8 little endian)
Type (1/2 byte) (0 dvb-s 1 dvb-t 2 dvb-c)
Fichero App1 o All o db, contiene el fichero que realmente va a transferir a la memoria.
Crc (4 bytes) Crc32 custom polinomial 04C11DB7
Esto lo conseguimos con:
ssu2bin e a1 navi_s_326su.flash.gz.gro.stp ssu.txt navi_s_326su.app1.gro.ssu
Donde ssu.txt para engel RS4800S
Novatek
658877
0D0609
0x0000
0x0000
1
2
3
37363
65536
0
a1
0
t
Bloque App1 Chunk, es aplicación principal, siempre va en la posición 0x10000 de la flash.
Como teniamos un header constante lo podemos ver en la posición 0x10050 de los ficheros
all.ssu o bien en la 0x50 de los app.ssu.
Esta App1 o aplicación principal tiene el siguiente encabezado:
A partir de ahora le llamaremos app stamped o navi_s_326su.flash.gz.gro.stp
MagicCode = 0x31415926 (1AY&)
Header=_FEB, _APU, __B1, __BM, DRUN, APP1, APP2, FRAW, DRAW
ModelID=NT78
Version=0x00010001
Attribute=0xaa5500xx (xx=00(none),xx=01(zip data), xx=02(encryption))
SectionLen (4 bytes) (La longitud del fichero)
LoadDramAddr=0x802B0000 (This address get form rom vector address)
EntryPointAddr=0x802B01BC (This address get form reset vector address)
TargetAddr=0x00010000 (En nuestro caso APP1 siempre 0x10000)
FileApp agrupada o group, lo llamaremos navi_s_326su.dram.bin.gz.gro
Crc (4bytes)
Lo obtenemos con:
mk_stamp310 navi_s_326su.dram.bin.gz.gro navi_s_326su.flash.gz.gro.stp "app1" NT78 65537 1
\0x802b0000 \0x802b01bc \0x00010000
FileApp agrupada o group es la suma de dos o tres ficheros con post_link, suma un fichero
comprimido .gz; que llamaremos navi_s_326su.dram.bin.gz mas uno o varios ficheros .ro,las
versiones mas antiguas solo tenían un fichero AudioDSP.ro y las mas modernas se añade
graphdat.ro, que son las bibliotecas multimedia y los graficos del menú respectivamente.
Esta es la aplicación mas díficil de explicar, vamos allá con el header:
"GzRo100a"
numero de ficheros (4 bytes)
"Gz" 0x475A0000 (4bytes)
constante 0x0000000000000000(8 bytes)
tamaño fichero .gz lo llamaremos navi_s_326su.dram.bin.gz( 4 bytes)
constante 0x00000000 (4 bytes)
En el caso de 3 ficheros navi_s_326su.dram.bin.gz + AudioDSP.ro + graphdat.ro
Encabezado fichero AudioDSP.ro (16 bytes)
Posición inicio fichero AudioDSP.ro (4 bytes)
Encabezado fichero graphdat.ro (16 bytes)
Posición inicio fichero graphdat.ro (4bytes)
fichero navi_s_326su.dram.bin.gz
fichero AudioDSP.ro
fichero graphdat.ro
En el caso del firmware antiguo con dos ficheros, podemos seguir el mismo patrón pero sin el
fichero graphdat.ro
En ambos casos para luego recomponer todo, seguiremos el siguiente procedimiento:
Header fichero .ro + 0x00000000 + fichero .ro ; esto es debido a que la aplicación post_link
elimina extrañamente esos 4 bytes, que luego nos harán falta para recomponer la estructura.
Lo obtenemos con:
post_link navi_s_326.gz AudioDSP.ro graphdat.ro
Bueno ya podemos separar los ficheros.
Los ficheros .ro son ficheros que se les ha añadido un encabezado para definirlos y siguen
el siguiente patrón en su estructura.
Name (8 bytes)
Crc (4 bytes)
DataLenght (4 bytes)
Constante 0x00000000 (4 bytes)
Fichero
Lo obtenemos con:
make_ro AudioDSP.gz AudioDSP.ro
No centraremos en el .gz ; navi_s_326su.dram.bin.gz
En los firmware antiguos, simplemente está comprimida con la aplicación zip2006
Para ello lo descomprimimos con:
zip2006 d navi_s_326su.dram.bin.gz navi_s_326su.dram.bin
En los firmware mas modernos la cosa se complica ya que lo cifran con la aplicación filex.
Revertirlo en sencillo con Hexworkshop, seleccionamos de la dirección 0x10000 a 0xFFFFF le
damos a tools, operations,xor y ponemos 32bit unasigned long, hex,selection y big endian.
Ponemos la cadena BC873BD6 y ok.Esto nos descifrará este segmento.
A continuación repetimos la operación para el segmento 0x100000 hasta el final del fichero.
Lo guardaremos como navi_s_326su.dram.bin.gz y pasamos a descomprimirlo como se dijo en el
punto anterior.
El proceso a ejecutar para cifrarlo y comprimirlo sería:
zip2006 e navi_s_326su.dram.bin navi_s_326su.dram.bin.gz
move navi_s_326su.dram.bin.gz test1
filex.exe test1 navi_s_326su.dram.bin.gz
Con el fichero descomprimido navi_s_326su.dram.bin podemos ver los servidores, claves,
caducidad de conexiones,etc.
Es aquí donde podemos modificar y revertir el proceso.
El objetivo es modificar el app.ssu solo y nunca cargar el boot de otro firmware que no sea
el nuestro, ya que complica mucho la recuperación o deja a nuestro receptor como un
ladrillo.
El proceso para reconstruirlo sería:
zip2006 e navi_s_326su.dram.bin navi_s_326su.dram.bin.gz
move navi_s_326su.dram.bin.gz test1
filex.exe test1 navi_s_326su.dram.bin.gz
post_link navi_s_326su.dram.bin.gz AudioDSP.ro graphdat16_sen5_hd.txt.ro
mk_stamp310 navi_s_326su.dram.bin.gz.gro navi_s_326su.flash.gz.gro.stp "app1" NT78320 65537
1 0x802b0000 0x802b01bc 0x10000
ssu2bin e a1 navi_s_326su.flash.gz.gro.stp ssu.txt navi_s_326su.app1.gro.ssu
Gracias a barrigaverde, vebp y exterminator.
Enlace bookmaks actualizados:
[url]https://drive.google.com/file/d/0Bw15dXeVe2Z2QkVZc0RZRW10QmM/view?usp=sharing[/url]
|