Control de usuario
Patrocinadores
Estadísticas
Miembros:
334.623
Online:
1.450
Hilos:
1.380.611
Mensajes:
24.882.091
Stats

Índice de foros Xbox 360 Exploits y homebrew

Multiples kernels usando una Tarjeta XD

Hacking avanzado: exploits y sus aplicaciones, modificación de la NAND, etc.

Moderadores: JaRaBcN, VIDHAR

Reglas del foro
¿Acabas de llegar y no sabes por dónde empezar? Mira este hilo.
¿Dudas sobre una aplicación concreta? Busca su hilo OFICIAL y pregunta allí, no abras uno nuevo.
Si ignoras estas dos normas, tu hilo será CERRADO.


Además, al igual que en el resto de la web, no está permitido hablar sobre la descarga de juegos o aplicaciones protegidas, ni cualquier cosa que vaya contra las normas.
Flash78
Avatar de usuario
Walker
 
Mensajes: 15934
Registrado: 09 Mar 2003

Multiples kernels usando una Tarjeta XD

Mensajepor Flash78 28 May 2007 10:57

Gracias a Haute por el aviso, me paso un enlace de Xboxhacker donde explican como poder arrancar con kernels diferentes usando tarjetas de camara xD.

Fuente: Xboxhacker

Imagen

Hay que realizar una modificacion a la placa base y añadir unos cables en los puntos de la memoria nand para conectarlos a un conector de tarjetas xd. Con varias tarjetas vas actualizando y depende cual tengas conectada la 360 arrancará con el kernel que tenga esta tarjeta. Sin ninguna creo que arrancaria con el primer kernel que tuviera.

Imagen


Imagen

Imagen

http://img220.imageshack.us/img220/7185/dsc00057bc3.jpg



Imagen

Imagen

18-pin Flash Card
Pin Name Description
18 GND Ground (+Presence detect)
17 R/-B Ready/-Busy (Open-drain)
16 -RE Read Enable
15 -CE Card Enable
14 CLE Command Latch Enable
13 ALE Address Latch Enable
12 -WE Write Enable
11 -WP Write Protect
10 GND Ground
9 D0 Data0
8 D1 Data1
7 D2 Data2
6 D3 Data3
5 D4 Data4
4 D5 Data5
3 D6 Data6
2 D7 Data7
1 Vcc Power



Ademas hay un programa para poder acceder a los datos. el fuente lo podeis compilar.

Code: (card_tools.h)
Código: Seleccionar todo
/*
* Card_tools for raw access XD/Smartmedia cards using Olympus MAUSB-10
* author: warpjavier
* email: [email]warpjavier@hotmail.com[/email]
* date: 27 May 2007
* platform: linux + windows
*
*/

#ifndef CARD_TOOLS_H_INCLUDED
#define CARD_TOOLS_H_INCLUDED

#include <usb.h>

/* the device's vendor and product id for Olympus MAUSB-10*/
#define MY_VID 0x07B4
#define MY_PID 0x010A

/* the device's endpoints */
#define EP_IN 0x82
#define EP_OUT 0x03

#define PBA_LO(pba) ((pba & 0xF) << 5)
#define PBA_HI(pba) (pba >> 3)

#define BUF_SIZE 576 //576 instead of 528 as the device return 48 extra bytes

/*
* Bulk command identity (byte 0)
*/
#define CARD_TOOLS_BULK_CMD         0x40

/*
* Bulk opcodes (byte 1)
*/
#define CARD_TOOLS_BULK_READ_BLOCK      0x94
#define CARD_TOOLS_BULK_ERASE_BLOCK      0xa3
#define CARD_TOOLS_BULK_WRITE_BLOCK      0xb4
#define CARD_TOOLS_BULK_RESET_MEDIA      0xe0

/*
* Port to operate on (byte 8)
*/
#define CARD_TOOLS_PORT_XD         0x00
#define CARD_TOOLS_PORT_SM         0x01

/*
* Error Codes
*/
#define CARD_TOOLS_OK       0x00
#define CARD_TOOLS_ERROR    0x01

/*
* Functions
*/
usb_dev_handle *open_dev(void);
int reset_media(void);
int dump_card(char *filename);
int write_to_card(char *filename);
int erase_card();
int read_block(unsigned short block);
int erase_block(unsigned short block);
int write_block(unsigned short block);
#endif // CARD_TOOLS_H_INCLUDED


Code: (card_tools.c)
Código: Seleccionar todo
/*
* Card_tools for raw access XD/Smartmedia cards using Olympus MAUSB-10
* author: warpjavier
* email: [email]warpjavier@hotmail.com[/email]
* date: 27 May 2007
* platform: linux + windows
*
*/
#include <stdio.h>
#include "card_tools.h"

//Some Globals
usb_dev_handle *dev = NULL; // the device handle
char buffer[BUF_SIZE*32];
int port = CARD_TOOLS_PORT_XD; //you can change it if you use Smartmedia cards

usb_dev_handle *open_dev(void)
{
    struct usb_bus *bus;
    struct usb_device *dev;
    for (bus = usb_get_busses(); bus; bus = bus->next)
    {
        for (dev = bus->devices; dev; dev = dev->next)
        {
            if (dev->descriptor.idVendor == MY_VID
                    && dev->descriptor.idProduct == MY_PID)
            {
                return usb_open(dev);
            }
        }
    }
    return NULL;
}

/*
* Resets the media status
*/
int reset_media(void)
{
   unsigned char command[9];

   memset(command, 0, 9);
   command[0] = CARD_TOOLS_BULK_CMD;
   command[1] = CARD_TOOLS_BULK_RESET_MEDIA;
   command[8] = port;

    if (usb_bulk_write(dev, EP_OUT, command, 9, 5000) != 9)
    {
        printf("Error: cannot reset media\n");
        return CARD_TOOLS_ERROR;
    }

   return CARD_TOOLS_OK;
}

int main(int argc, char *argv[])
{
   int option,status;
   char* filename;

   if (argc < 2) {
       printf("Card Tools 0.1 - by warpjavier\n");
      printf("Usage: %s [OPTION] filename\n", argv[0]);
      printf("Options are as follows:\n");
      printf("-d - Dump card\n");
      printf("-w - Write to card\n");
      printf("-e - Erase card\n");
      exit(0);
   }

    if((option = getopt(argc, argv, "d:w:e"))==-1)
        return 0;
   switch (option)
   {
        case 'd':
            if(argv[2] == NULL)
            {
                printf("Please, specify a filename\n");
                status = CARD_TOOLS_ERROR;
                break;
            }
            filename = argv[2];
            if(init_all()!=CARD_TOOLS_OK)
                return 0;
            printf("Dump card contents to %s file\n", filename);
            status = dump_card(filename);
            break;
        case 'w':
            if(argv[2] == NULL)
            {
                printf("Please, specify a filename\n");
                status = CARD_TOOLS_ERROR;
                break;
            }
            filename = argv[2];
            if(init_all()!=CARD_TOOLS_OK)
                return 0;
            printf("Write to card contents from %s file\n", filename);
            printf("The card must be empty before write\n");
            status = write_to_card(filename);
            break;
        case 'e':
            if(init_all()!=CARD_TOOLS_OK)
                return 0;
            printf("Erase card contents\n");
            printf("Do you want to erase the card? (y/n)");
         if (getchar() == 'y')
         {
                status = erase_card();
         }
         else
         {
             printf("Operation Cancelled\n");
             status = CARD_TOOLS_ERROR;
         }
            break;
        default:
            status = CARD_TOOLS_ERROR;
    }
    usb_release_interface(dev, 0);
    usb_close(dev);
    if(status != CARD_TOOLS_OK)
    {
        printf("Error!");
        return 0;
    }
    printf("Operation Succefully Complete");
    return 0;
}

int init_all()
{
    usb_init(); // initialize the library
    usb_find_busses(); // find all busses
    usb_find_devices(); // find all connected devices

    if (!(dev = open_dev()))
    {
        printf("Error: device not found!\n");
        return CARD_TOOLS_ERROR;
    }

    if (usb_set_configuration(dev, 1) < 0)
    {
        printf("Error: setting config 1 failed\n");
        usb_close(dev);
        return CARD_TOOLS_ERROR;
    }

    if (usb_claim_interface(dev, 0) < 0)
    {
        printf("Error: claiming interface 0 failed\n");
        usb_close(dev);
        return CARD_TOOLS_ERROR;
    }

    if(reset_media() != CARD_TOOLS_OK)
    {
        usb_close(dev);
        return CARD_TOOLS_ERROR;
    }
    return CARD_TOOLS_OK;
}

int dump_card(char *filename)
{
    FILE *fd;
    if((fd = fopen(filename,"w+b"))==NULL)
    {
        printf("Error creating %s\n",filename);
        return CARD_TOOLS_ERROR;
    }
    unsigned short block;
    for (block=0;block<1024;block++)
    {
        if(read_block(block)!=CARD_TOOLS_OK)
        {
            fclose(fd);
            return CARD_TOOLS_ERROR;
        }
        fwrite(buffer,528*32,1,fd);
    }
    fclose(fd);
    return CARD_TOOLS_OK;
}

int write_to_card(char *filename)
{
    FILE *fd;
    if((fd = fopen(filename,"r+b"))==NULL)
    {
        printf("Error opening file %s\n",filename);
        return CARD_TOOLS_ERROR;
    }
    unsigned short block,x;
    char tmp[528]; //528 is the page size plus the 16 extra bytes
    for (block=0;block<1024;block++)
    {
        // Add 48 extra bytes to each page
        for (x=0;x<32;x++)
        {
            fread(tmp,528,1,fd);
            memcpy(buffer+(x*576),tmp,528);
        }
        if(write_block(block)!=CARD_TOOLS_OK)
        {
            fclose(fd);
            return CARD_TOOLS_ERROR;
        }
    }
    fclose(fd);
    return CARD_TOOLS_OK;
}

int erase_card()
{
    unsigned short block;
    for (block=0;block<1024;block++)
    {
        if(erase_block(block)!=CARD_TOOLS_OK)
            return CARD_TOOLS_ERROR;
    }
    return CARD_TOOLS_OK;
}

int read_block(unsigned short block)
{
    int p;
    unsigned char command[9];
    command[0] = CARD_TOOLS_BULK_CMD;
    command[1] = CARD_TOOLS_BULK_READ_BLOCK;
    command[2] = PBA_HI(block);
    command[3] = 0x00; //Zone is always 0 for 16Mb cards
    command[4] = 0x00;
    command[5] = PBA_LO(block);
    command[6] = 0x20; //We read 32 pages at a time as is the block size.
    command[7] = 0x00;
    command[8] = port;

    if (usb_bulk_write(dev, EP_OUT, command, 9, 5000) != 9)
    {
        printf("Error sending Read Block command\n");
        return CARD_TOOLS_ERROR;
    }
    if (usb_bulk_read(dev, EP_IN, buffer, (BUF_SIZE*32), 5000) != (BUF_SIZE*32))
    {
        printf("Error reading Block\n");
        return CARD_TOOLS_ERROR;
    }
    else
    {
        printf("Reading block %d\n",block);
        //remove the extra 48 bytes
        for(p=0;p<32;p++)
        {
            int dest_offset = p * 528;
            int src_offset = p * (512 + 64);
            memmove(buffer + dest_offset, buffer + src_offset, 528);
        }
    }
    return CARD_TOOLS_OK;
}

int erase_block(unsigned short block)
{
    unsigned char stat_buf[2];
    unsigned char command[9];
    command[0] = CARD_TOOLS_BULK_CMD;
    command[1] = CARD_TOOLS_BULK_ERASE_BLOCK;
    command[2] = PBA_HI(block);
    command[3] = 0x00; //Zone is always 0 for 16Mb cards
    command[4] = 0x00;
    command[5] = PBA_LO(block);
    command[6] = 0x02;
    command[7] = 0x00;
    command[8] = port;

    if (usb_bulk_write(dev, EP_OUT, command, 9, 5000) != 9)
    {
        printf("Error sending Erase command\n");
        return CARD_TOOLS_ERROR;
    }
    if (usb_bulk_read(dev, EP_IN, stat_buf, 2, 5000)!=2)
    {
        printf("error: Erasing Block\n");
    }
    else
    {
        printf("Erasing Block %d\n",block);
    }
    return CARD_TOOLS_OK;
}

int write_block(unsigned short block)
{
    unsigned char command[9];
    command[0] = CARD_TOOLS_BULK_CMD;
    command[1] = CARD_TOOLS_BULK_WRITE_BLOCK;
    command[2] = PBA_HI(block);
    command[3] = 0x00; //Zone is always 0 for 16Mb cards
    command[4] = 0x00;
    command[5] = PBA_LO(block);
    command[6] = 0x20; //We write 32 pages at a time as is the block size.
    command[7] = 0x00;
    command[8] = port;

    if (usb_bulk_write(dev, EP_OUT, command, 9, 5000) != 9)
    {
        printf("Error sending Write Block command\n");
        return CARD_TOOLS_ERROR;
    }
    if (usb_bulk_read(dev, 0x01, buffer, (BUF_SIZE*32), 5000) != (BUF_SIZE*32))
    {
        printf("Error Writing Block\n");
        return CARD_TOOLS_ERROR;
    }
    else
    {
        printf("Writing block %d\n",block);
    }
    return CARD_TOOLS_OK;
}
Imagen

][PaNg][
Avatar de usuario
Delirium Tremens
 
Mensajes: 1474
Registrado: 14 Ene 2004
Ubicación: Málaga

Mensajepor ][PaNg][ 28 May 2007 11:00

IMPRESIONANTEEE
TREMENDO

Salu2.

aWaKeNiNG
Avatar de usuario
MegaAdicto!!!
 
Mensajes: 855
Registrado: 30 Oct 2006

Mensajepor aWaKeNiNG 28 May 2007 11:04

q jartá de cables [flipa]
"Más vale morir con honor que vivir sin él."

Flash78
Avatar de usuario
Walker
 
Mensajes: 15934
Registrado: 09 Mar 2003

Mensajepor Flash78 28 May 2007 11:06

aWaKeNiNG escribió:q jartá de cables [flipa]
No hay mucha diferencia de cables ni dificultad comparando con la instalacion de un chip en la ps2.
Imagen

Trebarius
MegaAdicto!!!
 
Mensajes: 1027
Registrado: 25 Feb 2007

Mensajepor Trebarius 28 May 2007 11:06

dios...hay que soldar mas cable que en un robot xD
Eso si, impresionante eso de cambiar de kernel con un lector de tarjetas.... ¬_¬

Arkanoid
Avatar de usuario
       
 
Mensajes: 4609
Registrado: 12 Jul 2006

Mensajepor Arkanoid 28 May 2007 11:07

¿Que utilidades podria tener este avance?

Oboka
Avatar de usuario
Adicto
 
Mensajes: 403
Registrado: 23 Sep 2002
Ubicación: Palma de Mallorca

Mensajepor Oboka 28 May 2007 11:08

o_O

Increible!

Ahora la pregunta de rigor es... se podra poner alguna vez una xbmc?

de nuevo Increible!

][PaNg][
Avatar de usuario
Delirium Tremens
 
Mensajes: 1474
Registrado: 14 Ene 2004
Ubicación: Málaga

Mensajepor ][PaNg][ 28 May 2007 11:10

Arkanoid escribió:¿Que utilidades podria tener este avance?


Cargar un kernel vulnerable y aprovechar el bug para usar linux y demás, creo que todo apunta a un XBOX Media center.

Salu2.

Trebarius
MegaAdicto!!!
 
Mensajes: 1027
Registrado: 25 Feb 2007

Mensajepor Trebarius 28 May 2007 11:13

pues si esto podria crear una revolucion en la scene pero la cuestion es que...sol es valido con tarjetas xd o tmb se podria provar con otras como las tipicas SD?

Flash78
Avatar de usuario
Walker
 
Mensajes: 15934
Registrado: 09 Mar 2003

Mensajepor Flash78 28 May 2007 11:14

Arkanoid escribió:¿Que utilidades podria tener este avance?


De momento si se usa en maquinas nuevas podrias tener accesible todos los kernels con sus ventajas e incombenientes:


Primer kernel: bug que permite ejecutar kiosk demo

Kernel v4532 o v4548: Permiten usar linux a traves del xploit del hipervisor / king kong.

Ultimo kernel: Conectarse al live (No permite ejecutar algunas peliculas wmv HD)

Ademas que con suerte poder añadir un update para usar un kernel modificado con soporte de divx, etc... pero eso de momento es un sueño.
Imagen

Siguiente

Volver a Exploits y homebrew

¿Quién está conectado?

Usuarios navegando por este foro: No hay usuarios registrados visitando el foro y 3 invitados