Bueno hacer un backup del kernel de la consola y leer los fuses bajo linux es algo relativamente sencillo, en este tutorial intentaré explicar como se hace todo el proceso.
Antes de nada nos aseguraremos de que disponemos de una consola con kernel vulnerable, vamos a información del sistema y miramos que nuestro kernel sea 2.0.4532.0 , 2.0.4548.0 o uno anterior, si tu kernel es posterior, lo siento pero no tienes nada que hacer.
Si tu kernel es anterior debes actualizar la consola a cualquiera de estos dos kernels, para ello debes descargar cualquiera de estos dos actualizaciones dependiendo del kernel que deses tener, ambos son vulnerables.
http://rapidshare.com/files/27312714/UPDATE-2.0.4532.0.rar.html
http://rapidshare.com/files/27313919/UPDATE-2.0.4548.0.rar.html
Una vez descargados los grabas en un cd regrabable por ejemplo y arrancas la consola con el disco dentro, de este modo te pedirá actualizar ... OJO no vale meter el disco cuando la consola está ya está encendida, dado que te detectará el disco como disco mixto y no actualizará.
Bien primero necesitamos conseguir un interface rs232 yo personalmente he usado un cable para teléfonos siemens, aqui os dejo el link del que uso yo
http://www.pixelee.es/?122_Cable_Siemens_DCA-500_(RS-232) , aunque personalmente os aviso de que ese precio es un timo, un amigo mio compró 250 cables de esos por 40 euros ... la mejor alternativa es tirar de ebay, o hacerselo uno mismo con este diagrama
Una vez tengamos el cable lo soldamos al puerto j2b1 de la consola, este puerto es de facil localización, está cerca del integrado ana.
el siguiente paso es conectar el interface rs232 al puerto serie del pc (los que tengais portátiles podeis usar un conversor de puerto serie a usb, funciona perfectamente) y abrir el hyperterminal, configuramos el puerto serie de la siguiente manera :
A continuación cargamos el king kong con el exploit, pulsamos start y en el hyperterminal podremos ver el mensaje MS> repitiendose continuamente. Ahora metemos el cd con linux y esperamos a que cargue, una vez vaya cargando nos saldrá por el hyperterminal esto :
XeLL - Xenon linux loader 0.1
* clearing BSS...
* Attempting to catch all CPUs...
* success.: 15..
trying to initialize network...
ok now the NIC
NETIF at 8000000001459478
NIC reset
reset: 01805508
1478 before: f2050000
1478: f2050000
init tx
init rx
starting httpd server..ok!
* CPU PVR: 00710200
* FUSES - write them down and keep them safe:
fuseset 00: X
fuseset 01: X
fuseset 02: X
fuseset 03: X
fuseset 04: X
fuseset 05: X
fuseset 06: X
fuseset 07: X
fuseset 08: 0000000000000000
fuseset 09: 0000000000000000
fuseset 10: 0000000000000000
fuseset 11: 0000000000000000
* try booting from CDROM
atapi_packet result: 0
* reading CD/DVD...
root_direntry offset: 156
! root at lba=14, size=2048
Y ahi tenemos los fuses de nuestra consola, los fuses son únicos para cada consola y en un futuro nos permitirán acceder al keyvault que contiene las claves de nuestra consola (el keyvault se encuentra en la tsop de la consola y explicaré como dumpearla luego), en ese keyvault está clave del lector entre otras cosas, y NO, NO ES POSIBLE RECUPERAR UNA CONSOLA SIN KEY DEL LECTOR DE ESTE MODO DADO QUE ES NECESARIO EJECUTAR EL KING KONG.
Bien una vez cargado el linux del todo procedemos a dumpear la tsop de nuestra consola; la tsop es una memoria nand de 16 megas que contiene el kernel de nuestra consola. Para dumpear esta memoria usaremos el programa memdump.c
/*
* Usage:
* volatile void *p = ioremap(MY_HARD_REG_ADDR, 4096);
* ...
* out_8(p, state ^= 0x1);
*
*
* Copyright (C) 2003 Stephane Fillod
*/
#include
#include
#include
#include
#include
#include
#include
#include
#define BUFSIZE 16777216
#ifdef __PPC__
extern inline void out_8(volatile unsigned char *addr, unsigned val)
{
__asm__ __volatile__("stb%U0%X0 %1,%0; eieio" : "=m" (*addr) : "r" (val));
}
/* etc., cf asm/io.h */
#else
extern inline void out_8(volatile unsigned char *addr, unsigned val)
{
*addr = val & 0xff;
}
#endif
volatile void * ioremap(unsigned long physaddr, unsigned size)
{
static int axs_mem_fd = -1;
unsigned long page_addr, ofs_addr, reg, pgmask;
void* reg_mem = NULL;
/*
* looks like mmap wants aligned addresses?
*/
pgmask = getpagesize()-1;
page_addr = physaddr & ~pgmask;
ofs_addr = physaddr & pgmask;
/*
* Don't forget O_SYNC, esp. if address is in RAM region.
* Note: if you do know you'll access in Read Only mode,
* pass O_RDONLY to open, and PROT_READ only to mmap
*/
if (axs_mem_fd == -1) {
axs_mem_fd = open("/dev/mem", O_RDWR|O_SYNC);
if (axs_mem_fd < 0) {
perror("AXS: can't open /dev/mem");
return NULL;
}
}
/* memory map */
reg_mem = mmap(
(caddr_t)reg_mem,
size+ofs_addr,
PROT_READ|PROT_WRITE,
MAP_SHARED,
axs_mem_fd,
page_addr
);
if (reg_mem == MAP_FAILED) {
perror("AXS: mmap error");
close(axs_mem_fd);
return NULL;
}
reg = (unsigned long )reg_mem + ofs_addr;
return (volatile void *)reg;
}
int iounmap(volatile void *start, size_t length)
{
unsigned long ofs_addr;
ofs_addr = (unsigned long)start & (getpagesize()-1);
/* do some cleanup when you're done with it */
return munmap((unsigned char*)start-ofs_addr, length+ofs_addr);
}
main(int argc, char *argv[])
{
int fd = open("./flashdump", O_RDWR | O_CREAT, 0644);
volatile void *d_PtrA = ioremap(0xc8000000, BUFSIZE);
char *buffer = malloc(BUFSIZE);
memcpy((void*)buffer, d_PtrA, BUFSIZE);
int ret = write( fd, buffer, BUFSIZE );
close(fd);
return 0;
}
Copiamos este programa en un archivo de texto, abrimos una consola y lo compilamos con el siguiente comando : gcc -I=/usr/include/ -O memdump.c
Con esto tendremos un archivo llamado a.out , lo ejecutamos (./a.out) y en unos segundos tendremos un archivo de 16mb llamado flasdump que es nuestra tsop
Bien una vez dumpeada esta memoria es altamente recomendable quitar la resistencia http://mydedibox.fr/downloads/x360/infectus/r6t3.jpg
con lo cual microsoft no podrá escribir nuestros fuses, de este modo con el modchip infectus podremos hacer downgrade siempre que queramos, OJO si no quitas la resistencia y actualizas NUNCA podrás hacer downgrade con el infectus.
Bueno y hasta aqui llega mi tutorial solo decir que si alguien sabe donde comprar un infectus en españa que contacte conmigo dado que busco uno desesperadamente, haré una review del chip tan pronto me haga con uno.
PD gracias a flash78 por la actualización al segundo kernel vulnerable eres un fenómeno, pocas personas he visto ayudar tanto a los demás por aquí como tu.
Saludos