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ò
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 (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 )
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
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
E' tardi scusate! Domani revisiono il tutorial se ho scritto qualche castroneria !
[IN AGGIORNAMENTO]
Aspetto la continuazione
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
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!
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.
di fatto stò vedendo come organizzare la guida 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)