HomeForum
Best View on: Firefox Chrome Opera Edge

[INFO] Fixare crash da connessione mancante in mod. AHBPROT

QUESTO POST TI E/' PIACIUTO? DILLO A TUTTI I TUOI AMICI!

Condividi su Facebook Facebook Condividi su Twitter Twitter Condividi su Orkut Orkut Condividi su MySpace MySpace Condividi su Delicious Delicious Condividi su Technorati Technorati
Avatar utente
Moderatore
Moderatore
    Windows XP Firefox
Messaggi: 7168
Iscritto il: 12/01/2010, 14:00
Grz inviati: 373 volte
Grz ricevuti: 2727 volte
Il problema

Come molti di voi già sapranno, c'è un bug nell'Homebrew Channel che manda in crash le applicazioni homebrew qualora la Wii non sia connessa in rete e l'HBC sia configurato per caricare le applicazioni senza fare il reload dell'IOS, che per altro è l'unico metodo noto per avere i diritti di accesso AHBPROT.
Questo problema colpisce tutte le applicazioni caricate tramite HBC 1.0.7 o successivo.
Infatti l'HBC lancia una chiamata asincrona alla Wii per rilevare la rete.
Tipicamente l'IOS58 impiega molto tempo a rispondere qualora la connessione non venga trovata.
Il problema è che l'HBC non termina lato IOS la comunicazione con l'hardware di rete, in altre parole non cancella la chiamata asincrona prima di lanciare una applicazione homebrew.
Ne segue che la risposta IPC alla chiamata asincrona arriva quando la applicazione sta già girando, causando l'indesiderato crash.


Le soluzioni tampone note ad oggi

Ci sono 2 workaround noti che permettono di tamponare il problema ma entrambe presentano degli inconvenienti non indifferenti:
  • Il primo consiste nel forzare l'HBC a ricaricare l'IOS prima di avviare l'applicazione, cosa che di per sè chiude automaticamente qualunque chiamata pendente prevenendo il crash dell'applicazione.
    Tuttavia questa soluzione ci riporta indietro di almeno un anno, facendo perdere all'applicazione i diritti di accesso AHBPROT.
  • Una soluzione alternativa è quella di aspettare circa 1 minuto nel menu dell'HBC con la speranza che nel frattempo la chiamata asincrona termini di sua spontanea volontà.
    Tuttavia l'esperienza insegna che questa soluzione non funziona sempre per tutte le Wii in circolazione.


Alla ricerca di una soluzione definitiva

Questo vecchio Registrati o effettua il Login per visualizzare il link!. è stato davvero illuminante e mi ha dato sufficienti informazioni per iniziare a investigare.
La syscall 0x54, anche nota come set_ahbprot, permette di abilitare/disabilitare l'accesso AHBPROT. Si veda Registrati o effettua il Login per visualizzare il link!.
Disassemblando e ispezionando il Kernel (che contiene i moduli FFS, ES e IOSP) si scopre che la syscall 0x54 viene chiamata solo 2 volte ed entrambe le chiamate provengono dalla stessa funzione, la quale a sua volta è chiamata dallo ioctl LAUNCH_TITLE.
Questa funzione verifica i diritti di accesso nel TMD del titolo da lanciare, cioè i 4 byte con offset 0x1D8. Si veda Registrati o effettua il Login per visualizzare il link!.

Ecco una rapida traduzione in C della parte saliente di questa funzione:

Codice: Seleziona tutto
void check_access_rights(void *tmd)
{
  ...
  s32 access_rights = *(s32 *)(tmd+0x1D8);

  /* Shift bit 0 to the sign bit and check it */
  if ((access_rights << 31) < 0) {
   /* Bit 0 is ON so enable AHBPROT */
   set_ahbprot(1);
  }
  else {
   /* Bit 0 is OFF so disable AHBPROT */
   set_ahbprot(0);
  }
  ...
}


L'idea dietro al fix è quella di patchare questa funzione in memoria in modo da emulare la presenza dei diritti di accesso AHBPROT nel TMD senza andare di fatto a modificare il TMD stesso, cosa che naturalmente invaliderebbe la firma.
Dopo di ciò è sufficiente ricaricare l'IOS per terminare automaticamente la chiamata asincrona citata in precedenza.
Naturalmente per patchare l'IOS in esecuzione occorre avere i diritti AHBPROT, ma questo non è un problema poichè ce li fornisce l'HBC.

Capito questo il gioco è fatto. Dobbiamo abilitare l'AHBPROT chiamando la syscall set_ahbprot(1) indipendentemente dal bit 0 nel campo dei diritti di accesso del TMD.
In pratica si vuole che il codice precedente diventi qualcosa del genere:

Codice: Seleziona tutto
void check_access_rights(void *tmd)
{
  ...
  s32 access_rights = *(s32 *)(tmd+0x1D8);

  /* Shift bit 0 to the sign bit and check it */
  if ((access_rights << 31) < 0) {
   /* Bit 0 is ON so enable AHBPROT */
   set_ahbprot(1);
  }
  else {
   /* Bit 0 is OFF but we still enable AHBPROT */
   set_ahbprot(1);
  }
  ...
}



E finalmente il fix

Passiamo finalmente al codice per cercare il pattern binario, patchare il giusto byte in memoria e poi ricaricare l'IOS.
Questo è tutto ciò che ci serve per fixare il problema della connessione.

Codice: Seleziona tutto
#define HAVE_AHBPROT ((*(vu32*)0xcd800064 == 0xFFFFFFFF) ? 1 : 0)
#define MEM_REG_BASE 0xd8b4000
#define MEM_PROT (MEM_REG_BASE + 0x20a)

static void disable_memory_protection() {
   write32(MEM_PROT, read32(MEM_PROT) & 0x0000FFFF);
}

static u32 apply_patch(char *name, const u8 *pattern, u32 pattern_size, const u8 *patch, u32 patch_size, u32 patch_offset) {
   u8 *ptr_start = (u8*)*((u32*)0x80003134), *ptr_end = (u8*)0x94000000;
   u32 found = 0;
   u8 *location = NULL;
   while (ptr_start < (ptr_end - patch_size)) {
      if (!memcmp(ptr_start, pattern, pattern_size)) {
         found++;
         location = ptr_start + patch_offset;
         u8 *start = location;
         u32 i;
         for (i = 0; i < patch_size; i++) {
            *location++ = patch[i];
         }
         DCFlushRange((u8 *)(((u32)start) >> 5 << 5), (patch_size >> 5 << 5) + 64);
         ICInvalidateRange((u8 *)(((u32)start) >> 5 << 5), (patch_size >> 5 << 5) + 64);
      }
      ptr_start++;
   }
   return found;
}

const u8 es_set_ahbprot_pattern[] = { 0x68, 0x5B, 0x22, 0xEC, 0x00, 0x52, 0x18, 0x9B, 0x68, 0x1B, 0x46, 0x98, 0x07, 0xDB };
const u8 es_set_ahbprot_patch[]   = { 0x01 };

u32 IOSPATCH_AHBPROT() {
   if (HAVE_AHBPROT) {
      disable_memory_protection();
      return apply_patch("es_set_ahbprot", es_set_ahbprot_pattern, sizeof(es_set_ahbprot_pattern), es_set_ahbprot_patch, sizeof(es_set_ahbprot_patch), 25);
   }
   return 0;
}

int main(int argc, char* argv[])
{
   int ret;
 
   /* Enable AHBPROT on title launch */
   ret = IOSPATCH_AHBPROT();
   if (ret) {
      /* Reload current IOS, typically IOS58 */
      IOS_ReloadIOS(IOS_GetVersion());
   }
   else {
      /*
       * Fatal error!!!
       * Unable to patch the running IOS.
       * The application has been likely launched without AHBPROT access rights.
       */
   }

   /*
    * Put your code here
    */
}



Note

  • Questo approccio è stato pesantemente testato su una versione dell'IOS236 Installer v5 che ho appositamente modificato come descritto.
    Questa nuova versione non ha mai fallito una volta nonostante tutti i mie sforzi. : Lol :
    E tenete presente che quando lancio l'IOS236 Installer v5 ORIGINALE la mia Wii va praticamente sempre in code dump prima di riuscire a terminare la procedura.
  • La funzione apply_patch qui sopra ha la pretesa di essere generica, quindi non è ottimizzata ed una bella fetta della memoria viene scandagliata alla ricerca del pattern binario.
    Potreste voler restringere questo intervallo di memoria, tuttavia dai test risulta che la funzione è veloce quanto basta per evitare problemi, parliamo comunque di millesimi di secondo.
  • Con lo stesso approccio descritto in questo topic siamo in grado di patchare il bit 1 del campo per i diritti di accesso del TMD in modo da abilitare la modalità DVD video.
    Se siete interessati a questa patch fatemelo sapere e la rilascerò.

Indice delle Guide di Hackwii per categorie


Immagine
L'angolo delle... (C) (A) (Z) (Z) (Agc)Immagine
Immagine

Le idee sono come le tette: se non sono abbastanza grandi si possono sempre gonfiare.

La vita è come la scaletta del pollaio: corta corta e piena di merda.

Per questo messaggio l' autore davebaol ha ricevuto 6 "Thanks":
Actar (12/07/2011, 19:50) • barbycha (12/07/2011, 20:18) • cellax (19/07/2011, 9:46) • numerone (12/07/2011, 20:00) • Pizz81 (13/07/2011, 14:23) • zotto (12/07/2011, 19:43)
Rating: 1.55%
 
Avatar utente
Manual Maker
Manual Maker
    Windows 7 Internet Explorer 8
Messaggi: 1299
Iscritto il: 04/01/2010, 16:39
Località: Italico del nord
Grz inviati: 73 volte
Grz ricevuti: 220 volte
Sesso:
complimenti dave,mi spiegheresti questa frase?

Con lo stesso approccio descritto in questo topic siamo in grado di patchare il bit 1 del campo per i diritti di accesso del TMD in modo da abilitare la modalità DVD video.
Se siete interessati a questa patch fatemelo sapere e la rilascerò.


che cosa fa la modalità dvd video?
dove si abilita ed a che serve?

(anche se la risposta alla seconda domanda posso immaginarmela)
Avatar utente
Moderatore
Moderatore
    Windows XP Firefox
Messaggi: 11953
Iscritto il: 31/05/2010, 23:15
Località: Torino (o giù di li)
Grz inviati: 772 volte
Grz ricevuti: 2526 volte
Sesso:
A parte i miei ovvi complimenti.

Per comprendere (E NON BENE) quello che hai scritto, ho riletto tutto 3 volte...

cominci a mettere paura : Eeek :

bando alle ciance...

Tutto questo ovviamente vale solo per l'installazione del 236.

Una volta messo il 236 senza problemi di ogni tipo.. sarebbe una passeggiata (è l'unica cosa "variabile" della modifica)

Ne consegue però che i programmi tipo priiloader saranno cmq soggetti a questo tipo di problematica... e in quel caso son *azzi.
E quindi in questo converrebbe avviarlo sempre da forwarder per ricaricare il IOS.

o sbaglio? : Blink :
Avatar utente
Moderatore
Moderatore
    Windows XP Firefox
Messaggi: 7168
Iscritto il: 12/01/2010, 14:00
Grz inviati: 373 volte
Grz ricevuti: 2727 volte
@Zotto
Deduco che non hai letto l'articolo di Bushing citato nel post. : Chessygrin :
La modalità dvd video attiva nel modulo DI il riconoscimento dei comandi di lettura DVD video.
Veniva utilizzata ad esempio dal vecchio canale nascosto DVDX, ormai abbandonato dopo la scoperta dell'AHBPROT.

@Actar
No, è proprio questo il bello. Vale in generale per tutti gli homebrew che girano sotto AHBPROT.
Quindi se ne potranno avvalere il d2x Installer, Priiloader, DopMii Wiibrew Edition e quant'altri.
E' sufficiente che le applicazioni vengano aggiornate, tutto qui. Ho già provveduto a rendere pubblica la cosa su gbatemp.

Ah, io per i test ho scelto di modificare l'IOS236 Installer perchè è una applicazione relativamente semplice, piccola e poco invasiva.

E non ti stupire più di tanto, sono ormai 7 mesi che metto mani al cios e disassemblo ios.
Ormai li conosco come le mie tasche o quasi. : Chessygrin :

Indice delle Guide di Hackwii per categorie


Immagine
L'angolo delle... (C) (A) (Z) (Z) (Agc)Immagine
Immagine

Le idee sono come le tette: se non sono abbastanza grandi si possono sempre gonfiare.

La vita è come la scaletta del pollaio: corta corta e piena di merda.
Avatar utente
Moderatore
Moderatore
    Windows XP Firefox
Messaggi: 11953
Iscritto il: 31/05/2010, 23:15
Località: Torino (o giù di li)
Grz inviati: 772 volte
Grz ricevuti: 2526 volte
Sesso:
davebaol ha scritto:E' sufficiente che le applicazioni vengano aggiornate, tutto qui.

Ah, io per i test ho scelto di modificare l'IOS236 Installer perchè è una applicazione relativamente semplice, piccola e poco invasiva.


Chiarissimo. : Wink :

Ma gli hb che necessitano dei diritti AHBPROT sono solo quelli ?

Onestamente sulla mia wii il 236 installer non ha MAI crashato (e ne ho trovata solo una con cui son diventato scemo).

Ma se può servire vediamo come si comporta su una wii in cui non dava problemi nemmeno prima.
Avatar utente
Developer
Developer
    Windows 7 Chrome
Messaggi: 366
Iscritto il: 16/02/2010, 9:46
Grz inviati: 15 volte
Grz ricevuti: 78 volte
Complimenti, ho provato anch'io e funziona ;)
Immagine
Avatar utente
Wii Master
Wii Master
    Windows XP Firefox
Messaggi: 1315
Iscritto il: 24/02/2010, 18:52
Grz inviati: 133 volte
Grz ricevuti: 209 volte
Sesso:
Scusate, ma dove si trova la versione patchata del 236 installer ??

P.S.
Dave, sei un mostro !!!
Wii 4.0, CiosX D2X v8 Final (247->37 248->38 249->56 250->57 251->58), Hermes cIOS 202, 222, 223, 224 V5.1R, WiiFlow, USB Loader GX e Configurable USB Loader (CIOS 249), HD WD 1 Tb - FAT32
Avatar utente
Manual Maker
Manual Maker
    Windows XP Internet Explorer 8
Messaggi: 1299
Iscritto il: 04/01/2010, 16:39
Località: Italico del nord
Grz inviati: 73 volte
Grz ricevuti: 220 volte
Sesso:
davebaol ha scritto:@Zotto
Deduco che non hai letto l'articolo di Bushing citato nel post. : Chessygrin :


Deduci bene : Lol :
Grazie del chiarimento e ancora complimenti! : Thumbup :
Avatar a caso
Noob User
Noob User
    Windows XP Firefox
Messaggi: 7
Iscritto il: 12/07/2011, 23:10
Grz inviati: 1 volte
Grz ricevuti: 0 volte
Sesso:
....scusate ma io sono poco pratico, ieri ho aggiunto alla sd della mia wii il programma wiimc, ho provato a farlo funzionare ma quando volevo vedere un dvd mi dava questo messaggio:ahbprot non è attivo, poi quando si avvia il wiimc mi dava questo messaggio: ios non supportato cosa devo fare???
Grazie.
Avatar utente
Wii User
Wii User
    Windows XP Internet Explorer 7
Messaggi: 768
Iscritto il: 02/12/2010, 22:13
Grz inviati: 26 volte
Grz ricevuti: 131 volte
Devi postare nella sezione aiuti e richieste questo non è il posto adatto ...
My Wii:
Spoiler: Mostra

Wiiflow/USB Loader GX(USB) Neogamma(DVD)!
StartPatch!
System menu 4.1!
Bootmii as Boot2!
cIOS d2x!

Immagine
Immagine
Avatar utente
Developer
Developer
    Windows 7 Chrome
Messaggi: 366
Iscritto il: 16/02/2010, 9:46
Grz inviati: 15 volte
Grz ricevuti: 78 volte
fabaf ha scritto:Scusate, ma dove si trova la versione patchata del 236 installer ??

Non si trova, c'è da modificare il sorgente e poi compilarlo...
Se vuoi ti passo la mia, tanto non posso verificare che funzioni (a me va sempre liscio anche con il vecchio installer)
Immagine
Avatar utente
Moderatore
Moderatore
    Windows XP Chrome
Messaggi: 7705
Iscritto il: 24/10/2009, 2:12
Località: Nel boschetto della mia fantasia
Grz inviati: 139 volte
Grz ricevuti: 728 volte
Sesso:
: Chessygrin : Io non so cosa dire XD è tutto arabo quello che ho letto.. va un tantino fuori dalla mia compresione XD posso solo farti i miei complimenti ! : Chessygrin : : Lol :
Avatar utente
Wii User
Wii User
    Windows 7 Firefox
Messaggi: 270
Iscritto il: 04/01/2010, 19:50
Grz inviati: 22 volte
Grz ricevuti: 31 volte
Sesso:
che dire complimenti dave!
magari aggiorni anche i famosi darkcorp che non vengono rilasciati +

ciauz
Spoiler: Mostra
Miei Topic
[GUIDA] Salvataggi e backup da giochi originali DS
Tutti i kernek e firmware per le Flashcards
[GUIDA] Flashcard DsTwo recensione e guida all'uso]
Wood kernel per r4
[VI-PD-VR] Nintendo Ds (meglio se blu o nero)

Ds Ciccio argento con R4 revolution + espansione SLOT2 ram-rumble ezflashV + MicroSD Trascend 2GB
Wii Bianca 4.2e, SD kingstone 4gb softmoddata DarkCorp v1.1,, 249 d2x v6
3DS Nera + Flashcard DsTwo + kingstone 4GB microSDHC
Avatar utente
Moderatore
Moderatore
    Windows XP Firefox
Messaggi: 7168
Iscritto il: 12/01/2010, 14:00
Grz inviati: 373 volte
Grz ricevuti: 2727 volte
entaro ha scritto:che dire complimenti dave!
magari aggiorni anche i famosi darkcorp che non vengono rilasciati +

ciauz

LOL manco se mi paghi. : Chessygrin :

Indice delle Guide di Hackwii per categorie


Immagine
L'angolo delle... (C) (A) (Z) (Z) (Agc)Immagine
Immagine

Le idee sono come le tette: se non sono abbastanza grandi si possono sempre gonfiare.

La vita è come la scaletta del pollaio: corta corta e piena di merda.
Avatar utente
Wii User
Wii User
    Windows 7 Firefox
Messaggi: 358
Iscritto il: 16/02/2010, 22:53
Grz inviati: 51 volte
Grz ricevuti: 69 volte
Sesso:
davebaol ha scritto:Se siete interessati a questa patch fatemelo sapere e la rilascerò.


a me interessa.
Wii 4.2E - cIOSX Rev.21 d2x-v10-beta53-alt(53->245/55->246/37->247/38->248/56->249/57->250/58->251) + cIOS Hermes rev.5.1 202->57/Rev.5.1 222->38/223->60/224->57 - Priiloader 0.8(rev.123) - Bootmii as IOS + CFG USB Loader Mod (rev 70.78.11) + USBLoaderGX_r1272_mod_v6 + Nintendont v6.492 + wiiflow lite 5.4.9
Avatar utente
Wii Master
Wii Master
    Windows XP Firefox
Messaggi: 1315
Iscritto il: 24/02/2010, 18:52
Grz inviati: 133 volte
Grz ricevuti: 209 volte
Sesso:
Ricky ha scritto:
fabaf ha scritto:Scusate, ma dove si trova la versione patchata del 236 installer ??

Non si trova, c'è da modificare il sorgente e poi compilarlo...
Se vuoi ti passo la mia, tanto non posso verificare che funzioni (a me va sempre liscio anche con il vecchio installer)


Grazie Ricky, magari. Perché non la metti a disposizione di tutti gli utenti (così saremo in tanti a collaudarla) ?
Wii 4.0, CiosX D2X v8 Final (247->37 248->38 249->56 250->57 251->58), Hermes cIOS 202, 222, 223, 224 V5.1R, WiiFlow, USB Loader GX e Configurable USB Loader (CIOS 249), HD WD 1 Tb - FAT32
Avatar utente
Moderatore
Moderatore
    Windows XP Firefox
Messaggi: 7168
Iscritto il: 12/01/2010, 14:00
Grz inviati: 373 volte
Grz ricevuti: 2727 volte
fabaf ha scritto:
Ricky ha scritto:
fabaf ha scritto:Scusate, ma dove si trova la versione patchata del 236 installer ??

Non si trova, c'è da modificare il sorgente e poi compilarlo...
Se vuoi ti passo la mia, tanto non posso verificare che funzioni (a me va sempre liscio anche con il vecchio installer)


Grazie Ricky, magari. Perché non la metti a disposizione di tutti gli utenti (così saremo in tanti a collaudarla) ?

Registrati o effettua il Login per visualizzare il link!.

E' la v6 MOD da cui ho rimosso la AP trap, che è solo una gran seccatura.

Indice delle Guide di Hackwii per categorie


Immagine
L'angolo delle... (C) (A) (Z) (Z) (Agc)Immagine
Immagine

Le idee sono come le tette: se non sono abbastanza grandi si possono sempre gonfiare.

La vita è come la scaletta del pollaio: corta corta e piena di merda.

Per questo messaggio l' autore davebaol ha ricevuto un "Thanks" da
Actar (16/07/2011, 13:26)
Rating: 0.26%
 
Avatar a caso
Noob User
Noob User
    Linux Firefox
Messaggi: 4
Iscritto il: 20/06/2011, 18:36
Grz inviati: 0 volte
Grz ricevuti: 0 volte
Sesso:
Anche a me hombrew Channell 1.08 sui ios58 non patchato mi va in crash cosa devo fare per risolvere il problema ?


Torna a Wii Hacking

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti