› Foros › PlayStation 3 › Modchips y Softmods
Diría sin asegurar 100% que el autoDFU aquí no es posible. No os olvidéis que este chip no soporta USB por sí mismo, hay que ayudarle Como hay que poner el puente, no hay tiempo ni nada, puente = salta el bootloader.
El hex de hermes es el v4b tal cual sin nada nuevo. Haé uno con el spoof para evitar parchear desde el Gaia... estoy colocando mierda en mis discos, que tengo un chocho curioso xD Cuando deje todo limpito, me pondré primero con el PL3 (a ver si hoy saco algo funcional), y luego ya hacemos modificaciones, que quiero dejar los makefile listos para que compilen cualquier versión, y meter todas las posibles del port1_config_descriptor.h para la de Hermes. Para el PL3 ya veremos, que no estoy muy familiarizado con él.
Mensaje por delagorra 04 Ene 2011 14:24
Ok perfecto ahora me quedo mas claro igual yo ya lo tengo modificado con las soldaduras pero no le puse los pines para adaptarlo lo deje soldado al cable serial directamente. me recomendas que lo arme asi?
unbas escribió:Ahora bien, si tenemos el puente hecho el dongle se va al bootloader, si no tenemos el puente hecho el dongle inicia normal, perdona la pregunta pero es que un apañero del curro tiene mi USB y no puedo probarlo como poco hasta el 7 ....
unbas escribió:Es decir que seguimos usando el inyector y despues el programador por USB, ¿cierto?
delagorra escribió:ahora me voy a volver loco buscando un conector de 5 pines como el que tiene c0d3m4st4 en la foto
No, ya no dependemos del inyector, tenemos código fuente, y podemos compilar nuestros hex Aunque los generados por el inyector siguen (o deberían) seguir siendo válidos, pero vamos, qeu con el fuente, ya podemos modificar los payloads, adaptarlos a lo último y demás sin andar haciendo virguerías
/*
PSGrade
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/power.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <string.h>
#include <stdio.h>
#include <LUFA/Version.h>
#include <LUFA/Drivers/Board/LEDs.h>
#include <LUFA/Drivers/USB/USB.h>
#include <LUFA/Drivers/USB/Class/CDC.h>
#include "key.h"
#include "hmac.h"
#include "random.c"
#define RED (LEDS_LED1)
#define GREEN (LEDS_LED2)
#define BOTH (RED|GREEN)
#define NONE (LEDS_NO_LEDS)
#define LED(x) LEDs_SetAllLEDs(x)
#define PORT_EMPTY 0x0100 /* powered only */
#define PORT_FULL 0x0103 /* connected, enabled, powered, full-speed */
#define C_PORT_CONN 0x0001 /* connection */
#define C_PORT_RESET 0x0010 /* reset */
#define C_PORT_NONE 0x0000 /* no change */
#define CHALLENGE_INDEX 7
#define SHA1_DIGESTSIZE 20
uint16_t port_status[6] = { PORT_EMPTY, PORT_EMPTY, PORT_EMPTY, PORT_EMPTY, PORT_EMPTY, PORT_EMPTY };
uint16_t port_change[6] = { C_PORT_NONE, C_PORT_NONE, C_PORT_NONE, C_PORT_NONE, C_PORT_NONE, C_PORT_NONE };
enum {
init,
wait_hub_ready,
hub_ready,
p5_wait_reset,
p5_wait_enumerate,
p5_challenged,
p5_responded,
p5_wait_disconnect,
p5_disconnected,
done,
} state = init;
uint8_t hub_int_response = 0x00;
uint8_t hub_int_force_data0 = 0;
int last_port_conn_clear = 0;
int last_port_reset_clear = 0;
int8_t port_addr[7] = { -1, -1, -1, -1, -1, -1, -1 };
int8_t port_cur = -1;
void USB_Device_SetDeviceAddress(uint8_t Address)
{
port_addr[port_cur] = Address & 0x7f;
UDADDR = Address & 0x7f;
UDADDR |= (1 << ADDEN);
}
void switch_port(int8_t port)
{
if (port_cur == port) return;
port_cur = port;
if (port_addr[port] < 0)
port_addr[port] = 0;
UDADDR = port_addr[port] & 0x7f;
UDADDR |= (1 << ADDEN);
}
volatile uint8_t expire = 0; /* counts down every 10 milliseconds */
ISR(TIMER1_OVF_vect)
{
uint16_t rate = (uint16_t) -(F_CPU / 64 / 100);
TCNT1H = rate >> 8;
TCNT1L = rate & 0xff;
if (expire > 0)
expire--;
}
void panic(int led1, int led2)
{
for(;;) {
_delay_ms(100);
LED(led1);
_delay_ms(100);
LED(led2);
}
}
void HUB_Task(void)
{
Endpoint_SelectEndpoint(1);
if (Endpoint_IsReadWriteAllowed())
{
if (hub_int_response) {
if (hub_int_force_data0) {
Endpoint_ResetDataToggle();
hub_int_force_data0 = 0;
}
Endpoint_Write_Byte(hub_int_response);
Endpoint_ClearIN();
hub_int_response = 0x00;
}
}
}
void JIG_Task(void)
{
static int bytes_out = 0, bytes_in = 0;
Endpoint_SelectEndpoint(2);
if (Endpoint_IsReadWriteAllowed())
{
Endpoint_Read_Stream_LE(&jig_challenge[bytes_out], 8, NO_STREAM_CALLBACK) ;
Endpoint_ClearOUT();
bytes_out += 8;
if (bytes_out >= 64) {
//Generate random seed from AVR timer.
srand(jig_challenge[7] + jig_challenge[8]); // As there is no function to get the time from the AVR we use the two first random chars from the jig_challenge as a seed.
//Get a random dongle_id, based off the seed generated with the AVR timer.
dongle_id[0] = rand();
dongle_id[1] = rand();
//Check dongle_id. If it should be revoked a new one is generated.
int i;
for(i = 0; i < sizeof(usb_dongle_revoke_list); i++) {
if(usb_dongle_revoke_list[i] == (((dongle_id[0] << 8) & 0xFF) & (dongle_id[1] & 0xFF)) ) {
i = 0;
dongle_id[0] = rand();
dongle_id[1] = rand();
}
}
//Generate the jig_response.
jig_response[0] = 0x00;
jig_response[1] = 0x00;
jig_response[2] = 0xFF;
jig_response[3] = 0x00;
jig_response[4] = 0x2E;
jig_response[5] = 0x02;
jig_response[6] = 0x02;
jig_response[7] = dongle_id[0];
jig_response[8] = dongle_id[1];
//Generate usb_dongle_key from usb_dongle_master_key and dongle_id.
HMACInit(usb_dongle_master_key, SHA1_DIGESTSIZE);
HMACBlock(dongle_id, sizeof(dongle_id));
HMACDone();
for(i = 0; i < SHA1_DIGESTSIZE; i++) {
usb_dongle_key[i] = hmacdigest[i];
}
//Generate jig_response.
HMACInit(usb_dongle_key, SHA1_DIGESTSIZE);
HMACBlock(jig_challenge + CHALLENGE_INDEX, SHA1_DIGESTSIZE);
HMACDone();
for(i = 0; i < SHA1_DIGESTSIZE; i++) {
jig_response[CHALLENGE_INDEX + sizeof(dongle_id) + i] = hmacdigest[i];
}
state = p5_challenged;
expire = 50; // was 90
}
}
Endpoint_SelectEndpoint(1);
if (Endpoint_IsReadWriteAllowed() && state == p5_challenged && expire == 0)
{
if ( bytes_in < 64) {
Endpoint_Write_Stream_LE(&jig_response[bytes_in], 8, NO_STREAM_CALLBACK);
Endpoint_ClearIN();
bytes_in += 8;
if ( bytes_in >= 64) {
state = p5_responded;
expire = 50;
}
}
}
}
void connect_port(int port)
{
last_port_reset_clear = 0;
hub_int_response = (1 << port);
port_status[port - 1] = PORT_FULL;
port_change[port - 1] = C_PORT_CONN;
}
void disconnect_port(int port)
{
last_port_conn_clear = 0;
hub_int_response = (1 << port);
port_status[port - 1] = PORT_EMPTY;
port_change[port - 1] = C_PORT_CONN;
}
void SetupHardware(void)
{
/* Disable watchdog if enabled by bootloader/fuses */
MCUSR &= ~(1 << WDRF);
wdt_disable();
/* Disable clock division */
clock_prescale_set(clock_div_1);
/* Setup timer */
TCCR1B = 0x03; /* timer rate clk/64 */
TIMSK1 = 0x01;
/* Hardware Initialization */
LEDs_Init();
USB_Init();
sei();
}
int main(void)
{
SetupHardware();
LED(~GREEN);
state = init;
switch_port(0);
for (;;)
{
if (port_cur == 0)
HUB_Task();
if (port_cur == 5)
JIG_Task();
USB_USBTask();
//connect 5
if (state == hub_ready && expire == 0)
{
connect_port(5);
state = p5_wait_reset;
}
if (state == p5_wait_reset && last_port_reset_clear == 5)
{
switch_port(5);
state = p5_wait_enumerate;
}
// disconnect 5
if (state == p5_responded && expire == 0)
{
switch_port(0);
disconnect_port(5);
state = p5_wait_disconnect;
}
if (state == p5_wait_disconnect && last_port_conn_clear == 5)
{
state = p5_disconnected;
expire = 20;
}
// done
if (state == p5_disconnected && expire == 0)
{
LED(GREEN);
break;
}
}
}
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
const uint8_t wIndex,
const void** const DescriptorAddress)
{
const uint8_t DescriptorType = (wValue >> 8);
void* Address = NULL;
uint16_t Size = NO_DESCRIPTOR;
switch (DescriptorType)
{
case DTYPE_Device:
switch (port_cur) {
case 0:
Address = (void *) HUB_Device_Descriptor;
Size = sizeof(HUB_Device_Descriptor);
break;
case 5:
Address = (void *) port5_device_descriptor;
Size = sizeof(port5_device_descriptor);
break;
}
break;
case DTYPE_Configuration:
switch (port_cur) {
case 0:
Address = (void *) HUB_Config_Descriptor;
Size = sizeof(HUB_Config_Descriptor);
break;
case 5:
// 1 config
Address = (void *) port5_config_descriptor;
Size = sizeof(port5_config_descriptor);
break;
}
break;
case 0x29: // HUB descriptor (always to port 0 we'll assume)
switch (port_cur) {
case 0:
Address = (void *) HUB_Hub_Descriptor;
Size = sizeof(HUB_Hub_Descriptor);
break;
}
break;
}
*DescriptorAddress = Address;
return Size;
}
void EVENT_USB_Device_Connect(void) { }
void EVENT_USB_Device_Disconnect(void) { }
void EVENT_USB_Device_UnhandledControlRequest(void)
{
if (port_cur == 5 && USB_ControlRequest.bRequest == REQ_SetInterface)
{
/* can ignore this */
Endpoint_ClearSETUP();
Endpoint_ClearIN();
Endpoint_ClearStatusStage();
return;
}
if (port_cur == 0 &&
USB_ControlRequest.bmRequestType == 0xA0 &&
USB_ControlRequest.bRequest == 0x00 && // GET HUB STATUS
USB_ControlRequest.wValue == 0x00 &&
USB_ControlRequest.wIndex == 0x00 &&
USB_ControlRequest.wLength == 0x04) {
Endpoint_ClearSETUP();
Endpoint_Write_Word_LE(0x0000); // wHubStatus
Endpoint_Write_Word_LE(0x0000); // wHubChange
Endpoint_ClearIN();
Endpoint_ClearStatusStage();
return;
}
if (port_cur == 0 &&
USB_ControlRequest.bmRequestType == 0xA3 &&
USB_ControlRequest.bRequest == 0x00 && // GET PORT STATUS
USB_ControlRequest.wValue == 0x00 &&
USB_ControlRequest.wLength == 0x04) {
uint8_t p = USB_ControlRequest.wIndex;
if (p < 1 || p > 6) return;
Endpoint_ClearSETUP();
Endpoint_Write_Word_LE(port_status[p - 1]); // wHubStatus
Endpoint_Write_Word_LE(port_change[p - 1]); // wHubChange
Endpoint_ClearIN();
Endpoint_ClearStatusStage();
return;
}
if (port_cur == 0 &&
USB_ControlRequest.bmRequestType == 0x23 &&
USB_ControlRequest.bRequest == 0x03 && // SET_FEATURE
USB_ControlRequest.wLength == 0x00) {
uint8_t p = USB_ControlRequest.wIndex;
if (p < 1 || p > 6) return;
Endpoint_ClearSETUP();
Endpoint_ClearIN();
Endpoint_ClearStatusStage();
switch(USB_ControlRequest.wValue) {
case 0x0008: // PORT_POWER
if (p == 6 && state == init) {
/* after the 6th port is powered, wait a bit and continue */
state = hub_ready;
expire = 15;
}
break;
case 0x0004: // PORT_RESET
hub_int_response = (1 << p);
port_change[p - 1] |= C_PORT_RESET;
break;
}
return;
}
if (port_cur == 0 &&
USB_ControlRequest.bmRequestType == 0x23 &&
USB_ControlRequest.bRequest == 0x01 && // CLEAR_FEATURE
USB_ControlRequest.wLength == 0x00) {
uint8_t p = USB_ControlRequest.wIndex;
if (p < 1 || p > 6) return;
Endpoint_ClearSETUP();
Endpoint_ClearIN();
Endpoint_ClearStatusStage();
switch(USB_ControlRequest.wValue) {
case 0x0010: // C_PORT_CONNECTION
last_port_conn_clear = p;
port_change[p - 1] &= ~C_PORT_CONN;
break;
case 0x0014: // C_PORT_RESET
last_port_reset_clear = p;
port_change[p - 1] &= ~C_PORT_RESET;
break;
}
return;
}
panic(RED, GREEN);
}
void EVENT_USB_Device_ConfigurationChanged(void)
{
/* careful with endpoints: we don't reconfigure when "switching ports"
so we need the same configuration on all of them */
if (!Endpoint_ConfigureEndpoint(1, EP_TYPE_INTERRUPT, ENDPOINT_DIR_IN, 8, ENDPOINT_BANK_SINGLE))
panic(GREEN, BOTH);
if (!Endpoint_ConfigureEndpoint(2, EP_TYPE_INTERRUPT, ENDPOINT_DIR_OUT, 8, ENDPOINT_BANK_SINGLE))
panic(GREEN, BOTH);
}
void EVENT_USB_Device_Suspend(void) { }
void EVENT_USB_Device_WakeUp(void) { }
void EVENT_USB_Device_Reset(void) { }
void EVENT_USB_Device_StartOfFrame(void) { }
void EVENT_USB_InitFailure(const uint8_t ErrorCode) { }
void EVENT_USB_UIDChange(void) {}
unbas escribió:No, ya no dependemos del inyector, tenemos código fuente, y podemos compilar nuestros hex Aunque los generados por el inyector siguen (o deberían) seguir siendo válidos, pero vamos, qeu con el fuente, ya podemos modificar los payloads, adaptarlos a lo último y demás sin andar haciendo virguerías
El codigo fuente, es el del link di github? que pusiste antes?
josete2k escribió:Ops, el source que te pasé es el autoDFU... aunque bueno si el bootloader se encuentra en una posición determinada, en el psgrade.c tienes el salto definido por si quieres probar...
De todas formas, el psgrade.c sin autoDFU con el randomID de Noltari es este:/*
PSGrade
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/power.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <string.h>
#include <stdio.h>
#include <LUFA/Version.h>
#include <LUFA/Drivers/Board/LEDs.h>
#include <LUFA/Drivers/USB/USB.h>
#include <LUFA/Drivers/USB/Class/CDC.h>
#include "key.h"
#include "hmac.h"
#include "random.c"
#define RED (LEDS_LED1)
#define GREEN (LEDS_LED2)
#define BOTH (RED|GREEN)
#define NONE (LEDS_NO_LEDS)
#define LED(x) LEDs_SetAllLEDs(x)
#define PORT_EMPTY 0x0100 /* powered only */
#define PORT_FULL 0x0103 /* connected, enabled, powered, full-speed */
#define C_PORT_CONN 0x0001 /* connection */
#define C_PORT_RESET 0x0010 /* reset */
#define C_PORT_NONE 0x0000 /* no change */
#define CHALLENGE_INDEX 7
#define SHA1_DIGESTSIZE 20
uint16_t port_status[6] = { PORT_EMPTY, PORT_EMPTY, PORT_EMPTY, PORT_EMPTY, PORT_EMPTY, PORT_EMPTY };
uint16_t port_change[6] = { C_PORT_NONE, C_PORT_NONE, C_PORT_NONE, C_PORT_NONE, C_PORT_NONE, C_PORT_NONE };
enum {
init,
wait_hub_ready,
hub_ready,
p5_wait_reset,
p5_wait_enumerate,
p5_challenged,
p5_responded,
p5_wait_disconnect,
p5_disconnected,
done,
} state = init;
uint8_t hub_int_response = 0x00;
uint8_t hub_int_force_data0 = 0;
int last_port_conn_clear = 0;
int last_port_reset_clear = 0;
int8_t port_addr[7] = { -1, -1, -1, -1, -1, -1, -1 };
int8_t port_cur = -1;
void USB_Device_SetDeviceAddress(uint8_t Address)
{
port_addr[port_cur] = Address & 0x7f;
UDADDR = Address & 0x7f;
UDADDR |= (1 << ADDEN);
}
void switch_port(int8_t port)
{
if (port_cur == port) return;
port_cur = port;
if (port_addr[port] < 0)
port_addr[port] = 0;
UDADDR = port_addr[port] & 0x7f;
UDADDR |= (1 << ADDEN);
}
volatile uint8_t expire = 0; /* counts down every 10 milliseconds */
ISR(TIMER1_OVF_vect)
{
uint16_t rate = (uint16_t) -(F_CPU / 64 / 100);
TCNT1H = rate >> 8;
TCNT1L = rate & 0xff;
if (expire > 0)
expire--;
}
void panic(int led1, int led2)
{
for(;;) {
_delay_ms(100);
LED(led1);
_delay_ms(100);
LED(led2);
}
}
void HUB_Task(void)
{
Endpoint_SelectEndpoint(1);
if (Endpoint_IsReadWriteAllowed())
{
if (hub_int_response) {
if (hub_int_force_data0) {
Endpoint_ResetDataToggle();
hub_int_force_data0 = 0;
}
Endpoint_Write_Byte(hub_int_response);
Endpoint_ClearIN();
hub_int_response = 0x00;
}
}
}
void JIG_Task(void)
{
static int bytes_out = 0, bytes_in = 0;
Endpoint_SelectEndpoint(2);
if (Endpoint_IsReadWriteAllowed())
{
Endpoint_Read_Stream_LE(&jig_challenge[bytes_out], 8, NO_STREAM_CALLBACK) ;
Endpoint_ClearOUT();
bytes_out += 8;
if (bytes_out >= 64) {
//Generate random seed from AVR timer.
srand(jig_challenge[7] + jig_challenge[8]); // As there is no function to get the time from the AVR we use the two first random chars from the jig_challenge as a seed.
//Get a random dongle_id, based off the seed generated with the AVR timer.
dongle_id[0] = rand();
dongle_id[1] = rand();
//Check dongle_id. If it should be revoked a new one is generated.
int i;
for(i = 0; i < sizeof(usb_dongle_revoke_list); i++) {
if(usb_dongle_revoke_list[i] == (((dongle_id[0] << 8) & 0xFF) & (dongle_id[1] & 0xFF)) ) {
i = 0;
dongle_id[0] = rand();
dongle_id[1] = rand();
}
}
//Generate the jig_response.
jig_response[0] = 0x00;
jig_response[1] = 0x00;
jig_response[2] = 0xFF;
jig_response[3] = 0x00;
jig_response[4] = 0x2E;
jig_response[5] = 0x02;
jig_response[6] = 0x02;
jig_response[7] = dongle_id[0];
jig_response[8] = dongle_id[1];
//Generate usb_dongle_key from usb_dongle_master_key and dongle_id.
HMACInit(usb_dongle_master_key, SHA1_DIGESTSIZE);
HMACBlock(dongle_id, sizeof(dongle_id));
HMACDone();
for(i = 0; i < SHA1_DIGESTSIZE; i++) {
usb_dongle_key[i] = hmacdigest[i];
}
//Generate jig_response.
HMACInit(usb_dongle_key, SHA1_DIGESTSIZE);
HMACBlock(jig_challenge + CHALLENGE_INDEX, SHA1_DIGESTSIZE);
HMACDone();
for(i = 0; i < SHA1_DIGESTSIZE; i++) {
jig_response[CHALLENGE_INDEX + sizeof(dongle_id) + i] = hmacdigest[i];
}
state = p5_challenged;
expire = 50; // was 90
}
}
Endpoint_SelectEndpoint(1);
if (Endpoint_IsReadWriteAllowed() && state == p5_challenged && expire == 0)
{
if ( bytes_in < 64) {
Endpoint_Write_Stream_LE(&jig_response[bytes_in], 8, NO_STREAM_CALLBACK);
Endpoint_ClearIN();
bytes_in += 8;
if ( bytes_in >= 64) {
state = p5_responded;
expire = 50;
}
}
}
}
void connect_port(int port)
{
last_port_reset_clear = 0;
hub_int_response = (1 << port);
port_status[port - 1] = PORT_FULL;
port_change[port - 1] = C_PORT_CONN;
}
void disconnect_port(int port)
{
last_port_conn_clear = 0;
hub_int_response = (1 << port);
port_status[port - 1] = PORT_EMPTY;
port_change[port - 1] = C_PORT_CONN;
}
void SetupHardware(void)
{
/* Disable watchdog if enabled by bootloader/fuses */
MCUSR &= ~(1 << WDRF);
wdt_disable();
/* Disable clock division */
clock_prescale_set(clock_div_1);
/* Setup timer */
TCCR1B = 0x03; /* timer rate clk/64 */
TIMSK1 = 0x01;
/* Hardware Initialization */
LEDs_Init();
USB_Init();
sei();
}
int main(void)
{
SetupHardware();
LED(~GREEN);
state = init;
switch_port(0);
for (;;)
{
if (port_cur == 0)
HUB_Task();
if (port_cur == 5)
JIG_Task();
USB_USBTask();
//connect 5
if (state == hub_ready && expire == 0)
{
connect_port(5);
state = p5_wait_reset;
}
if (state == p5_wait_reset && last_port_reset_clear == 5)
{
switch_port(5);
state = p5_wait_enumerate;
}
// disconnect 5
if (state == p5_responded && expire == 0)
{
switch_port(0);
disconnect_port(5);
state = p5_wait_disconnect;
}
if (state == p5_wait_disconnect && last_port_conn_clear == 5)
{
state = p5_disconnected;
expire = 20;
}
// done
if (state == p5_disconnected && expire == 0)
{
LED(GREEN);
break;
}
}
}
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
const uint8_t wIndex,
const void** const DescriptorAddress)
{
const uint8_t DescriptorType = (wValue >> 8);
void* Address = NULL;
uint16_t Size = NO_DESCRIPTOR;
switch (DescriptorType)
{
case DTYPE_Device:
switch (port_cur) {
case 0:
Address = (void *) HUB_Device_Descriptor;
Size = sizeof(HUB_Device_Descriptor);
break;
case 5:
Address = (void *) port5_device_descriptor;
Size = sizeof(port5_device_descriptor);
break;
}
break;
case DTYPE_Configuration:
switch (port_cur) {
case 0:
Address = (void *) HUB_Config_Descriptor;
Size = sizeof(HUB_Config_Descriptor);
break;
case 5:
// 1 config
Address = (void *) port5_config_descriptor;
Size = sizeof(port5_config_descriptor);
break;
}
break;
case 0x29: // HUB descriptor (always to port 0 we'll assume)
switch (port_cur) {
case 0:
Address = (void *) HUB_Hub_Descriptor;
Size = sizeof(HUB_Hub_Descriptor);
break;
}
break;
}
*DescriptorAddress = Address;
return Size;
}
void EVENT_USB_Device_Connect(void) { }
void EVENT_USB_Device_Disconnect(void) { }
void EVENT_USB_Device_UnhandledControlRequest(void)
{
if (port_cur == 5 && USB_ControlRequest.bRequest == REQ_SetInterface)
{
/* can ignore this */
Endpoint_ClearSETUP();
Endpoint_ClearIN();
Endpoint_ClearStatusStage();
return;
}
if (port_cur == 0 &&
USB_ControlRequest.bmRequestType == 0xA0 &&
USB_ControlRequest.bRequest == 0x00 && // GET HUB STATUS
USB_ControlRequest.wValue == 0x00 &&
USB_ControlRequest.wIndex == 0x00 &&
USB_ControlRequest.wLength == 0x04) {
Endpoint_ClearSETUP();
Endpoint_Write_Word_LE(0x0000); // wHubStatus
Endpoint_Write_Word_LE(0x0000); // wHubChange
Endpoint_ClearIN();
Endpoint_ClearStatusStage();
return;
}
if (port_cur == 0 &&
USB_ControlRequest.bmRequestType == 0xA3 &&
USB_ControlRequest.bRequest == 0x00 && // GET PORT STATUS
USB_ControlRequest.wValue == 0x00 &&
USB_ControlRequest.wLength == 0x04) {
uint8_t p = USB_ControlRequest.wIndex;
if (p < 1 || p > 6) return;
Endpoint_ClearSETUP();
Endpoint_Write_Word_LE(port_status[p - 1]); // wHubStatus
Endpoint_Write_Word_LE(port_change[p - 1]); // wHubChange
Endpoint_ClearIN();
Endpoint_ClearStatusStage();
return;
}
if (port_cur == 0 &&
USB_ControlRequest.bmRequestType == 0x23 &&
USB_ControlRequest.bRequest == 0x03 && // SET_FEATURE
USB_ControlRequest.wLength == 0x00) {
uint8_t p = USB_ControlRequest.wIndex;
if (p < 1 || p > 6) return;
Endpoint_ClearSETUP();
Endpoint_ClearIN();
Endpoint_ClearStatusStage();
switch(USB_ControlRequest.wValue) {
case 0x0008: // PORT_POWER
if (p == 6 && state == init) {
/* after the 6th port is powered, wait a bit and continue */
state = hub_ready;
expire = 15;
}
break;
case 0x0004: // PORT_RESET
hub_int_response = (1 << p);
port_change[p - 1] |= C_PORT_RESET;
break;
}
return;
}
if (port_cur == 0 &&
USB_ControlRequest.bmRequestType == 0x23 &&
USB_ControlRequest.bRequest == 0x01 && // CLEAR_FEATURE
USB_ControlRequest.wLength == 0x00) {
uint8_t p = USB_ControlRequest.wIndex;
if (p < 1 || p > 6) return;
Endpoint_ClearSETUP();
Endpoint_ClearIN();
Endpoint_ClearStatusStage();
switch(USB_ControlRequest.wValue) {
case 0x0010: // C_PORT_CONNECTION
last_port_conn_clear = p;
port_change[p - 1] &= ~C_PORT_CONN;
break;
case 0x0014: // C_PORT_RESET
last_port_reset_clear = p;
port_change[p - 1] &= ~C_PORT_RESET;
break;
}
return;
}
panic(RED, GREEN);
}
void EVENT_USB_Device_ConfigurationChanged(void)
{
/* careful with endpoints: we don't reconfigure when "switching ports"
so we need the same configuration on all of them */
if (!Endpoint_ConfigureEndpoint(1, EP_TYPE_INTERRUPT, ENDPOINT_DIR_IN, 8, ENDPOINT_BANK_SINGLE))
panic(GREEN, BOTH);
if (!Endpoint_ConfigureEndpoint(2, EP_TYPE_INTERRUPT, ENDPOINT_DIR_OUT, 8, ENDPOINT_BANK_SINGLE))
panic(GREEN, BOTH);
}
void EVENT_USB_Device_Suspend(void) { }
void EVENT_USB_Device_WakeUp(void) { }
void EVENT_USB_Device_Reset(void) { }
void EVENT_USB_Device_StartOfFrame(void) { }
void EVENT_USB_InitFailure(const uint8_t ErrorCode) { }
void EVENT_USB_UIDChange(void) {}
Ese es el fuente original. Tengo que poner el mío modificado que es el que he usado.
Cuando acabe con lo del PL3 publicaré todos los fuentes modificados por mi.
RogerioF escribió:alguem podia colocar o hex hermesv4b+ spoof 3.50
gostaria de jogar o gran turismo mas dizem que é preciso esse hex
delagorra escribió:un crack c0d3m4st4 gracias por todo deci que estaba todo 2 paginas atras en español jajaja
chacal01 escribió:Sinceramente te pasastes C0d3m4st4 , les agradesco a todos los que colaboraron en esto . Lastima que me ilusione y todavia no puedo hacer andar el mio jeje :S . Me sale el famoso error 24, lo raro es que mi chip es el 1030. Pregunta de ignorante nada mas este error es si o si por el tema de los fuses y eso o puede lleguer hacer el puerto o algun cable roto ¿?¿?
Mil Gracias de nuevo por haber invertido tanto tiempo en esto .
Saludos Lea
unbas escribió:chacal01 escribió:Sinceramente te pasastes C0d3m4st4 , les agradesco a todos los que colaboraron en esto . Lastima que me ilusione y todavia no puedo hacer andar el mio jeje :S . Me sale el famoso error 24, lo raro es que mi chip es el 1030. Pregunta de ignorante nada mas este error es si o si por el tema de los fuses y eso o puede lleguer hacer el puerto o algun cable roto ¿?¿?
Mil Gracias de nuevo por haber invertido tanto tiempo en esto .
Saludos Lea
El error 24 suele ser por que no detecta el tipo de chip o por que no se comunica bien con el, a mi me dio un par de veces al principio pero era por que conectaba mal el cable ....
unbas escribió:c0dem4st4, quizás esto te interese:
HERMES_4B_PL3_355_SPOOF_SOURCE.rar
Lo dejo como adjunto ....
c0d3m4st4 escribió:EDITO
Joder!! Por fin!! Me cago en la puta! Anoche hasta las 5 de la mañana con el puto PL3, y resulta que el jodido descriptor.h del fuente original que estoy usando de Timwu está mal !! He cogido el original de kakaroto y ya está funcionando y comprobado.
Ya tenemos TODO para el ATMega16A Hermes, PL3 y PSGrade... venga, que saquen más cosas que las adapto también
c0d3m4st4 escribió:es con lo siguiente que quería ponerme, con los spoofs Gracias
por cierto, he editado el post anterior... ya casi estamos !unbas escribió:c0dem4st4, quizás esto te interese:
HERMES_4B_PL3_355_SPOOF_SOURCE.rar
Lo dejo como adjunto ....
chacal01 escribió:Por lo que veo mi Neojailbreak vino bloqueado por que revise todas las coneccions de nuevo y esta todo segundo e tutorial. Asi tendre que usarlo de llavero , mala suerte. buscare otra formar de hacer el downgrade
Igualmente seguire felicitandolos por todo lo que hicieron, gracias unbas tambien por la informacion.
Saludos Gente.
Lea
chacal01 escribió:Mira cuando le pongo read , primero me sale el error ese -24 y si le pongo ignore me lo lee despues
Y bueno los bits lo tengo asi , pero no me deja clickear en el spien :S, ahi me di cuenta de que tenia un problema.
c0d3m4st4 escribió:unbas, yo entiendo que lo tiene bloqueado pero desde el principio, es decir desde la primera programación con PonyProg, no le detecta el chip... es lo que me pasa a mi con los Stingers. Juraría que a mi ni me dejaba abrir la ventana de "config and security bits", aunque no me acuerdo. Si es así, no va a poder hacer nada, porque creo que el problema es precisamente ese, qeu SPIEN está deshabilitado, con lo que no podemos hacr nada con nuestro programador
Añadidos los fuentes del bootloader. El del psgroove llevará más tiempo, quiero ocar el makefile para poder generar todo desde el mismo.
unbas escribió:Esto de no tener el mio a mano, me reconcome ..... yo juraria que el mio siempre ha estado como en la imagen ....
chacal01 escribió:Asi es tal como dice c0d3m4st4 desde el inicio spien lo tengo bloqueado asi . Mala suerte para mi , una ultima pregunta hay alguna formar de armar algun dongle con algun pic o algo que me sirva para downgrade por lo menos y despues bueno usaria el neo este para los backup.
Gracias igual por interesarse en mi problema , saludos.
lea
c0d3m4st4 escribió:Señores, misión cumplida. Me he tenido que dar de hostias con el código para integrarlo todo en uno, pero ya está: PL3, Hermes y Hermes con spoof, todo en el mismo código, compilable por separado. Si algún día me da la vena, igual toco el Makefile para compilar del tirón, pero he acabado tan hasta los huevos de las variables en el makefile, que ya paso, se queda como está. Los que entendáis de esto veréis que hay mucha ñapa que he tenido que meter para integrar todo, pero bueno, teniendo en cuenta que llevo años sin tocar el C, creo que no está mal xD
Mis repos:
https://github.com/c0d3m4st4
Los hex:
http://www.sendspace.com/file/3sbste
Si hay dudas con la compilación, preguntad en el hilo.
unbas escribió:Te pago un par de cervezas que te lo mereces !!!
LeiSure escribió:Esta vez si que te has salido c0d3m4st4!!!
Ayer se lo hice a mi dongle y todo perfecto y a la primera siguiendo tu tutorial. Primero le metí el bootloader y después desde el USB le metí el Hermes 4b y funcionando perfectamente.
Ahora he notado que cuando está funcionando, el led verde está encendido pero el rojo también con una intensidad muy pequeña. No es que me importe ni mucho menos, lo digo como anécdota.
Un saludo
skameyon escribió:c0d3m4st4 eres un genio!!! Disculpa pero estoy teniendo problemas con los .hex compilados los de hermes van pero cuando abro un juego con om si tiene disco dentro no lo carga aparece el icono del br insertado cuando lo saco si carga pero al intentar iniciarlo me salta un error. El único que va es el pl3 .
skameyon escribió:Gt5, casthelvania y la hermandad ninguno iban intentare flashar en unos minutos nuevamente a ver como va. Otro problema que tenia y aun conservo es que no puedo instalar aplicaciones firmadas.
skameyon escribió:no no tengo killzone 2 castlevania solo me corre en hermes v3 y por supuesto en PL3 todos funcionan bien hasta ahora . Con el hermes v4B generado con payloadinjector funcionaban todos pero no podia instalar las aplicaciones firmadas por ejemplo la actualizacion para poder correr AC hermandad me tiraba este error 80029567 solucione con el programa para instalar demos PSN Demo Installer. Ahora intente instalar el OM firmado y me tira el mismo error con PL3 y con los demas.
Para ser mas especifico los juegos no son asignados a la imagen del BR si colocas un disco en mi caso haze cargas el backup que quieres correr cuando vas a la imagen sigue apareciendo haze si saco el disco e intento cargar de nuevo el backup aparece pero cuando intento correrlo me salta el error . No se ven ni las animaciones cuando te colocas para cargar el backup como que los archivos PARAM.SFO estuvieran dañados o algo asi el error que me tira cuando lo ejecuto es este 8001003A.
Mi dongle es el clon del jail segui todos los pasos al pie de la letra y no hubo ningun error .
skameyon escribió:gracias admiro mucho tu trabajo has hecho historia con los dongles que eran un ladrillo. Por el tiempo no te preocupes debemos saber esperar y lo importante es que el PL3 rula bien. De nuevo muchas gracias por todo tu trabajo.
skameyon escribió:No funciona comienza a parpadear el led rojo sin mas !c0d3m4st4 escribió:arreglado, me había dejado el último estado en la parte correspondiente al psgroove de hermes sin poner Lo raro es qeu funcionara algo xD Cualquier cosilla que os encontréis avisadme.
http://www.sendspace.com/file/xg82y3