Ver Mensaje Individual
Antiguo 05/08/2016, 00:04   #105
enriquebutra
Usuario Activo
 
Fecha de ingreso: 18/oct/2005
Mensajes: 232
enriquebutra está en el buen camino
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]
enriquebutra está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir