IPB

Benvenuto Visitatore ( Log In | Registrati )


Cosa e come psp?, Programmazione basso livello. INFO
Denial

Gruppo icone
Membro
Gruppo: Membri
Messaggi: 13
Iscritto il: Mon 12 October 2009 - 15:00
Da: Roma
Utente Nr.: 89



Feedback: 0 (0%)
Messaggio #1 messaggio 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


Set.ISTRUZIONI.R2000
PDF.GUIDA.MIPS
Simulatore Architettura MIPS per windows,linux smile.gif
Architettura Mimps
Bump Mapping



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 programmazione strutturata C
#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]

Messaggio modificato da Denial il Monday 12 October 2009 - 22:13

Go to the top of the page Invia Messaggio
+Quote Post

Inserisci in questo messaggio
- Denial   Cosa e come psp?   Monday 12 October 2009 - 16:04
- - Daviex   Aspetto la continuazione   Monday 12 October 2009 - 17:38
- - Mario-of-war   cioè si fa eseguire questo codice inject con la fo...   Monday 12 October 2009 - 18:22
- - Denial   spero le informazioni che nel tempo vi darò vi fac...   Monday 12 October 2009 - 22:10
- - Gemini   Non ho capito esattamente il senso in cui vuoi pro...   Monday 12 October 2009 - 22:29
|- - Denial   CITAZIONE (Gemini @ Oct 12 2009, 11:29 PM...   Tuesday 13 October 2009 - 17:57
|- - Gemini   CITAZIONE (Denial @ Oct 13 2009, 06:57 PM...   Wednesday 14 October 2009 - 01:20
- - Denial   di fatto stò vedendo come organizzare la guida Co...   Wednesday 14 October 2009 - 12:01


Reply to this topicStart new topic
1 utenti stanno leggendo questa discussione (1 visitatori e 0 utenti anonimi)
0 utenti:

 

Modalità di visualizzazione: Passa a: Normale · Passa a: Lineare · Outline


RSS Versione Lo-Fi Oggi è il: Sun 28 April 2024- 04:37

.: Go!PSP.it :. Copyright © 2009-2015, All Rights Reserved.

Loghi, documenti e immagini contenuti in questo Sito appartengono ai rispettivi proprietari,
e sono resi pubblici sotto licenza Creative Commons

Creative Commons License
.::.