Versione Stampabile della Discussione

Clicca qui per visualizzare questa discussione nel suo formato originale

.:Go!PSP Forum:. News sulle Console Sony - Hardware - Custom Firmware - Modding _ Programmazione PSP & ROM Hacking _ Cosa e come psp?

Inviato da: Denial il Monday 12 October 2009 - 16:04



Salute a tutti:

Per inaugurare la sezione volevo dare qualche info riguardo la programmazione a basso livello per la console di casa sony, solo a scopo di studio.


Il Processore principale Allegrex è basato sull'Architettura MIPS R4000 a 32-bit con frequenza variabile da 1 a 333 MHz di default: "222 MHz"
Coprocessore matematico Media Engine CXD5026-203GG con frequenza variabile da 1 a 333 MHz di default: 222 MHz



Processore grafico Sony CXD2962GG da 166 MHz
Memoria DRAM da 2 MB Embedded (integrata)
Rendering di picco pari a 33 Milioni di poligoni/secondo a 60 fps ed effetti grafici avanzati di Bump Mapping, blur e luci dinamiche.


Glossario:
Macchina 64bit per istruzione:
Word: 64bit /Per macchine da 32bit Double Word
Half word:32bit /è una word per macchine da 32bit ,double word per macchine da 16bit


http://www.stanford.edu/class/ee282h/projects/info/isa.html
http://www.ece.eng.wayne.edu/~gchen/ece4680/lecture-notes/isa-2.pdf
http://pages.cs.wisc.edu/~larus/spim.html
http://it.wikipedia.org/wiki/Architettura_MIPS
http://it.wikipedia.org/wiki/Rendering



Cosa sono gli exploit:

Cosa avviene durante il caricamento/esecuzione di un programma?.....

Caricamento di un programma: caricamento in memoria, e dalla memoria al -->sistema di transcodificazione -> elaborazione CPU/cache+componenti internal bus controlled",in aggiunta possiamo parlare di caricamento dati da buffer.

Quando si parla di buffer di memoria è come se si parlasse di una credenza dove si ripone momentaneamente un dato per poi utilizzarlo successivamente. Di solito vengono posti in ram questi dati per poi venire manipolati...
come per esempio il sistema I\O di una tastiera.. si preme un tasto questo viene registrato questo input e inserito nel sistema(detto in termini molto astratti) fino a quando una qualsiasi operazione viene eseguita su di esso o grazie ad esso.

Come si sfrutta per realizzare un exploit? Tutto ciò smile.gif
Ovvero si prende un particolare momento in cui viene caricato/a una serie di istruzioni/e e ci si intromette realizzando un inject(esecuzione set istruzioni forzate e una recall per richiamare il programma principale) durante il loading del programma.

Ovvero durante un qualsiasi caricamento in una struttura top->down è possibile salvo numerose problematiche introdurre codice non autorizzato nell'esecuzione di un codice già autorizzato dalla macchina stessa.


Ingredienti:

#1.conoscenza di base del linguaggio matematico
#2. conoscenza programmazionehttp://it.wikipedia.org/wiki/Programmazione_strutturata
#3.Voglia e immaginazione come disse Einstein l'immaginazione è più importante della conoscenza.



//Prima stesura
Tuttò ciò sintetizzato al massimo darà luogo a ben più amplie spiegazioni più avanti partendo da una rapida visione dalla simbologia,alla strutturazione dei primi programmi, per C, MIPS per poi procedere alla realizzazione di vere e proprie applicazioni per PSP o ogni genere di cosa partorisca, da questi tutorial, la vostra mente. Verranno anche spiegate alcune librerie già scritte ad hoc per la psp wink.gif (e già perchè le librerie attraverso funzioni elementari eseguono funzioni ben più complesse che cmq sia finisco a livello basso ovvero in istruzioni Assembly poi in macchina---> per processori Mips smile.gif )

Esempio:
programmazione strutturata--> traduzione in,
codice assembly ,traduzione in-->
stringhe binario (linguaggio macchina) di significato logico per l'unita di esecuzione.

Ex32bit : 0000 0000 0000 0000 0000 0000 0000 0000
32 bit attivabili in funzione di funzioni definite come maskere da applicare alla stringa binaria--> caricata dalla memoria per finire come comando riconosciuto dalla CPU (attraverso transcodifiche varie).

Esempio generico: decido che i primi 8bit da destra rappresentato un numero decimale : dunque 2^8=256 combinazioni posssibili ovvero 256-1(si parte con esplosioni di potenze da 0 con significato posizionale da sinistra a destra dunque avendo 256 combinazioni possibili possiamo rappresentare compreso lo 0 255 numeri (256-1)) numeri rappresentabili i successivi 8bit idem , e gli altri combinati appositamente faranno compiere operazioni aritmetiche sui numeri presenti negli ultimi 16bit della stringa.

1 set di bit scostato di 24bit da sinistra ---> rappresentazione del numero 18
0000 0000 0000 0000 0000 0000 0001 0010 = [(2^1=2 + 2^4)=(2+16)]=18
1 set di bit scostato di 16bit da sinistra ---> rappresentazione del numero 17
0000 0000 0000 0000 0001 0001 0001 0010 = [(2^0=1+2^4=16)=(1+16)]=17
Per eseguire una somma come facciamo a comunicare al processore che vogliamo addizionare 17 a 18?
Esistono delle maskere predefinite (set di istruzioni) che determinano quali byte(mean: 4bit) servono della stringa di bit se attivati ad eseguire OPERAZIONI.

Creiamo noi una maskera di esempio (ASTRATTA): quante sono le operazioni di base? 4. Giusto? Quindi ci servono 2^2 combinazioni per rappresentare 4 operazioni quindi solo 2bit prendiamo dunque i primi due bit della stringa e li impostiamo come quanto segue:


ADDIZIONE:00
SOTTRAZIONE:01
MOLTIPLICAZIONE:10
DIVISIONE:11

PERFETTO i primi 2 bit sono riservati per le operazioni aritmetiche!
dunque che ci serve? Dati iniziali li abbiamo... quale operazione eseguirci la abbiamo... rimane sapere dove mettere il risultato ci serve un indirizzo di memoria...!!! E deve essere questo spazio abbastanza grande da poter ricevere la somma di due numeri composti da massimo 255 elementi l'uno. ovvero 512 ovvero 2^9=512 - 1 511...bastano per rappresentare 510 numeri XD quindi in una macchina che può al max rappresentare 2^8 combinazioni la somma di due numeri il cui risultato fosse più grande di 255 genererebbe un errore di overflow ma di questo ne parleremo più avanti. Poniamo caso che la memoria sia bella libera e 2^9 bit liberi ci siano smile.gif
dunque:
0x= stringa esadecimale
[]= gruppi di 4 bit = 1 byte
{}=gruppi da 8bit= 2byte
MASK:[2bit per le operazioni,2bit liberi],[4 bit liberi],{DESTINAZIONE RISULTATO},{dato x},{dato y}
DATO FINALE da mandare all'unita che capirà l'istruzione in linguaggio macchina:[0000],[0000],[0x12E in esadecimale (posizione 302 in decimale)],{0001 0001},{0001 0010}
Tutto ciò somma due numeri interi impressionante vero? Vi sorgono dubbi in epoca quanto fosse scomodo e che innovazione fù dunque l'assembly che con : ADD a, x ,y equivaleva ad a=x+y smile.gif

E' tardi scusate! Domani revisiono il tutorial se ho scritto qualche castroneria wink.gif!






[IN AGGIORNAMENTO]

Inviato da: Daviex il Monday 12 October 2009 - 17:38

Aspetto la continuazione

Inviato da: Mario-of-war il Monday 12 October 2009 - 18:22

cioè si fa eseguire questo codice inject con la forza ??? con che processo si fa eseguire ??? come fa il software a non bloccare questo codice bacato ????credo di aver chiesto troppo grazie

Inviato da: Denial il Monday 12 October 2009 - 22:10

spero le informazioni che nel tempo vi darò vi facciano appassionare al mondo delle macchine di John von Neumann e non solo a quello che oggigiorno fa girare facebook o msn!

Inviato da: Gemini il Monday 12 October 2009 - 22:29

Non ho capito esattamente il senso in cui vuoi procedere con questa guida. Lo scopo è quello di programmare su macchine con processori MIPS oppure disassemblare del codice già generato? Oppure se intende spiegare in generale la programmazione, il che non richiederebbe necessariamente che il processore in questione appartenga a questa famiglia visto che lì interviene il compilatore a rimuovere le grane.

Inviato da: Denial il Tuesday 13 October 2009 - 17:57

CITAZIONE (Gemini @ Oct 12 2009, 11:29 PM) *
Non ho capito esattamente il senso in cui vuoi procedere con questa guida. Lo scopo è quello di programmare su macchine con processori MIPS oppure disassemblare del codice già generato? Oppure se intende spiegare in generale la programmazione, il che non richiederebbe necessariamente che il processore in questione appartenga a questa famiglia visto che lì interviene il compilatore a rimuovere le grane.

parto da una piccola introspezione nel mondo dei calcolatori fino a dare un po di conoscenze indispensabili per capire come cosa si stà facendo e perchè no trovare soluzioni.

Il compilatore rimuove le grane ma non la capacità di strutturare un buon programma rapido preciso ed efficace per queste procedure di reverse engineering.

Come puoi pretendere di capire come si prepara la pasta se non sai cosa sono le uova e la farina? : Disse Einstein

Procederò per stadi con vari trattati probabilmente realizzerò piccoli pdf smile.gif Almeno è tutto più pulito e ordinato smile.gif

Lo scopo della guida e aprire la mente a chi vuole parlare con le macchine in particolar Modo diretto alla psp, far capire che le abilità di un dark_alex le può avere chiunque con un minimo di applicazione e conoscenze in determinati ambiti.

Parallelamente farò qualche guida sulle librerie attualmente già esistenti per la psp giusto per far un po di colore smile.gif

Staremo a vedere cosa ne viene fuori wink.gif

Naturalmente tutto a scopo didattico smile.gif non si parlerà di bucare crakkare o altri termini poco felici verso questa disciplina smile.gif

Inviato da: Gemini il Wednesday 14 October 2009 - 01:20

CITAZIONE (Denial @ Oct 13 2009, 06:57 PM) *
Il compilatore rimuove le grane ma non la capacità di strutturare un buon programma rapido preciso ed efficace per queste procedure di reverse engineering.

In effetti conoscere il risultato della compilazione aiuta enormemente a fare determinate scelte. Tuttavia la cosa andrebbe limitata al modo in cui vengono trasformate particolari strutture di codice, altrimenti poi ti ritrovi a dover spiegare ogni singola assurdità di GCC e soci, come l'utilizzo insensato di multu invece di divu per realizzare una semplice divisione con interi non potenza di 2.

CITAZIONE
Come puoi pretendere di capire come si prepara la pasta se non sai cosa sono le uova e la farina? : Disse Einstein

C'è tanta di quella gente che programma a livello professionale e che crea del codice veramente orrendo senza preoccuparsi di farina e uova, e in fase di disassemblaggio lo noti dalla prima all'ultima riga (Koji Igarashi è uno di questi). Ma mi fermo qui altrimenti arrivo anche a parlare di quelli che non sanno nemmeno cosa siano malloc/new e buffer assortiti. xD

Inviato da: Denial il Wednesday 14 October 2009 - 12:01

di fatto stò vedendo come organizzare la guida smile.gif Cosa e come spiegarlo. Tempo ed esami permettendo.

Mi sono accorto che chi studia con metodologia e passione --> rispetto a chi studia a memoria il 99% di chi vuole prendersi una laurea fa poi applicazione subito nel lavoro generando gli orrori della post compilazione...

ok che esiste un assemblatore automatico ma generare errori di allocazione senza accorgersene è da pazzi incoscenti! Roba da blue screen o loop infiniti te lo assicuro! XD

Pensa io studio ing informatica e mai vista gente più ignorante dentro quella classe ... XD

Fornito da Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)