|
Verfasser |
Nachricht |
HacKmaN
Ex-Developer
Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009
Status:
Offline
Danke erhalten: 3319
|
[TUT-1] Binarys für ein Exploit - Mercury
So, hi alle zusammen!
Erstmal: Sorry, falls die Zeilenumbrüche beschissen sind, ich habe dieses TUT offline mit Notepad++ geschrieben
Wer Fehler findet, bitte melden (ich meine mir melden, nicht einem Moderator )
Dieses Tutorial ist größtenteils eine reine Übersetztung von FreePlays Code, deshalb danke an ihn
Ich hab mich ja wie schon oft gesagt viel mit exploit beschäftigt, und hab mich dazu entschieden 2 kleine Tutorials zu machen:
- Eins für Mercury (mit dem SDK von FreePlay)
- Eins für das 5.03 TIFF Exploit (für dass gibt es kein SDK)
Danke an:
- Team C+D: Das Mercury Exploit, den Binary loader und das NET ifHandle Kernel-Mode Exploit (UnlockKmem_9A6261EC(NetIfhandle_lib_9A6261EC) )
- FreePlay: Für das veröffentlichen des Exploits und das SDK (ja, ich danke im dafür, ohne ihn hätte ich womöglich nie für ein GameSploit gecodet )
- Raiden1996: Für seine großartige Hilfe in sachen Function Imports und MIPS Programmierung
- PSPDEV: Für das Modul Tutorial und das perfekte Forum
- lan.st: Für das super Forum (dort und auf PSPDEV kann man so viel lernen )
- Jeden den ich vergessen habe
Was jeder haben sollte, der dieses Tutorial liest:
- Grundkenntnisse in C
- Damit es besser verständlich ist empfehle ich auch Grundlagen in MIPS
- Eine Mercury UMD (ein SK ist empfehlenswert, die ideotisch langen Ladezeiten sind beim coden echt nervig)
- Eine eingerichtete Entwicklungsumgebung, egal ob MinPSPw oder Cygwin
- Dieses Packet. Es enthält den Binary loader von FreePlay/Team C+D und das FreePlay's SDK.
/* Wenn ihr Funktionen importieren wollt (in diesem TUT aber nicht ausführlich besprochen), braucht ihr auch folgendes: */
- PRXTOOL von PSPDEV.org
- Die paf.prx eurer Firmware und die Libdoc von SilverSpring
Also fangen wir mal an
Entpackt das gedownloadete Archiv irgendwo auf der Festplatte und geht in den Ordner wo die Datei header Datei "mercury_sdk" und der Ordner "Includes" sind.
Euch ist sicher aufgefallen, dass weder eine Quelldatei noch eine Makefile vorhanden ist... Die erstellen wir miteinander
Erstellt euch jetzt eine Datei namens "crt0.c". Aus dieser Datei werden wir den main-thread deklinieren und laden.
Öffnet die Datei und gebt folgende Zeile ein:
int main(void);
void _start(unsigned long, unsigned long *) __attribute__ ((section (".text.start")));
void _start(unsigned long arglen, unsigned long *argp)
{
main();
while(1);
};
Die Erklährung:
int main(void);
Der Prototyp meiner main Funktion.
void _start(unsigned long, unsigned long *) __attribute__ ((section (".text.start")));
Jeder der MIPS kann weiß, dass der Hauptspeicher in verschiedene Sektionen aufgeteilt ist (z.B. ".data" für Variablen und ".text" für Funktionen).
Wenn das Exploit geladen wird, wird die Sektion ".text.start" ausgeführt. Durch diese Zeile weiß der Compiler, wo der Ausführbare Bereich beginnt.
Warum es _start sein muss, erklähr ich später.
void _start(unsigned long arglen, unsigned long *argp)
{
main();
while(1);
};
Übersetzt: Starte die Funktion "main(void)" und warte wenn sie beendet wird für immer.
So. Jetzt schließt die crt0.c, erstellt euch die Datei main.c, öffnet sie und schreibt folgendet Text hinein:
#include "mercury_sdk.h"
#include "crt0.c"
#define SCREEN_WIDTH 512
#define SCREEN_HEIGHT 272
#define LINESIZE 512
#define CMAX_X 60
#define CMAX_Y 38
#define FRAMESIZE 0xAA000
#define INDEX_BLACK 10
#define INDEX_WHITE 1
#define INDEX_PINK 2
#define INDEX_RED 3
#define INDEX_BLUE 4
#define INDEX_GREEN 5
#define INDEX_YELLOW 6
#define INDEX_CYAN 7
#define INDEX_GRAY 9
#define INDEX_DARKGREEN 0
#define RANDOM rand()%9
unsigned char *vramtop=(unsigned char *)0x04000000;
unsigned long drawframe;
unsigned char *GetVramAddr(unsigned long x, unsigned long y)
{
return vramtop + (drawframe?FRAMESIZE:0) + x*4 + y*LINESIZE*4 + 0x40000000;
}
unsigned long colours[11] =
{
0x00008800L,
0x00FFFFFFL,
0x00FF00FFL,
0x000000FFL,
0x00FF0000L,
0x0000FF00L,
0x0000FFFFL,
0x00FFFF00L,
0x00FFFF88L,
0x00888888L,
0x00000000L
};
const unsigned char font[] =
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00,
0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00,
0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00,
0x30,0x7C,0xC0,0x78,0x0C,0xF8,0x30,0x00,
0x00,0xC6,0xCC,0x18,0x30,0x66,0xC6,0x00,
0x38,0x6C,0x38,0x76,0xDC,0xCC,0x76,0x00,
0x60,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,
0x18,0x30,0x60,0x60,0x60,0x30,0x18,0x00,
0x60,0x30,0x18,0x18,0x18,0x30,0x60,0x00,
0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00,
0x00,0x30,0x30,0xFC,0x30,0x30,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x60,
0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,
0x06,0x0C,0x18,0x30,0x60,0xC0,0x80,0x00,
0x7C,0xC6,0xCE,0xDE,0xF6,0xE6,0x7C,0x00,
0x30,0x70,0x30,0x30,0x30,0x30,0xFC,0x00,
0x78,0xCC,0x0C,0x38,0x60,0xCC,0xFC,0x00,
0x78,0xCC,0x0C,0x38,0x0C,0xCC,0x78,0x00,
0x1C,0x3C,0x6C,0xCC,0xFE,0x0C,0x1E,0x00,
0xFC,0xC0,0xF8,0x0C,0x0C,0xCC,0x78,0x00,
0x38,0x60,0xC0,0xF8,0xCC,0xCC,0x78,0x00,
0xFC,0xCC,0x0C,0x18,0x30,0x30,0x30,0x00,
0x78,0xCC,0xCC,0x78,0xCC,0xCC,0x78,0x00,
0x78,0xCC,0xCC,0x7C,0x0C,0x18,0x70,0x00,
0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,
0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x60,
0x18,0x30,0x60,0xC0,0x60,0x30,0x18,0x00,
0x00,0x00,0xFC,0x00,0x00,0xFC,0x00,0x00,
0x60,0x30,0x18,0x0C,0x18,0x30,0x60,0x00,
0x78,0xCC,0x0C,0x18,0x30,0x00,0x30,0x00,
0x7C,0xC6,0xDE,0xDE,0xDE,0xC0,0x78,0x00,
0x30,0x78,0xCC,0xCC,0xFC,0xCC,0xCC,0x00,
0xFC,0x66,0x66,0x7C,0x66,0x66,0xFC,0x00,
0x3C,0x66,0xC0,0xC0,0xC0,0x66,0x3C,0x00,
0xF8,0x6C,0x66,0x66,0x66,0x6C,0xF8,0x00,
0xFE,0x62,0x68,0x78,0x68,0x62,0xFE,0x00,
0xFE,0x62,0x68,0x78,0x68,0x60,0xF0,0x00,
0x3C,0x66,0xC0,0xC0,0xCE,0x66,0x3E,0x00,
0xCC,0xCC,0xCC,0xFC,0xCC,0xCC,0xCC,0x00,
0x78,0x30,0x30,0x30,0x30,0x30,0x78,0x00,
0x1E,0x0C,0x0C,0x0C,0xCC,0xCC,0x78,0x00,
0xE6,0x66,0x6C,0x78,0x6C,0x66,0xE6,0x00,
0xF0,0x60,0x60,0x60,0x62,0x66,0xFE,0x00,
0xC6,0xEE,0xFE,0xFE,0xD6,0xC6,0xC6,0x00,
0xC6,0xE6,0xF6,0xDE,0xCE,0xC6,0xC6,0x00,
0x38,0x6C,0xC6,0xC6,0xC6,0x6C,0x38,0x00,
0xFC,0x66,0x66,0x7C,0x60,0x60,0xF0,0x00,
0x78,0xCC,0xCC,0xCC,0xDC,0x78,0x1C,0x00,
0xFC,0x66,0x66,0x7C,0x6C,0x66,0xE6,0x00,
0x78,0xCC,0xE0,0x70,0x1C,0xCC,0x78,0x00,
0xFC,0xB4,0x30,0x30,0x30,0x30,0x78,0x00,
0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xFC,0x00,
0xCC,0xCC,0xCC,0xCC,0xCC,0x78,0x30,0x00,
0xC6,0xC6,0xC6,0xD6,0xFE,0xEE,0xC6,0x00,
0xC6,0xC6,0x6C,0x38,0x38,0x6C,0xC6,0x00,
0xCC,0xCC,0xCC,0x78,0x30,0x30,0x78,0x00,
0xFE,0xC6,0x8C,0x18,0x32,0x66,0xFE,0x00,
0x78,0x60,0x60,0x60,0x60,0x60,0x78,0x00,
0xC0,0x60,0x30,0x18,0x0C,0x06,0x02,0x00,
0x78,0x18,0x18,0x18,0x18,0x18,0x78,0x00,
0x10,0x38,0x6C,0xC6,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x78,0x0C,0x7C,0xCC,0x76,0x00,
0xE0,0x60,0x60,0x7C,0x66,0x66,0xDC,0x00,
0x00,0x00,0x78,0xCC,0xC0,0xCC,0x78,0x00,
0x1C,0x0C,0x0C,0x7C,0xCC,0xCC,0x76,0x00,
0x00,0x00,0x78,0xCC,0xFC,0xC0,0x78,0x00,
0x38,0x6C,0x60,0xF0,0x60,0x60,0xF0,0x00,
0x00,0x00,0x76,0xCC,0xCC,0x7C,0x0C,0xF8,
0xE0,0x60,0x6C,0x76,0x66,0x66,0xE6,0x00,
0x30,0x00,0x70,0x30,0x30,0x30,0x78,0x00,
0x0C,0x00,0x0C,0x0C,0x0C,0xCC,0xCC,0x78,
0xE0,0x60,0x66,0x6C,0x78,0x6C,0xE6,0x00,
0x70,0x30,0x30,0x30,0x30,0x30,0x78,0x00,
0x00,0x00,0xCC,0xFE,0xFE,0xD6,0xC6,0x00,
0x00,0x00,0xF8,0xCC,0xCC,0xCC,0xCC,0x00,
0x00,0x00,0x78,0xCC,0xCC,0xCC,0x78,0x00,
0x00,0x00,0xDC,0x66,0x66,0x7C,0x60,0xF0,
0x00,0x00,0x76,0xCC,0xCC,0x7C,0x0C,0x1E,
0x00,0x00,0xDC,0x76,0x66,0x60,0xF0,0x00,
0x00,0x00,0x7C,0xC0,0x78,0x0C,0xF8,0x00,
0x10,0x30,0x7C,0x30,0x30,0x34,0x18,0x00,
0x00,0x00,0xCC,0xCC,0xCC,0xCC,0x76,0x00,
0x00,0x00,0xCC,0xCC,0xCC,0x78,0x30,0x00,
0x00,0x00,0xC6,0xD6,0xFE,0xFE,0x6C,0x00,
0x00,0x00,0xC6,0x6C,0x38,0x6C,0xC6,0x00,
0x00,0x00,0xCC,0xCC,0xCC,0x7C,0x0C,0xF8,
0x00,0x00,0xFC,0x98,0x30,0x64,0xFC,0x00,
0x1C,0x30,0x30,0xE0,0x30,0x30,0x1C,0x00,
0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x00,
0xE0,0x30,0x30,0x1C,0x30,0x30,0xE0,0x00,
0x76,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
void Fillvram(unsigned long color)
{
unsigned char *vptr0;
unsigned long i;
vptr0 = GetVramAddr(0, 0);
for (i = 0; i < (FRAMESIZE/4); i++)
{
*(unsigned long *)vptr0 = color;
vptr0 += 4;
}
}
void PutChar(unsigned long x, unsigned long y, unsigned long color, unsigned long bgcolor, unsigned char ch, char drawfg, char drawbg, char mag)
{
unsigned char *vptr0;
unsigned char *vptr;
const unsigned char *cfont;
unsigned long cx, cy;
unsigned long b;
char mx, my;
cfont = font + ch*8;
vptr0=GetVramAddr(x, y);
for (cy = 0; cy < 8; cy++)
{
for (my = 0; my < mag; my++)
{
vptr = vptr0;
b = 0x80;
for (cx = 0; cx < 8; cx++)
{
for (mx = 0; mx < mag; mx++)
{
if ((*cfont&b) != 0)
{
if (drawfg) // Die Schrift selber, sollte aktiviert bleiben ;)
{
*(unsigned long *)vptr = color;
};
}
else
{
// Der Hintergrund, ich hab ihn in der Print() Funktion deaktiviert, wenn benötigt den vorletzten Param auf 1 stellen :)
if (drawbg)
{
*(unsigned long *)vptr = bgcolor;
};
};
vptr += 4;
};
b = b>>1;
};
vptr0 += LINESIZE*4;
};
cfont++;
};
};
void Print(unsigned long x, unsigned long y, unsigned long color, const char *str)
{
while (*str != 0 && x < CMAX_X && y < CMAX_Y)
{
// Ich hab die Hintergrundfarbe deaktiviert
PutChar(x*8, y*8, color, 0, *str, 1, 0, 1);
str++;
x++;
if (x >= CMAX_X)
{
x = 0;
y++;
}
}
}
void changeBuffer()
{
sceDisplayWaitVblankStart();
sceDisplaySetFrameBuf((void*)GetVramAddr(0,0), 512, PSP_DISPLAY_PIXEL_FORMAT_8888, 0);
drawframe=(drawframe?0:1);
}
void initScreenAndCtrl()
{
drawframe = 0;
sceDisplaySetMode(0,SCREEN_WIDTH,SCREEN_HEIGHT);
sceDisplaySetFrameBuf((void*)vramtop, 512, PSP_DISPLAY_PIXEL_FORMAT_8888, 1);
Fillvram(0x00000000);
drawframe = 1;
Fillvram(0x00000000);
sceCtrlSetSamplingCycle(0);
sceCtrlSetSamplingMode(1);
}
Auf diese Zeilen geh ich jetzt nicht weiter ein, sie die Funktionen "Print" etc. wurden bis jetzt in jedem Exploit verwendet, da man
mit wenigen Änderungen erreichen kann, das keine Funktionen erreicht werden (nach dem TIFF Tutorial werdet ihr verstehen was ich meine).
Wenn ihr nicht wisst was mit dem "0x04000000" gemeint ist, das ist ganz einfach: 0x04000000 ist die Addresse des VRAMs der PSP.
Die anderen Speicher Addressen, die ihr vielleicht mal brauchen könntet:
0x00010000: Scratch pad (fast unnützt, nur 16kb groß)
0x04000000: VRAM
0x44000000: VRAM Cache
0x08800000: Main RAM (diese Addresse werdet ihr im TIFF Tutorial brauchen)
0x48800000: Main RAM Cache
0x88000000: Kernel RAM
Also zurück zu main.c:
Jetzt fügt diese Zeilen hinzu:
int main(void)
{
sceKernelDcacheWritebackAll();
initScreenAndCtrl();
Fillvram(colours[INDEX_BLACK]);
Ja, jetzt kommt unsere main Funktion
Die ersten 2 Funktionen sind eigentlich nur zum Initialisieren des SDKs etc. und die Funktion Fillvram(colours[INDEX_BLACK]) füllt den Bildschirm
mit schwarzer Farbe.
SceCtrlData pad;
sceCtrlSetSamplingMode(1);
while(1)
{
pad.Buttons = 0;
sceCtrlReadBufferPositive(&pad, 1);
Print(0, 1, colours[INDEX_WHITE], "Hurra, ich hab gerade mein erstes Programm");
Print(0, 2, colours[INDEX_WHITE], "Savegame Exploit gecodet!");
Print(0, 3, colours[INDEX_WHITE], "$ony hat keine Chance mehr :P");
changeBuffer();
if(pad.Buttons & PSP_CTRL_CROSS)
{
Print(0, 5, colours[INDEX_RED], "Servus");
changeBuffer();
sceKernelDelayThread(150000);
break;
};
};
sceKernelExitGame();
return 0;
};
Zu diesen Zeilen denk ich mal muss ich auch nicht so viel sagen, wer dass nicht kapiert, sollte sich noch mal mit den Grundkenntnissen beschäftigen
Ihr könnt jetzt die main.c Datei schließen.
Jetzt erstellt eine Datei namens "linkfile.l" und schreibt hinein:
OUTPUT_FORMAT("elf32-littlemips")
OUTPUT_ARCH(mips)
ENTRY(_start)
SECTIONS
{
. = 0x09FD0C00;
.text.start :
{
*(.text.start)
}
.text :
{
*(.text)
}
.rodata :
{
*(.rodata)
}
.data :
{
*(.data)
}
.bss :
{
*(.bss)
}
}
So, jetzt müsste man halt MIPS können
Nur mal ne kurze Erklährung:
Deshalb muss die Funktion "void _start(...)" heißen
Die binary wird auf die Addresse "0x09FD0C00" geladen, später wichtig fürs TIFF!
Mit den anderen Zeilen werden die einzelnen Hauptspeicher Sektionen zugeordnet.
UUUND die makefile:
PSPSDK=$(shell psp-config --pspsdk-path)
PSPDEV=$(shell psp-config --pspdev-path)
INCLUDE=$(PSPSDK)/include
all: us eu
clean:
rm -rf *~ *.o *.elf *.bin *.s *.bin
CC = psp-gcc
CFLAGS := $(INCLUDES) -W -Wall -G0 -fno-pic -mno-abicalls -w
FLAGS_US := -DMERCURY_US
FLAGS_EU := -DMERCURY_EU
ASM = psp-as
main_us.o: main.c mercury_sdk.h
$(CC) $(CFLAGS) $(FLAGS_US) -S main.c -o main_us.s
$(ASM) main_us.s -o main_us.o
main_eu.o: main.c mercury_sdk.h
$(CC) $(CFLAGS) $(FLAGS_EU) -S main.c -o main_eu.s
$(ASM) main_eu.s -o main_eu.o
us: main_us.o linkfile.l
$(PSPDEV)/bin/psp-ld -T linkfile.l -o main_us.elf -L$(PSPSDK)/lib main_us.o
$(PSPDEV)/bin/psp-strip -s main_us.elf
$(PSPDEV)/bin/psp-objcopy -O binary main_us.elf mercury_us.bin
eu: main_eu.o linkfile.l
$(PSPDEV)/bin/psp-ld -T linkfile.l -o main_eu.elf -L$(PSPSDK)/lib main_eu.o
$(PSPDEV)/bin/psp-strip -s main_eu.elf
$(PSPDEV)/bin/psp-objcopy -O binary main_eu.elf mercury_eu.bin
Das ist die original makefile von FreePlay, für ein so kleines Programm ist sie OK
So, jetzt erstellt ihr das Projekt mit dem Befehl "make".
Kompiert jetzt die beiden Ordner aus dem Ordner "Bin_loader" in dem Download oben nach ms0:/PSP/SAVEGAME und die beiden Binary Dateien (je nach mercury
Version) ins Root des MemorySticks.
Startet Mercury, ladet den Spielstand und geniest unlizensierten Code auf PSPs mit niedriger Firmware als 6.20
Jetzt werdet ihr euch denken: Öch, was erzählt denn dieser HacKmaN ständig für eine Scheiße? Das ist doch nicht schwieriger zu coden als ne EBOOT!
Naja, wie dem so sei, wenn ihr zum ersten mal versucht eine Datei zu inkludieren, werdet ihr eine böse Überraschung erleben^^
Entweder der Compiler findet die Datei nicht, oder wenn er sie nach etwas herumbasteln in der makefile findet, wird es euch nichts bringen:
1. Mache Headerdateien wie pspctrl.h werden nicht mit dem SDK kompatibel sein, "blablabla was already decleared..."
2. In den Headerdateien des PSPSDKs stehen nur Funktions-Prototypen, die Funktionen im pspsdk wurden keinesfalls neu geschrieben,
sondern sind Zeiger auf die NIDs der Funktionen. Diese NIDs ändern sich mit so ziemlich jeder Firmware, deshalb ist es unmöglich die aus dem SDK zu benutzten.
Also müssen wir das salbe machen: Die Funktionen mit über ihre NIDs importieren, daher der Name "Funktion import".
Also, wie importieren wir jetzt Funktionen???
Nun ja, das ist nicht so einfach wie er ausschaut. Ich werde mich jetzt auch nicht groß damit beschäftigen, teilweiße hab ichs selbst noch nicht verstanden
Nur mal die Gundlagen:
Irgendwo auf der HD nen Ordner erstellen, SilverSprings Dokumentation und eine decryptete paf.prx reinkopieren, CMD starten, mit CD in den Ordner wechseln
und dann folgendes eingeben:
prxtool -f -n psplibdoc.xml paf.prx
Dann den NID suchen und in Mercury mit folgender Syntax initialisieren:
Bei EU Version:
int (* Funktion) (Parameter oder void) = (void *) (0x0880406C + NID);
Bei US Version:
int (* Funktion) (Parameter oder void) = (void *) (0x08804000 + NID);
Das ist NICHT getestet, sollte aber funktionieren.
Es können auch keine Libarys genutzt werden, daher können Libs wie OSLib oder VLF nicht genutzt werden, diese müssen neu geschrieben werden.
Naja, ich denke das reicht erstmal, das TIFF Tutorial kommt bald (kann aber noch ein bisschen dauern xD).
Und ich verspreche euch, das wird komplizierter, denn fürs 5.03 TIFF gibt es weder ein SDK noch irgendeine Dokumentation oder ein Tutorial
Grund: Zu instabil um groß dafür zu coden xD
mfg, HacKmaN
Dieser Beitrag wurde zuletzt bearbeitet: 19.03.2010 18:58 von HacKmaN.
|
|
19.03.2010 18:31 |
|
Folgende User bedanken sich: *John_Cena* (Mar-20-2010), Xcan (Mar-20-2010), Master_Jens (Mar-19-2010), Yata (Mar-19-2010), Miche2245 (Mar-19-2010), dark1256 (Mar-19-2010), Prototype92 (Mar-19-2010), Zacu (Mar-19-2010), pspbricker (Mar-19-2010), _Kai_ (Mar-19-2010), D!S (Mar-19-2010) |
|
D!S
Legende
Beiträge: 1.537
Gruppe: User
Registriert seit: Sep 2009
Status:
Abwesend
Danke erhalten: 470
|
RE: [TUT-1] Binarys für ein Exploit - Mercury
So, hi alle zusammen!
Erstmal: Sorry, falls die Zeilenumbrüche beschissen sind, ich habe dieses TUT offline mit Notepad++ geschrieben
Wer Fehler findet, bitte melden (ich meine mir melden, nicht einem Moderator )
Dieses Tutorial ist größtenteils eine reine Übersetztung von FreePlays Code, deshalb danke an ihn
Ich hab mich ja wie schon oft gesagt viel mit exploit beschäftigt, und hab mich dazu entschieden 2 kleine Tutorials zu machen:
- Eins für Mercury (mit dem SDK von FreePlay)
- Eins für das 5.03 TIFF Exploit (für dass gibt es kein SDK)
Danke an:
- Team C+D: Das Mercury Exploit, den Binary loader und das NET ifHandle Kernel-Mode Exploit (UnlockKmem_9A6261EC(NetIfhandle_lib_9A6261EC) )
- FreePlay: Für das veröffentlichen des Exploits und das SDK (ja, ich danke im dafür, ohne ihn hätte ich womöglich nie für ein GameSploit gecodet )
- Raiden1996: Für seine großartige Hilfe in sachen Function Imports und MIPS Programmierung
- PSPDEV: Für das Modul Tutorial und das perfekte Forum
- lan.st: Für das super Forum (dort und auf PSPDEV kann man so viel lernen )
- Jeden den ich vergessen habe
Was jeder haben sollte, der dieses Tutorial liest:
- Grundkenntnisse in C
- Damit es besser verständlich ist empfehle ich auch Grundlagen in MIPS
- Eine Mercury UMD (ein SK ist empfehlenswert, die ideotisch langen Ladezeiten sind beim coden echt nervig)
- Eine eingerichtete Entwicklungsumgebung, egal ob MinPSPw oder Cygwin
- [URL=]Dieses[/URL] Packet. Es enthält den Binary loader von FreePlay/Team C+D und das FreePlay's SDK.
/* Wenn ihr Funktionen importieren wollt (in diesem TUT aber nicht ausführlich besprochen), braucht ihr auch folgendes: */
- PRXTOOL von PSPDEV.org
- Die paf.prx eurer Firmware und die Libdoc von SilverSpring
Also fangen wir mal an
Entpackt das gedownloadete Archiv irgendwo auf der Festplatte und geht in den Ordner wo die Datei header Datei "mercury_sdk" und der Ordner "Includes" sind.
Euch ist sicher aufgefallen, dass weder eine Quelldatei noch eine Makefile vorhanden ist... Die erstellen wir miteinander
Erstellt euch jetzt eine Datei namens "crt0.c". Aus dieser Datei werden wir den main-thread deklinieren und laden.
Öffnet die Datei und gebt folgende Zeile ein:
int main(void);
void _start(unsigned long, unsigned long *) __attribute__ ((section (".text.start")));
void _start(unsigned long arglen, unsigned long *argp)
{
main();
while(1);
};
Die Erklährung:
int main(void);
Der Prototyp meiner main Funktion.
void _start(unsigned long, unsigned long *) __attribute__ ((section (".text.start")));
Jeder der MIPS kann weiß, dass der Hauptspeicher in verschiedene Sektionen aufgeteilt ist (z.B. ".data" für Variablen und ".text" für Funktionen).
Wenn das Exploit geladen wird, wird die Sektion ".text.start" ausgeführt. Durch diese Zeile weiß der Compiler, wo der Ausführbare Bereich beginnt.
Warum es _start sein muss, erklähr ich später.
void _start(unsigned long arglen, unsigned long *argp)
{
main();
while(1);
};
Übersetzt: Starte die Funktion "main(void)" und warte wenn sie beendet wird für immer.
So. Jetzt schließt die crt0.c, erstellt euch die Datei main.c, öffnet sie und schreibt folgendet Text hinein:
#include "mercury_sdk.h"
#include "crt0.c"
#define SCREEN_WIDTH 512
#define SCREEN_HEIGHT 272
#define LINESIZE 512
#define CMAX_X 60
#define CMAX_Y 38
#define FRAMESIZE 0xAA000
#define INDEX_BLACK 10
#define INDEX_WHITE 1
#define INDEX_PINK 2
#define INDEX_RED 3
#define INDEX_BLUE 4
#define INDEX_GREEN 5
#define INDEX_YELLOW 6
#define INDEX_CYAN 7
#define INDEX_GRAY 9
#define INDEX_DARKGREEN 0
#define RANDOM rand()%9
unsigned char *vramtop=(unsigned char *)0x04000000;
unsigned long drawframe;
unsigned char *GetVramAddr(unsigned long x, unsigned long y)
{
return vramtop + (drawframe?FRAMESIZE:0) + x*4 + y*LINESIZE*4 + 0x40000000;
}
unsigned long colours[11] =
{
0x00008800L,
0x00FFFFFFL,
0x00FF00FFL,
0x000000FFL,
0x00FF0000L,
0x0000FF00L,
0x0000FFFFL,
0x00FFFF00L,
0x00FFFF88L,
0x00888888L,
0x00000000L
};
const unsigned char font[] =
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00,
0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00,
0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00,
0x30,0x7C,0xC0,0x78,0x0C,0xF8,0x30,0x00,
0x00,0xC6,0xCC,0x18,0x30,0x66,0xC6,0x00,
0x38,0x6C,0x38,0x76,0xDC,0xCC,0x76,0x00,
0x60,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,
0x18,0x30,0x60,0x60,0x60,0x30,0x18,0x00,
0x60,0x30,0x18,0x18,0x18,0x30,0x60,0x00,
0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00,
0x00,0x30,0x30,0xFC,0x30,0x30,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x60,
0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,
0x06,0x0C,0x18,0x30,0x60,0xC0,0x80,0x00,
0x7C,0xC6,0xCE,0xDE,0xF6,0xE6,0x7C,0x00,
0x30,0x70,0x30,0x30,0x30,0x30,0xFC,0x00,
0x78,0xCC,0x0C,0x38,0x60,0xCC,0xFC,0x00,
0x78,0xCC,0x0C,0x38,0x0C,0xCC,0x78,0x00,
0x1C,0x3C,0x6C,0xCC,0xFE,0x0C,0x1E,0x00,
0xFC,0xC0,0xF8,0x0C,0x0C,0xCC,0x78,0x00,
0x38,0x60,0xC0,0xF8,0xCC,0xCC,0x78,0x00,
0xFC,0xCC,0x0C,0x18,0x30,0x30,0x30,0x00,
0x78,0xCC,0xCC,0x78,0xCC,0xCC,0x78,0x00,
0x78,0xCC,0xCC,0x7C,0x0C,0x18,0x70,0x00,
0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,
0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x60,
0x18,0x30,0x60,0xC0,0x60,0x30,0x18,0x00,
0x00,0x00,0xFC,0x00,0x00,0xFC,0x00,0x00,
0x60,0x30,0x18,0x0C,0x18,0x30,0x60,0x00,
0x78,0xCC,0x0C,0x18,0x30,0x00,0x30,0x00,
0x7C,0xC6,0xDE,0xDE,0xDE,0xC0,0x78,0x00,
0x30,0x78,0xCC,0xCC,0xFC,0xCC,0xCC,0x00,
0xFC,0x66,0x66,0x7C,0x66,0x66,0xFC,0x00,
0x3C,0x66,0xC0,0xC0,0xC0,0x66,0x3C,0x00,
0xF8,0x6C,0x66,0x66,0x66,0x6C,0xF8,0x00,
0xFE,0x62,0x68,0x78,0x68,0x62,0xFE,0x00,
0xFE,0x62,0x68,0x78,0x68,0x60,0xF0,0x00,
0x3C,0x66,0xC0,0xC0,0xCE,0x66,0x3E,0x00,
0xCC,0xCC,0xCC,0xFC,0xCC,0xCC,0xCC,0x00,
0x78,0x30,0x30,0x30,0x30,0x30,0x78,0x00,
0x1E,0x0C,0x0C,0x0C,0xCC,0xCC,0x78,0x00,
0xE6,0x66,0x6C,0x78,0x6C,0x66,0xE6,0x00,
0xF0,0x60,0x60,0x60,0x62,0x66,0xFE,0x00,
0xC6,0xEE,0xFE,0xFE,0xD6,0xC6,0xC6,0x00,
0xC6,0xE6,0xF6,0xDE,0xCE,0xC6,0xC6,0x00,
0x38,0x6C,0xC6,0xC6,0xC6,0x6C,0x38,0x00,
0xFC,0x66,0x66,0x7C,0x60,0x60,0xF0,0x00,
0x78,0xCC,0xCC,0xCC,0xDC,0x78,0x1C,0x00,
0xFC,0x66,0x66,0x7C,0x6C,0x66,0xE6,0x00,
0x78,0xCC,0xE0,0x70,0x1C,0xCC,0x78,0x00,
0xFC,0xB4,0x30,0x30,0x30,0x30,0x78,0x00,
0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xFC,0x00,
0xCC,0xCC,0xCC,0xCC,0xCC,0x78,0x30,0x00,
0xC6,0xC6,0xC6,0xD6,0xFE,0xEE,0xC6,0x00,
0xC6,0xC6,0x6C,0x38,0x38,0x6C,0xC6,0x00,
0xCC,0xCC,0xCC,0x78,0x30,0x30,0x78,0x00,
0xFE,0xC6,0x8C,0x18,0x32,0x66,0xFE,0x00,
0x78,0x60,0x60,0x60,0x60,0x60,0x78,0x00,
0xC0,0x60,0x30,0x18,0x0C,0x06,0x02,0x00,
0x78,0x18,0x18,0x18,0x18,0x18,0x78,0x00,
0x10,0x38,0x6C,0xC6,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x78,0x0C,0x7C,0xCC,0x76,0x00,
0xE0,0x60,0x60,0x7C,0x66,0x66,0xDC,0x00,
0x00,0x00,0x78,0xCC,0xC0,0xCC,0x78,0x00,
0x1C,0x0C,0x0C,0x7C,0xCC,0xCC,0x76,0x00,
0x00,0x00,0x78,0xCC,0xFC,0xC0,0x78,0x00,
0x38,0x6C,0x60,0xF0,0x60,0x60,0xF0,0x00,
0x00,0x00,0x76,0xCC,0xCC,0x7C,0x0C,0xF8,
0xE0,0x60,0x6C,0x76,0x66,0x66,0xE6,0x00,
0x30,0x00,0x70,0x30,0x30,0x30,0x78,0x00,
0x0C,0x00,0x0C,0x0C,0x0C,0xCC,0xCC,0x78,
0xE0,0x60,0x66,0x6C,0x78,0x6C,0xE6,0x00,
0x70,0x30,0x30,0x30,0x30,0x30,0x78,0x00,
0x00,0x00,0xCC,0xFE,0xFE,0xD6,0xC6,0x00,
0x00,0x00,0xF8,0xCC,0xCC,0xCC,0xCC,0x00,
0x00,0x00,0x78,0xCC,0xCC,0xCC,0x78,0x00,
0x00,0x00,0xDC,0x66,0x66,0x7C,0x60,0xF0,
0x00,0x00,0x76,0xCC,0xCC,0x7C,0x0C,0x1E,
0x00,0x00,0xDC,0x76,0x66,0x60,0xF0,0x00,
0x00,0x00,0x7C,0xC0,0x78,0x0C,0xF8,0x00,
0x10,0x30,0x7C,0x30,0x30,0x34,0x18,0x00,
0x00,0x00,0xCC,0xCC,0xCC,0xCC,0x76,0x00,
0x00,0x00,0xCC,0xCC,0xCC,0x78,0x30,0x00,
0x00,0x00,0xC6,0xD6,0xFE,0xFE,0x6C,0x00,
0x00,0x00,0xC6,0x6C,0x38,0x6C,0xC6,0x00,
0x00,0x00,0xCC,0xCC,0xCC,0x7C,0x0C,0xF8,
0x00,0x00,0xFC,0x98,0x30,0x64,0xFC,0x00,
0x1C,0x30,0x30,0xE0,0x30,0x30,0x1C,0x00,
0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x00,
0xE0,0x30,0x30,0x1C,0x30,0x30,0xE0,0x00,
0x76,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
void Fillvram(unsigned long color)
{
unsigned char *vptr0;
unsigned long i;
vptr0 = GetVramAddr(0, 0);
for (i = 0; i < (FRAMESIZE/4); i++)
{
*(unsigned long *)vptr0 = color;
vptr0 += 4;
}
}
void PutChar(unsigned long x, unsigned long y, unsigned long color, unsigned long bgcolor, unsigned char ch, char drawfg, char drawbg, char mag)
{
unsigned char *vptr0;
unsigned char *vptr;
const unsigned char *cfont;
unsigned long cx, cy;
unsigned long b;
char mx, my;
cfont = font + ch*8;
vptr0=GetVramAddr(x, y);
for (cy = 0; cy < 8; cy++)
{
for (my = 0; my < mag; my++)
{
vptr = vptr0;
b = 0x80;
for (cx = 0; cx < 8; cx++)
{
for (mx = 0; mx < mag; mx++)
{
if ((*cfont&b) != 0)
{
if (drawfg) // Die Schrift selber, sollte aktiviert bleiben ;)
{
*(unsigned long *)vptr = color;
};
}
else
{
// Der Hintergrund, ich hab ihn in der Print() Funktion deaktiviert, wenn benötigt den vorletzten Param auf 1 stellen :)
if (drawbg)
{
*(unsigned long *)vptr = bgcolor;
};
};
vptr += 4;
};
b = b>>1;
};
vptr0 += LINESIZE*4;
};
cfont++;
};
};
void Print(unsigned long x, unsigned long y, unsigned long color, const char *str)
{
while (*str != 0 && x < CMAX_X && y < CMAX_Y)
{
// Ich hab die Hintergrundfarbe deaktiviert
PutChar(x*8, y*8, color, 0, *str, 1, 0, 1);
str++;
x++;
if (x >= CMAX_X)
{
x = 0;
y++;
}
}
}
void changeBuffer()
{
sceDisplayWaitVblankStart();
sceDisplaySetFrameBuf((void*)GetVramAddr(0,0), 512, PSP_DISPLAY_PIXEL_FORMAT_8888, 0);
drawframe=(drawframe?0:1);
}
void initScreenAndCtrl()
{
drawframe = 0;
sceDisplaySetMode(0,SCREEN_WIDTH,SCREEN_HEIGHT);
sceDisplaySetFrameBuf((void*)vramtop, 512, PSP_DISPLAY_PIXEL_FORMAT_8888, 1);
Fillvram(0x00000000);
drawframe = 1;
Fillvram(0x00000000);
sceCtrlSetSamplingCycle(0);
sceCtrlSetSamplingMode(1);
}
Auf diese Zeilen geh ich jetzt nicht weiter ein, sie die Funktionen "Print" etc. wurden bis jetzt in jedem Exploit verwendet, da man
mit wenigen Änderungen erreichen kann, das keine Funktionen erreicht werden (nach dem TIFF Tutorial werdet ihr verstehen was ich meine).
Wenn ihr nicht wisst was mit dem "0x04000000" gemeint ist, das ist ganz einfach: 0x04000000 ist die Addresse des VRAMs der PSP.
Die anderen Speicher Addressen, die ihr vielleicht mal brauchen könntet:
0x00010000: Scratch pad (fast unnützt, nur 16kb groß)
0x04000000: VRAM
0x44000000: VRAM Cache
0x08800000: Main RAM (diese Addresse werdet ihr im TIFF Tutorial brauchen)
0x48800000: Main RAM Cache
0x88000000: Kernel RAM
Also zurück zu main.c:
Jetzt fügt diese Zeilen hinzu:
int main(void)
{
sceKernelDcacheWritebackAll();
initScreenAndCtrl();
Fillvram(colours[INDEX_BLACK]);
Ja, jetzt kommt unsere main Funktion
Die ersten 2 Funktionen sind eigentlich nur zum Initialisieren des SDKs etc. und die Funktion Fillvram(colours[INDEX_BLACK]) füllt den Bildschirm
mit schwarzer Farbe.
SceCtrlData pad;
sceCtrlSetSamplingMode(1);
while(1)
{
pad.Buttons = 0;
sceCtrlReadBufferPositive(&pad, 1);
Print(0, 1, colours[INDEX_WHITE], "Hurra, ich hab gerade mein erstes Programm");
Print(0, 2, colours[INDEX_WHITE], "Savegame Exploit gecodet!");
Print(0, 3, colours[INDEX_WHITE], "$ony hat keine Chance mehr :P");
changeBuffer();
if(pad.Buttons & PSP_CTRL_CROSS)
{
Print(0, 5, colours[INDEX_RED], "Servus");
changeBuffer();
sceKernelDelayThread(150000);
break;
};
};
sceKernelExitGame();
return 0;
};
Zu diesen Zeilen denk ich mal muss ich auch nicht so viel sagen, wer dass nicht kapiert, sollte sich noch mal mit den Grundkenntnissen beschäftigen
Ihr könnt jetzt die main.c Datei schließen.
Jetzt erstellt eine Datei namens "linkfile.l" und schreibt hinein:
OUTPUT_FORMAT("elf32-littlemips")
OUTPUT_ARCH(mips)
ENTRY(_start)
SECTIONS
{
. = 0x09FD0C00;
.text.start :
{
*(.text.start)
}
.text :
{
*(.text)
}
.rodata :
{
*(.rodata)
}
.data :
{
*(.data)
}
.bss :
{
*(.bss)
}
}
So, jetzt müsste man halt MIPS können
Nur mal ne kurze Erklährung:
Deshalb muss die Funktion "void _start(...)" heißen
Die binary wird auf die Addresse "0x09FD0C00" geladen, später wichtig fürs TIFF!
Mit den anderen Zeilen werden die einzelnen Hauptspeicher Sektionen zugeordnet.
UUUND die makefile:
PSPSDK=$(shell psp-config --pspsdk-path)
PSPDEV=$(shell psp-config --pspdev-path)
INCLUDE=$(PSPSDK)/include
all: us eu
clean:
rm -rf *~ *.o *.elf *.bin *.s *.bin
CC = psp-gcc
CFLAGS := $(INCLUDES) -W -Wall -G0 -fno-pic -mno-abicalls -w
FLAGS_US := -DMERCURY_US
FLAGS_EU := -DMERCURY_EU
ASM = psp-as
main_us.o: main.c mercury_sdk.h
$(CC) $(CFLAGS) $(FLAGS_US) -S main.c -o main_us.s
$(ASM) main_us.s -o main_us.o
main_eu.o: main.c mercury_sdk.h
$(CC) $(CFLAGS) $(FLAGS_EU) -S main.c -o main_eu.s
$(ASM) main_eu.s -o main_eu.o
us: main_us.o linkfile.l
$(PSPDEV)/bin/psp-ld -T linkfile.l -o main_us.elf -L$(PSPSDK)/lib main_us.o
$(PSPDEV)/bin/psp-strip -s main_us.elf
$(PSPDEV)/bin/psp-objcopy -O binary main_us.elf mercury_us.bin
eu: main_eu.o linkfile.l
$(PSPDEV)/bin/psp-ld -T linkfile.l -o main_eu.elf -L$(PSPSDK)/lib main_eu.o
$(PSPDEV)/bin/psp-strip -s main_eu.elf
$(PSPDEV)/bin/psp-objcopy -O binary main_eu.elf mercury_eu.bin
Das ist die original makefile von FreePlay, für ein so kleines Programm ist sie OK
So, jetzt erstellt ihr das Projekt mit dem Befehl "make".
Kompiert jetzt die beiden Ordner aus dem Ordner "Bin_loader" in dem Download oben nach ms0:/PSP/SAVEGAME und die beiden Binary Dateien (je nach mercury
Version) ins Root des MemorySticks.
Startet Mercury, ladet den Spielstand und geniest unlizensierten Code auf PSPs mit niedriger Firmware als 6.20
Jetzt werdet ihr euch denken: Öch, was erzählt denn dieser HacKmaN ständig für eine Scheiße? Das ist doch nicht schwieriger zu coden als ne EBOOT!
Naja, wie dem so sei, wenn ihr zum ersten mal versucht eine Datei zu inkludieren, werdet ihr eine böse Überraschung erleben^^
Entweder der Compiler findet die Datei nicht, oder wenn er sie nach etwas herumbasteln in der makefile findet, wird es euch nichts bringen:
1. Mache Headerdateien wie pspctrl.h werden nicht mit dem SDK kompatibel sein, "blablabla was already decleared..."
2. In den Headerdateien des PSPSDKs stehen nur Funktions-Prototypen, die Funktionen im pspsdk wurden keinesfalls neu geschrieben,
sondern sind Zeiger auf die NIDs der Funktionen. Diese NIDs ändern sich mit so ziemlich jeder Firmware, deshalb ist es unmöglich die aus dem SDK zu benutzten.
Also müssen wir das salbe machen: Die Funktionen mit über ihre NIDs importieren, daher der Name "Funktion import".
Also, wie importieren wir jetzt Funktionen???
Nun ja, das ist nicht so einfach wie er ausschaut. Ich werde mich jetzt auch nicht groß damit beschäftigen, teilweiße hab ichs selbst noch nicht verstanden
Nur mal die Gundlagen:
Irgendwo auf der HD nen Ordner erstellen, SilverSprings Dokumentation und eine decryptete paf.prx reinkopieren, CMD starten, mit CD in den Ordner wechseln
und dann folgendes eingeben:
prxtool -f -n psplibdoc.xml paf.prx
Dann den NID suchen und in Mercury mit folgender Syntax initialisieren:
Bei EU Version:
int (* Funktion) (Parameter oder void) = (void *) (0x0880406C + NID);
Bei US Version:
int (* Funktion) (Parameter oder void) = (void *) (0x08804000 + NID);
Das ist NICHT getestet, sollte aber funktionieren.
Es können auch keine Libarys genutzt werden, daher können Libs wie OSLib oder VLF nicht genutzt werden, diese müssen neu geschrieben werden.
Naja, ich denke das reicht erstmal, das TIFF Tutorial kommt bald (kann aber noch ein bisschen dauern xD).
Und ich verspreche euch, das wird komplizierter, denn fürs 5.03 TIFF gibt es weder ein SDK noch irgendeine Dokumentation oder ein Tutorial
Grund: Zu instabil um groß dafür zu coden xD
mfg, HacKmaN
Super echt klasse!
Lerne auch grade C/++ und da ist das sehr hilfreich!
PS: Freue mich schon auf das Tiff Tut!!!
Danke... ;D
|
|
19.03.2010 18:40 |
|
Folgende User bedanken sich: |
|
HacKmaN
Ex-Developer
Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009
Status:
Offline
Danke erhalten: 3319
|
RE: [TUT-1] Binarys für ein Exploit - Mercury
So, hi alle zusammen!
Erstmal: Sorry, falls die Zeilenumbrüche beschissen sind, ich habe dieses TUT offline mit Notepad++ geschrieben
Wer Fehler findet, bitte melden (ich meine mir melden, nicht einem Moderator )
Dieses Tutorial ist größtenteils eine reine Übersetztung von FreePlays Code, deshalb danke an ihn
Ich hab mich ja wie schon oft gesagt viel mit exploit beschäftigt, und hab mich dazu entschieden 2 kleine Tutorials zu machen:
- Eins für Mercury (mit dem SDK von FreePlay)
- Eins für das 5.03 TIFF Exploit (für dass gibt es kein SDK)
Danke an:
- Team C+D: Das Mercury Exploit, den Binary loader und das NET ifHandle Kernel-Mode Exploit (UnlockKmem_9A6261EC(NetIfhandle_lib_9A6261EC) )
- FreePlay: Für das veröffentlichen des Exploits und das SDK (ja, ich danke im dafür, ohne ihn hätte ich womöglich nie für ein GameSploit gecodet )
- Raiden1996: Für seine großartige Hilfe in sachen Function Imports und MIPS Programmierung
- PSPDEV: Für das Modul Tutorial und das perfekte Forum
- lan.st: Für das super Forum (dort und auf PSPDEV kann man so viel lernen )
- Jeden den ich vergessen habe
Was jeder haben sollte, der dieses Tutorial liest:
- Grundkenntnisse in C
- Damit es besser verständlich ist empfehle ich auch Grundlagen in MIPS
- Eine Mercury UMD (ein SK ist empfehlenswert, die ideotisch langen Ladezeiten sind beim coden echt nervig)
- Eine eingerichtete Entwicklungsumgebung, egal ob MinPSPw oder Cygwin
- [URL=]Dieses[/URL] Packet. Es enthält den Binary loader von FreePlay/Team C+D und das FreePlay's SDK.
/* Wenn ihr Funktionen importieren wollt (in diesem TUT aber nicht ausführlich besprochen), braucht ihr auch folgendes: */
- PRXTOOL von PSPDEV.org
- Die paf.prx eurer Firmware und die Libdoc von SilverSpring
Also fangen wir mal an
Entpackt das gedownloadete Archiv irgendwo auf der Festplatte und geht in den Ordner wo die Datei header Datei "mercury_sdk" und der Ordner "Includes" sind.
Euch ist sicher aufgefallen, dass weder eine Quelldatei noch eine Makefile vorhanden ist... Die erstellen wir miteinander
Erstellt euch jetzt eine Datei namens "crt0.c". Aus dieser Datei werden wir den main-thread deklinieren und laden.
Öffnet die Datei und gebt folgende Zeile ein:
int main(void);
void _start(unsigned long, unsigned long *) __attribute__ ((section (".text.start")));
void _start(unsigned long arglen, unsigned long *argp)
{
main();
while(1);
};
Die Erklährung:
int main(void);
Der Prototyp meiner main Funktion.
void _start(unsigned long, unsigned long *) __attribute__ ((section (".text.start")));
Jeder der MIPS kann weiß, dass der Hauptspeicher in verschiedene Sektionen aufgeteilt ist (z.B. ".data" für Variablen und ".text" für Funktionen).
Wenn das Exploit geladen wird, wird die Sektion ".text.start" ausgeführt. Durch diese Zeile weiß der Compiler, wo der Ausführbare Bereich beginnt.
Warum es _start sein muss, erklähr ich später.
void _start(unsigned long arglen, unsigned long *argp)
{
main();
while(1);
};
Übersetzt: Starte die Funktion "main(void)" und warte wenn sie beendet wird für immer.
So. Jetzt schließt die crt0.c, erstellt euch die Datei main.c, öffnet sie und schreibt folgendet Text hinein:
#include "mercury_sdk.h"
#include "crt0.c"
#define SCREEN_WIDTH 512
#define SCREEN_HEIGHT 272
#define LINESIZE 512
#define CMAX_X 60
#define CMAX_Y 38
#define FRAMESIZE 0xAA000
#define INDEX_BLACK 10
#define INDEX_WHITE 1
#define INDEX_PINK 2
#define INDEX_RED 3
#define INDEX_BLUE 4
#define INDEX_GREEN 5
#define INDEX_YELLOW 6
#define INDEX_CYAN 7
#define INDEX_GRAY 9
#define INDEX_DARKGREEN 0
#define RANDOM rand()%9
unsigned char *vramtop=(unsigned char *)0x04000000;
unsigned long drawframe;
unsigned char *GetVramAddr(unsigned long x, unsigned long y)
{
return vramtop + (drawframe?FRAMESIZE:0) + x*4 + y*LINESIZE*4 + 0x40000000;
}
unsigned long colours[11] =
{
0x00008800L,
0x00FFFFFFL,
0x00FF00FFL,
0x000000FFL,
0x00FF0000L,
0x0000FF00L,
0x0000FFFFL,
0x00FFFF00L,
0x00FFFF88L,
0x00888888L,
0x00000000L
};
const unsigned char font[] =
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00,
0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00,
0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00,
0x30,0x7C,0xC0,0x78,0x0C,0xF8,0x30,0x00,
0x00,0xC6,0xCC,0x18,0x30,0x66,0xC6,0x00,
0x38,0x6C,0x38,0x76,0xDC,0xCC,0x76,0x00,
0x60,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,
0x18,0x30,0x60,0x60,0x60,0x30,0x18,0x00,
0x60,0x30,0x18,0x18,0x18,0x30,0x60,0x00,
0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00,
0x00,0x30,0x30,0xFC,0x30,0x30,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x60,
0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,
0x06,0x0C,0x18,0x30,0x60,0xC0,0x80,0x00,
0x7C,0xC6,0xCE,0xDE,0xF6,0xE6,0x7C,0x00,
0x30,0x70,0x30,0x30,0x30,0x30,0xFC,0x00,
0x78,0xCC,0x0C,0x38,0x60,0xCC,0xFC,0x00,
0x78,0xCC,0x0C,0x38,0x0C,0xCC,0x78,0x00,
0x1C,0x3C,0x6C,0xCC,0xFE,0x0C,0x1E,0x00,
0xFC,0xC0,0xF8,0x0C,0x0C,0xCC,0x78,0x00,
0x38,0x60,0xC0,0xF8,0xCC,0xCC,0x78,0x00,
0xFC,0xCC,0x0C,0x18,0x30,0x30,0x30,0x00,
0x78,0xCC,0xCC,0x78,0xCC,0xCC,0x78,0x00,
0x78,0xCC,0xCC,0x7C,0x0C,0x18,0x70,0x00,
0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,
0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x60,
0x18,0x30,0x60,0xC0,0x60,0x30,0x18,0x00,
0x00,0x00,0xFC,0x00,0x00,0xFC,0x00,0x00,
0x60,0x30,0x18,0x0C,0x18,0x30,0x60,0x00,
0x78,0xCC,0x0C,0x18,0x30,0x00,0x30,0x00,
0x7C,0xC6,0xDE,0xDE,0xDE,0xC0,0x78,0x00,
0x30,0x78,0xCC,0xCC,0xFC,0xCC,0xCC,0x00,
0xFC,0x66,0x66,0x7C,0x66,0x66,0xFC,0x00,
0x3C,0x66,0xC0,0xC0,0xC0,0x66,0x3C,0x00,
0xF8,0x6C,0x66,0x66,0x66,0x6C,0xF8,0x00,
0xFE,0x62,0x68,0x78,0x68,0x62,0xFE,0x00,
0xFE,0x62,0x68,0x78,0x68,0x60,0xF0,0x00,
0x3C,0x66,0xC0,0xC0,0xCE,0x66,0x3E,0x00,
0xCC,0xCC,0xCC,0xFC,0xCC,0xCC,0xCC,0x00,
0x78,0x30,0x30,0x30,0x30,0x30,0x78,0x00,
0x1E,0x0C,0x0C,0x0C,0xCC,0xCC,0x78,0x00,
0xE6,0x66,0x6C,0x78,0x6C,0x66,0xE6,0x00,
0xF0,0x60,0x60,0x60,0x62,0x66,0xFE,0x00,
0xC6,0xEE,0xFE,0xFE,0xD6,0xC6,0xC6,0x00,
0xC6,0xE6,0xF6,0xDE,0xCE,0xC6,0xC6,0x00,
0x38,0x6C,0xC6,0xC6,0xC6,0x6C,0x38,0x00,
0xFC,0x66,0x66,0x7C,0x60,0x60,0xF0,0x00,
0x78,0xCC,0xCC,0xCC,0xDC,0x78,0x1C,0x00,
0xFC,0x66,0x66,0x7C,0x6C,0x66,0xE6,0x00,
0x78,0xCC,0xE0,0x70,0x1C,0xCC,0x78,0x00,
0xFC,0xB4,0x30,0x30,0x30,0x30,0x78,0x00,
0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xFC,0x00,
0xCC,0xCC,0xCC,0xCC,0xCC,0x78,0x30,0x00,
0xC6,0xC6,0xC6,0xD6,0xFE,0xEE,0xC6,0x00,
0xC6,0xC6,0x6C,0x38,0x38,0x6C,0xC6,0x00,
0xCC,0xCC,0xCC,0x78,0x30,0x30,0x78,0x00,
0xFE,0xC6,0x8C,0x18,0x32,0x66,0xFE,0x00,
0x78,0x60,0x60,0x60,0x60,0x60,0x78,0x00,
0xC0,0x60,0x30,0x18,0x0C,0x06,0x02,0x00,
0x78,0x18,0x18,0x18,0x18,0x18,0x78,0x00,
0x10,0x38,0x6C,0xC6,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x78,0x0C,0x7C,0xCC,0x76,0x00,
0xE0,0x60,0x60,0x7C,0x66,0x66,0xDC,0x00,
0x00,0x00,0x78,0xCC,0xC0,0xCC,0x78,0x00,
0x1C,0x0C,0x0C,0x7C,0xCC,0xCC,0x76,0x00,
0x00,0x00,0x78,0xCC,0xFC,0xC0,0x78,0x00,
0x38,0x6C,0x60,0xF0,0x60,0x60,0xF0,0x00,
0x00,0x00,0x76,0xCC,0xCC,0x7C,0x0C,0xF8,
0xE0,0x60,0x6C,0x76,0x66,0x66,0xE6,0x00,
0x30,0x00,0x70,0x30,0x30,0x30,0x78,0x00,
0x0C,0x00,0x0C,0x0C,0x0C,0xCC,0xCC,0x78,
0xE0,0x60,0x66,0x6C,0x78,0x6C,0xE6,0x00,
0x70,0x30,0x30,0x30,0x30,0x30,0x78,0x00,
0x00,0x00,0xCC,0xFE,0xFE,0xD6,0xC6,0x00,
0x00,0x00,0xF8,0xCC,0xCC,0xCC,0xCC,0x00,
0x00,0x00,0x78,0xCC,0xCC,0xCC,0x78,0x00,
0x00,0x00,0xDC,0x66,0x66,0x7C,0x60,0xF0,
0x00,0x00,0x76,0xCC,0xCC,0x7C,0x0C,0x1E,
0x00,0x00,0xDC,0x76,0x66,0x60,0xF0,0x00,
0x00,0x00,0x7C,0xC0,0x78,0x0C,0xF8,0x00,
0x10,0x30,0x7C,0x30,0x30,0x34,0x18,0x00,
0x00,0x00,0xCC,0xCC,0xCC,0xCC,0x76,0x00,
0x00,0x00,0xCC,0xCC,0xCC,0x78,0x30,0x00,
0x00,0x00,0xC6,0xD6,0xFE,0xFE,0x6C,0x00,
0x00,0x00,0xC6,0x6C,0x38,0x6C,0xC6,0x00,
0x00,0x00,0xCC,0xCC,0xCC,0x7C,0x0C,0xF8,
0x00,0x00,0xFC,0x98,0x30,0x64,0xFC,0x00,
0x1C,0x30,0x30,0xE0,0x30,0x30,0x1C,0x00,
0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x00,
0xE0,0x30,0x30,0x1C,0x30,0x30,0xE0,0x00,
0x76,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
void Fillvram(unsigned long color)
{
unsigned char *vptr0;
unsigned long i;
vptr0 = GetVramAddr(0, 0);
for (i = 0; i < (FRAMESIZE/4); i++)
{
*(unsigned long *)vptr0 = color;
vptr0 += 4;
}
}
void PutChar(unsigned long x, unsigned long y, unsigned long color, unsigned long bgcolor, unsigned char ch, char drawfg, char drawbg, char mag)
{
unsigned char *vptr0;
unsigned char *vptr;
const unsigned char *cfont;
unsigned long cx, cy;
unsigned long b;
char mx, my;
cfont = font + ch*8;
vptr0=GetVramAddr(x, y);
for (cy = 0; cy < 8; cy++)
{
for (my = 0; my < mag; my++)
{
vptr = vptr0;
b = 0x80;
for (cx = 0; cx < 8; cx++)
{
for (mx = 0; mx < mag; mx++)
{
if ((*cfont&b) != 0)
{
if (drawfg) // Die Schrift selber, sollte aktiviert bleiben ;)
{
*(unsigned long *)vptr = color;
};
}
else
{
// Der Hintergrund, ich hab ihn in der Print() Funktion deaktiviert, wenn benötigt den vorletzten Param auf 1 stellen :)
if (drawbg)
{
*(unsigned long *)vptr = bgcolor;
};
};
vptr += 4;
};
b = b>>1;
};
vptr0 += LINESIZE*4;
};
cfont++;
};
};
void Print(unsigned long x, unsigned long y, unsigned long color, const char *str)
{
while (*str != 0 && x < CMAX_X && y < CMAX_Y)
{
// Ich hab die Hintergrundfarbe deaktiviert
PutChar(x*8, y*8, color, 0, *str, 1, 0, 1);
str++;
x++;
if (x >= CMAX_X)
{
x = 0;
y++;
}
}
}
void changeBuffer()
{
sceDisplayWaitVblankStart();
sceDisplaySetFrameBuf((void*)GetVramAddr(0,0), 512, PSP_DISPLAY_PIXEL_FORMAT_8888, 0);
drawframe=(drawframe?0:1);
}
void initScreenAndCtrl()
{
drawframe = 0;
sceDisplaySetMode(0,SCREEN_WIDTH,SCREEN_HEIGHT);
sceDisplaySetFrameBuf((void*)vramtop, 512, PSP_DISPLAY_PIXEL_FORMAT_8888, 1);
Fillvram(0x00000000);
drawframe = 1;
Fillvram(0x00000000);
sceCtrlSetSamplingCycle(0);
sceCtrlSetSamplingMode(1);
}
Auf diese Zeilen geh ich jetzt nicht weiter ein, sie die Funktionen "Print" etc. wurden bis jetzt in jedem Exploit verwendet, da man
mit wenigen Änderungen erreichen kann, das keine Funktionen erreicht werden (nach dem TIFF Tutorial werdet ihr verstehen was ich meine).
Wenn ihr nicht wisst was mit dem "0x04000000" gemeint ist, das ist ganz einfach: 0x04000000 ist die Addresse des VRAMs der PSP.
Die anderen Speicher Addressen, die ihr vielleicht mal brauchen könntet:
0x00010000: Scratch pad (fast unnützt, nur 16kb groß)
0x04000000: VRAM
0x44000000: VRAM Cache
0x08800000: Main RAM (diese Addresse werdet ihr im TIFF Tutorial brauchen)
0x48800000: Main RAM Cache
0x88000000: Kernel RAM
Also zurück zu main.c:
Jetzt fügt diese Zeilen hinzu:
int main(void)
{
sceKernelDcacheWritebackAll();
initScreenAndCtrl();
Fillvram(colours[INDEX_BLACK]);
Ja, jetzt kommt unsere main Funktion
Die ersten 2 Funktionen sind eigentlich nur zum Initialisieren des SDKs etc. und die Funktion Fillvram(colours[INDEX_BLACK]) füllt den Bildschirm
mit schwarzer Farbe.
SceCtrlData pad;
sceCtrlSetSamplingMode(1);
while(1)
{
pad.Buttons = 0;
sceCtrlReadBufferPositive(&pad, 1);
Print(0, 1, colours[INDEX_WHITE], "Hurra, ich hab gerade mein erstes Programm");
Print(0, 2, colours[INDEX_WHITE], "Savegame Exploit gecodet!");
Print(0, 3, colours[INDEX_WHITE], "$ony hat keine Chance mehr :P");
changeBuffer();
if(pad.Buttons & PSP_CTRL_CROSS)
{
Print(0, 5, colours[INDEX_RED], "Servus");
changeBuffer();
sceKernelDelayThread(150000);
break;
};
};
sceKernelExitGame();
return 0;
};
Zu diesen Zeilen denk ich mal muss ich auch nicht so viel sagen, wer dass nicht kapiert, sollte sich noch mal mit den Grundkenntnissen beschäftigen
Ihr könnt jetzt die main.c Datei schließen.
Jetzt erstellt eine Datei namens "linkfile.l" und schreibt hinein:
OUTPUT_FORMAT("elf32-littlemips")
OUTPUT_ARCH(mips)
ENTRY(_start)
SECTIONS
{
. = 0x09FD0C00;
.text.start :
{
*(.text.start)
}
.text :
{
*(.text)
}
.rodata :
{
*(.rodata)
}
.data :
{
*(.data)
}
.bss :
{
*(.bss)
}
}
So, jetzt müsste man halt MIPS können
Nur mal ne kurze Erklährung:
Deshalb muss die Funktion "void _start(...)" heißen
Die binary wird auf die Addresse "0x09FD0C00" geladen, später wichtig fürs TIFF!
Mit den anderen Zeilen werden die einzelnen Hauptspeicher Sektionen zugeordnet.
UUUND die makefile:
PSPSDK=$(shell psp-config --pspsdk-path)
PSPDEV=$(shell psp-config --pspdev-path)
INCLUDE=$(PSPSDK)/include
all: us eu
clean:
rm -rf *~ *.o *.elf *.bin *.s *.bin
CC = psp-gcc
CFLAGS := $(INCLUDES) -W -Wall -G0 -fno-pic -mno-abicalls -w
FLAGS_US := -DMERCURY_US
FLAGS_EU := -DMERCURY_EU
ASM = psp-as
main_us.o: main.c mercury_sdk.h
$(CC) $(CFLAGS) $(FLAGS_US) -S main.c -o main_us.s
$(ASM) main_us.s -o main_us.o
main_eu.o: main.c mercury_sdk.h
$(CC) $(CFLAGS) $(FLAGS_EU) -S main.c -o main_eu.s
$(ASM) main_eu.s -o main_eu.o
us: main_us.o linkfile.l
$(PSPDEV)/bin/psp-ld -T linkfile.l -o main_us.elf -L$(PSPSDK)/lib main_us.o
$(PSPDEV)/bin/psp-strip -s main_us.elf
$(PSPDEV)/bin/psp-objcopy -O binary main_us.elf mercury_us.bin
eu: main_eu.o linkfile.l
$(PSPDEV)/bin/psp-ld -T linkfile.l -o main_eu.elf -L$(PSPSDK)/lib main_eu.o
$(PSPDEV)/bin/psp-strip -s main_eu.elf
$(PSPDEV)/bin/psp-objcopy -O binary main_eu.elf mercury_eu.bin
Das ist die original makefile von FreePlay, für ein so kleines Programm ist sie OK
So, jetzt erstellt ihr das Projekt mit dem Befehl "make".
Kompiert jetzt die beiden Ordner aus dem Ordner "Bin_loader" in dem Download oben nach ms0:/PSP/SAVEGAME und die beiden Binary Dateien (je nach mercury
Version) ins Root des MemorySticks.
Startet Mercury, ladet den Spielstand und geniest unlizensierten Code auf PSPs mit niedriger Firmware als 6.20
Jetzt werdet ihr euch denken: Öch, was erzählt denn dieser HacKmaN ständig für eine Scheiße? Das ist doch nicht schwieriger zu coden als ne EBOOT!
Naja, wie dem so sei, wenn ihr zum ersten mal versucht eine Datei zu inkludieren, werdet ihr eine böse Überraschung erleben^^
Entweder der Compiler findet die Datei nicht, oder wenn er sie nach etwas herumbasteln in der makefile findet, wird es euch nichts bringen:
1. Mache Headerdateien wie pspctrl.h werden nicht mit dem SDK kompatibel sein, "blablabla was already decleared..."
2. In den Headerdateien des PSPSDKs stehen nur Funktions-Prototypen, die Funktionen im pspsdk wurden keinesfalls neu geschrieben,
sondern sind Zeiger auf die NIDs der Funktionen. Diese NIDs ändern sich mit so ziemlich jeder Firmware, deshalb ist es unmöglich die aus dem SDK zu benutzten.
Also müssen wir das salbe machen: Die Funktionen mit über ihre NIDs importieren, daher der Name "Funktion import".
Also, wie importieren wir jetzt Funktionen???
Nun ja, das ist nicht so einfach wie er ausschaut. Ich werde mich jetzt auch nicht groß damit beschäftigen, teilweiße hab ichs selbst noch nicht verstanden
Nur mal die Gundlagen:
Irgendwo auf der HD nen Ordner erstellen, SilverSprings Dokumentation und eine decryptete paf.prx reinkopieren, CMD starten, mit CD in den Ordner wechseln
und dann folgendes eingeben:
prxtool -f -n psplibdoc.xml paf.prx
Dann den NID suchen und in Mercury mit folgender Syntax initialisieren:
Bei EU Version:
int (* Funktion) (Parameter oder void) = (void *) (0x0880406C + NID);
Bei US Version:
int (* Funktion) (Parameter oder void) = (void *) (0x08804000 + NID);
Das ist NICHT getestet, sollte aber funktionieren.
Es können auch keine Libarys genutzt werden, daher können Libs wie OSLib oder VLF nicht genutzt werden, diese müssen neu geschrieben werden.
Naja, ich denke das reicht erstmal, das TIFF Tutorial kommt bald (kann aber noch ein bisschen dauern xD).
Und ich verspreche euch, das wird komplizierter, denn fürs 5.03 TIFF gibt es weder ein SDK noch irgendeine Dokumentation oder ein Tutorial
Grund: Zu instabil um groß dafür zu coden xD
mfg, HacKmaN
Super echt klasse!
Lerne auch grade C/++ und da ist das sehr hilfreich!
PS: Freue mich schon auf das Tiff Tut!!!
Danke... ;D
Danke
Ich arbeite schon dran xD
|
|
19.03.2010 18:43 |
|
|
|
D!S
Legende
Beiträge: 1.537
Gruppe: User
Registriert seit: Sep 2009
Status:
Abwesend
Danke erhalten: 470
|
RE: [TUT-1] Binarys für ein Exploit - Mercury
So, hi alle zusammen!
Erstmal: Sorry, falls die Zeilenumbrüche beschissen sind, ich habe dieses TUT offline mit Notepad++ geschrieben
Wer Fehler findet, bitte melden (ich meine mir melden, nicht einem Moderator )
Dieses Tutorial ist größtenteils eine reine Übersetztung von FreePlays Code, deshalb danke an ihn
Ich hab mich ja wie schon oft gesagt viel mit exploit beschäftigt, und hab mich dazu entschieden 2 kleine Tutorials zu machen:
- Eins für Mercury (mit dem SDK von FreePlay)
- Eins für das 5.03 TIFF Exploit (für dass gibt es kein SDK)
Danke an:
- Team C+D: Das Mercury Exploit, den Binary loader und das NET ifHandle Kernel-Mode Exploit (UnlockKmem_9A6261EC(NetIfhandle_lib_9A6261EC) )
- FreePlay: Für das veröffentlichen des Exploits und das SDK (ja, ich danke im dafür, ohne ihn hätte ich womöglich nie für ein GameSploit gecodet )
- Raiden1996: Für seine großartige Hilfe in sachen Function Imports und MIPS Programmierung
- PSPDEV: Für das Modul Tutorial und das perfekte Forum
- lan.st: Für das super Forum (dort und auf PSPDEV kann man so viel lernen )
- Jeden den ich vergessen habe
Was jeder haben sollte, der dieses Tutorial liest:
- Grundkenntnisse in C
- Damit es besser verständlich ist empfehle ich auch Grundlagen in MIPS
- Eine Mercury UMD (ein SK ist empfehlenswert, die ideotisch langen Ladezeiten sind beim coden echt nervig)
- Eine eingerichtete Entwicklungsumgebung, egal ob MinPSPw oder Cygwin
- [URL=]Dieses[/URL] Packet. Es enthält den Binary loader von FreePlay/Team C+D und das FreePlay's SDK.
/* Wenn ihr Funktionen importieren wollt (in diesem TUT aber nicht ausführlich besprochen), braucht ihr auch folgendes: */
- PRXTOOL von PSPDEV.org
- Die paf.prx eurer Firmware und die Libdoc von SilverSpring
Also fangen wir mal an
Entpackt das gedownloadete Archiv irgendwo auf der Festplatte und geht in den Ordner wo die Datei header Datei "mercury_sdk" und der Ordner "Includes" sind.
Euch ist sicher aufgefallen, dass weder eine Quelldatei noch eine Makefile vorhanden ist... Die erstellen wir miteinander
Erstellt euch jetzt eine Datei namens "crt0.c". Aus dieser Datei werden wir den main-thread deklinieren und laden.
Öffnet die Datei und gebt folgende Zeile ein:
int main(void);
void _start(unsigned long, unsigned long *) __attribute__ ((section (".text.start")));
void _start(unsigned long arglen, unsigned long *argp)
{
main();
while(1);
};
Die Erklährung:
int main(void);
Der Prototyp meiner main Funktion.
void _start(unsigned long, unsigned long *) __attribute__ ((section (".text.start")));
Jeder der MIPS kann weiß, dass der Hauptspeicher in verschiedene Sektionen aufgeteilt ist (z.B. ".data" für Variablen und ".text" für Funktionen).
Wenn das Exploit geladen wird, wird die Sektion ".text.start" ausgeführt. Durch diese Zeile weiß der Compiler, wo der Ausführbare Bereich beginnt.
Warum es _start sein muss, erklähr ich später.
void _start(unsigned long arglen, unsigned long *argp)
{
main();
while(1);
};
Übersetzt: Starte die Funktion "main(void)" und warte wenn sie beendet wird für immer.
So. Jetzt schließt die crt0.c, erstellt euch die Datei main.c, öffnet sie und schreibt folgendet Text hinein:
#include "mercury_sdk.h"
#include "crt0.c"
#define SCREEN_WIDTH 512
#define SCREEN_HEIGHT 272
#define LINESIZE 512
#define CMAX_X 60
#define CMAX_Y 38
#define FRAMESIZE 0xAA000
#define INDEX_BLACK 10
#define INDEX_WHITE 1
#define INDEX_PINK 2
#define INDEX_RED 3
#define INDEX_BLUE 4
#define INDEX_GREEN 5
#define INDEX_YELLOW 6
#define INDEX_CYAN 7
#define INDEX_GRAY 9
#define INDEX_DARKGREEN 0
#define RANDOM rand()%9
unsigned char *vramtop=(unsigned char *)0x04000000;
unsigned long drawframe;
unsigned char *GetVramAddr(unsigned long x, unsigned long y)
{
return vramtop + (drawframe?FRAMESIZE:0) + x*4 + y*LINESIZE*4 + 0x40000000;
}
unsigned long colours[11] =
{
0x00008800L,
0x00FFFFFFL,
0x00FF00FFL,
0x000000FFL,
0x00FF0000L,
0x0000FF00L,
0x0000FFFFL,
0x00FFFF00L,
0x00FFFF88L,
0x00888888L,
0x00000000L
};
const unsigned char font[] =
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00,
0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00,
0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00,
0x30,0x7C,0xC0,0x78,0x0C,0xF8,0x30,0x00,
0x00,0xC6,0xCC,0x18,0x30,0x66,0xC6,0x00,
0x38,0x6C,0x38,0x76,0xDC,0xCC,0x76,0x00,
0x60,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,
0x18,0x30,0x60,0x60,0x60,0x30,0x18,0x00,
0x60,0x30,0x18,0x18,0x18,0x30,0x60,0x00,
0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00,
0x00,0x30,0x30,0xFC,0x30,0x30,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x60,
0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,
0x06,0x0C,0x18,0x30,0x60,0xC0,0x80,0x00,
0x7C,0xC6,0xCE,0xDE,0xF6,0xE6,0x7C,0x00,
0x30,0x70,0x30,0x30,0x30,0x30,0xFC,0x00,
0x78,0xCC,0x0C,0x38,0x60,0xCC,0xFC,0x00,
0x78,0xCC,0x0C,0x38,0x0C,0xCC,0x78,0x00,
0x1C,0x3C,0x6C,0xCC,0xFE,0x0C,0x1E,0x00,
0xFC,0xC0,0xF8,0x0C,0x0C,0xCC,0x78,0x00,
0x38,0x60,0xC0,0xF8,0xCC,0xCC,0x78,0x00,
0xFC,0xCC,0x0C,0x18,0x30,0x30,0x30,0x00,
0x78,0xCC,0xCC,0x78,0xCC,0xCC,0x78,0x00,
0x78,0xCC,0xCC,0x7C,0x0C,0x18,0x70,0x00,
0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,
0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x60,
0x18,0x30,0x60,0xC0,0x60,0x30,0x18,0x00,
0x00,0x00,0xFC,0x00,0x00,0xFC,0x00,0x00,
0x60,0x30,0x18,0x0C,0x18,0x30,0x60,0x00,
0x78,0xCC,0x0C,0x18,0x30,0x00,0x30,0x00,
0x7C,0xC6,0xDE,0xDE,0xDE,0xC0,0x78,0x00,
0x30,0x78,0xCC,0xCC,0xFC,0xCC,0xCC,0x00,
0xFC,0x66,0x66,0x7C,0x66,0x66,0xFC,0x00,
0x3C,0x66,0xC0,0xC0,0xC0,0x66,0x3C,0x00,
0xF8,0x6C,0x66,0x66,0x66,0x6C,0xF8,0x00,
0xFE,0x62,0x68,0x78,0x68,0x62,0xFE,0x00,
0xFE,0x62,0x68,0x78,0x68,0x60,0xF0,0x00,
0x3C,0x66,0xC0,0xC0,0xCE,0x66,0x3E,0x00,
0xCC,0xCC,0xCC,0xFC,0xCC,0xCC,0xCC,0x00,
0x78,0x30,0x30,0x30,0x30,0x30,0x78,0x00,
0x1E,0x0C,0x0C,0x0C,0xCC,0xCC,0x78,0x00,
0xE6,0x66,0x6C,0x78,0x6C,0x66,0xE6,0x00,
0xF0,0x60,0x60,0x60,0x62,0x66,0xFE,0x00,
0xC6,0xEE,0xFE,0xFE,0xD6,0xC6,0xC6,0x00,
0xC6,0xE6,0xF6,0xDE,0xCE,0xC6,0xC6,0x00,
0x38,0x6C,0xC6,0xC6,0xC6,0x6C,0x38,0x00,
0xFC,0x66,0x66,0x7C,0x60,0x60,0xF0,0x00,
0x78,0xCC,0xCC,0xCC,0xDC,0x78,0x1C,0x00,
0xFC,0x66,0x66,0x7C,0x6C,0x66,0xE6,0x00,
0x78,0xCC,0xE0,0x70,0x1C,0xCC,0x78,0x00,
0xFC,0xB4,0x30,0x30,0x30,0x30,0x78,0x00,
0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xFC,0x00,
0xCC,0xCC,0xCC,0xCC,0xCC,0x78,0x30,0x00,
0xC6,0xC6,0xC6,0xD6,0xFE,0xEE,0xC6,0x00,
0xC6,0xC6,0x6C,0x38,0x38,0x6C,0xC6,0x00,
0xCC,0xCC,0xCC,0x78,0x30,0x30,0x78,0x00,
0xFE,0xC6,0x8C,0x18,0x32,0x66,0xFE,0x00,
0x78,0x60,0x60,0x60,0x60,0x60,0x78,0x00,
0xC0,0x60,0x30,0x18,0x0C,0x06,0x02,0x00,
0x78,0x18,0x18,0x18,0x18,0x18,0x78,0x00,
0x10,0x38,0x6C,0xC6,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x78,0x0C,0x7C,0xCC,0x76,0x00,
0xE0,0x60,0x60,0x7C,0x66,0x66,0xDC,0x00,
0x00,0x00,0x78,0xCC,0xC0,0xCC,0x78,0x00,
0x1C,0x0C,0x0C,0x7C,0xCC,0xCC,0x76,0x00,
0x00,0x00,0x78,0xCC,0xFC,0xC0,0x78,0x00,
0x38,0x6C,0x60,0xF0,0x60,0x60,0xF0,0x00,
0x00,0x00,0x76,0xCC,0xCC,0x7C,0x0C,0xF8,
0xE0,0x60,0x6C,0x76,0x66,0x66,0xE6,0x00,
0x30,0x00,0x70,0x30,0x30,0x30,0x78,0x00,
0x0C,0x00,0x0C,0x0C,0x0C,0xCC,0xCC,0x78,
0xE0,0x60,0x66,0x6C,0x78,0x6C,0xE6,0x00,
0x70,0x30,0x30,0x30,0x30,0x30,0x78,0x00,
0x00,0x00,0xCC,0xFE,0xFE,0xD6,0xC6,0x00,
0x00,0x00,0xF8,0xCC,0xCC,0xCC,0xCC,0x00,
0x00,0x00,0x78,0xCC,0xCC,0xCC,0x78,0x00,
0x00,0x00,0xDC,0x66,0x66,0x7C,0x60,0xF0,
0x00,0x00,0x76,0xCC,0xCC,0x7C,0x0C,0x1E,
0x00,0x00,0xDC,0x76,0x66,0x60,0xF0,0x00,
0x00,0x00,0x7C,0xC0,0x78,0x0C,0xF8,0x00,
0x10,0x30,0x7C,0x30,0x30,0x34,0x18,0x00,
0x00,0x00,0xCC,0xCC,0xCC,0xCC,0x76,0x00,
0x00,0x00,0xCC,0xCC,0xCC,0x78,0x30,0x00,
0x00,0x00,0xC6,0xD6,0xFE,0xFE,0x6C,0x00,
0x00,0x00,0xC6,0x6C,0x38,0x6C,0xC6,0x00,
0x00,0x00,0xCC,0xCC,0xCC,0x7C,0x0C,0xF8,
0x00,0x00,0xFC,0x98,0x30,0x64,0xFC,0x00,
0x1C,0x30,0x30,0xE0,0x30,0x30,0x1C,0x00,
0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x00,
0xE0,0x30,0x30,0x1C,0x30,0x30,0xE0,0x00,
0x76,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
void Fillvram(unsigned long color)
{
unsigned char *vptr0;
unsigned long i;
vptr0 = GetVramAddr(0, 0);
for (i = 0; i < (FRAMESIZE/4); i++)
{
*(unsigned long *)vptr0 = color;
vptr0 += 4;
}
}
void PutChar(unsigned long x, unsigned long y, unsigned long color, unsigned long bgcolor, unsigned char ch, char drawfg, char drawbg, char mag)
{
unsigned char *vptr0;
unsigned char *vptr;
const unsigned char *cfont;
unsigned long cx, cy;
unsigned long b;
char mx, my;
cfont = font + ch*8;
vptr0=GetVramAddr(x, y);
for (cy = 0; cy < 8; cy++)
{
for (my = 0; my < mag; my++)
{
vptr = vptr0;
b = 0x80;
for (cx = 0; cx < 8; cx++)
{
for (mx = 0; mx < mag; mx++)
{
if ((*cfont&b) != 0)
{
if (drawfg) // Die Schrift selber, sollte aktiviert bleiben ;)
{
*(unsigned long *)vptr = color;
};
}
else
{
// Der Hintergrund, ich hab ihn in der Print() Funktion deaktiviert, wenn benötigt den vorletzten Param auf 1 stellen :)
if (drawbg)
{
*(unsigned long *)vptr = bgcolor;
};
};
vptr += 4;
};
b = b>>1;
};
vptr0 += LINESIZE*4;
};
cfont++;
};
};
void Print(unsigned long x, unsigned long y, unsigned long color, const char *str)
{
while (*str != 0 && x < CMAX_X && y < CMAX_Y)
{
// Ich hab die Hintergrundfarbe deaktiviert
PutChar(x*8, y*8, color, 0, *str, 1, 0, 1);
str++;
x++;
if (x >= CMAX_X)
{
x = 0;
y++;
}
}
}
void changeBuffer()
{
sceDisplayWaitVblankStart();
sceDisplaySetFrameBuf((void*)GetVramAddr(0,0), 512, PSP_DISPLAY_PIXEL_FORMAT_8888, 0);
drawframe=(drawframe?0:1);
}
void initScreenAndCtrl()
{
drawframe = 0;
sceDisplaySetMode(0,SCREEN_WIDTH,SCREEN_HEIGHT);
sceDisplaySetFrameBuf((void*)vramtop, 512, PSP_DISPLAY_PIXEL_FORMAT_8888, 1);
Fillvram(0x00000000);
drawframe = 1;
Fillvram(0x00000000);
sceCtrlSetSamplingCycle(0);
sceCtrlSetSamplingMode(1);
}
Auf diese Zeilen geh ich jetzt nicht weiter ein, sie die Funktionen "Print" etc. wurden bis jetzt in jedem Exploit verwendet, da man
mit wenigen Änderungen erreichen kann, das keine Funktionen erreicht werden (nach dem TIFF Tutorial werdet ihr verstehen was ich meine).
Wenn ihr nicht wisst was mit dem "0x04000000" gemeint ist, das ist ganz einfach: 0x04000000 ist die Addresse des VRAMs der PSP.
Die anderen Speicher Addressen, die ihr vielleicht mal brauchen könntet:
0x00010000: Scratch pad (fast unnützt, nur 16kb groß)
0x04000000: VRAM
0x44000000: VRAM Cache
0x08800000: Main RAM (diese Addresse werdet ihr im TIFF Tutorial brauchen)
0x48800000: Main RAM Cache
0x88000000: Kernel RAM
Also zurück zu main.c:
Jetzt fügt diese Zeilen hinzu:
int main(void)
{
sceKernelDcacheWritebackAll();
initScreenAndCtrl();
Fillvram(colours[INDEX_BLACK]);
Ja, jetzt kommt unsere main Funktion
Die ersten 2 Funktionen sind eigentlich nur zum Initialisieren des SDKs etc. und die Funktion Fillvram(colours[INDEX_BLACK]) füllt den Bildschirm
mit schwarzer Farbe.
SceCtrlData pad;
sceCtrlSetSamplingMode(1);
while(1)
{
pad.Buttons = 0;
sceCtrlReadBufferPositive(&pad, 1);
Print(0, 1, colours[INDEX_WHITE], "Hurra, ich hab gerade mein erstes Programm");
Print(0, 2, colours[INDEX_WHITE], "Savegame Exploit gecodet!");
Print(0, 3, colours[INDEX_WHITE], "$ony hat keine Chance mehr :P");
changeBuffer();
if(pad.Buttons & PSP_CTRL_CROSS)
{
Print(0, 5, colours[INDEX_RED], "Servus");
changeBuffer();
sceKernelDelayThread(150000);
break;
};
};
sceKernelExitGame();
return 0;
};
Zu diesen Zeilen denk ich mal muss ich auch nicht so viel sagen, wer dass nicht kapiert, sollte sich noch mal mit den Grundkenntnissen beschäftigen
Ihr könnt jetzt die main.c Datei schließen.
Jetzt erstellt eine Datei namens "linkfile.l" und schreibt hinein:
OUTPUT_FORMAT("elf32-littlemips")
OUTPUT_ARCH(mips)
ENTRY(_start)
SECTIONS
{
. = 0x09FD0C00;
.text.start :
{
*(.text.start)
}
.text :
{
*(.text)
}
.rodata :
{
*(.rodata)
}
.data :
{
*(.data)
}
.bss :
{
*(.bss)
}
}
So, jetzt müsste man halt MIPS können
Nur mal ne kurze Erklährung:
Deshalb muss die Funktion "void _start(...)" heißen
Die binary wird auf die Addresse "0x09FD0C00" geladen, später wichtig fürs TIFF!
Mit den anderen Zeilen werden die einzelnen Hauptspeicher Sektionen zugeordnet.
UUUND die makefile:
PSPSDK=$(shell psp-config --pspsdk-path)
PSPDEV=$(shell psp-config --pspdev-path)
INCLUDE=$(PSPSDK)/include
all: us eu
clean:
rm -rf *~ *.o *.elf *.bin *.s *.bin
CC = psp-gcc
CFLAGS := $(INCLUDES) -W -Wall -G0 -fno-pic -mno-abicalls -w
FLAGS_US := -DMERCURY_US
FLAGS_EU := -DMERCURY_EU
ASM = psp-as
main_us.o: main.c mercury_sdk.h
$(CC) $(CFLAGS) $(FLAGS_US) -S main.c -o main_us.s
$(ASM) main_us.s -o main_us.o
main_eu.o: main.c mercury_sdk.h
$(CC) $(CFLAGS) $(FLAGS_EU) -S main.c -o main_eu.s
$(ASM) main_eu.s -o main_eu.o
us: main_us.o linkfile.l
$(PSPDEV)/bin/psp-ld -T linkfile.l -o main_us.elf -L$(PSPSDK)/lib main_us.o
$(PSPDEV)/bin/psp-strip -s main_us.elf
$(PSPDEV)/bin/psp-objcopy -O binary main_us.elf mercury_us.bin
eu: main_eu.o linkfile.l
$(PSPDEV)/bin/psp-ld -T linkfile.l -o main_eu.elf -L$(PSPSDK)/lib main_eu.o
$(PSPDEV)/bin/psp-strip -s main_eu.elf
$(PSPDEV)/bin/psp-objcopy -O binary main_eu.elf mercury_eu.bin
Das ist die original makefile von FreePlay, für ein so kleines Programm ist sie OK
So, jetzt erstellt ihr das Projekt mit dem Befehl "make".
Kompiert jetzt die beiden Ordner aus dem Ordner "Bin_loader" in dem Download oben nach ms0:/PSP/SAVEGAME und die beiden Binary Dateien (je nach mercury
Version) ins Root des MemorySticks.
Startet Mercury, ladet den Spielstand und geniest unlizensierten Code auf PSPs mit niedriger Firmware als 6.20
Jetzt werdet ihr euch denken: Öch, was erzählt denn dieser HacKmaN ständig für eine Scheiße? Das ist doch nicht schwieriger zu coden als ne EBOOT!
Naja, wie dem so sei, wenn ihr zum ersten mal versucht eine Datei zu inkludieren, werdet ihr eine böse Überraschung erleben^^
Entweder der Compiler findet die Datei nicht, oder wenn er sie nach etwas herumbasteln in der makefile findet, wird es euch nichts bringen:
1. Mache Headerdateien wie pspctrl.h werden nicht mit dem SDK kompatibel sein, "blablabla was already decleared..."
2. In den Headerdateien des PSPSDKs stehen nur Funktions-Prototypen, die Funktionen im pspsdk wurden keinesfalls neu geschrieben,
sondern sind Zeiger auf die NIDs der Funktionen. Diese NIDs ändern sich mit so ziemlich jeder Firmware, deshalb ist es unmöglich die aus dem SDK zu benutzten.
Also müssen wir das salbe machen: Die Funktionen mit über ihre NIDs importieren, daher der Name "Funktion import".
Also, wie importieren wir jetzt Funktionen???
Nun ja, das ist nicht so einfach wie er ausschaut. Ich werde mich jetzt auch nicht groß damit beschäftigen, teilweiße hab ichs selbst noch nicht verstanden
Nur mal die Gundlagen:
Irgendwo auf der HD nen Ordner erstellen, SilverSprings Dokumentation und eine decryptete paf.prx reinkopieren, CMD starten, mit CD in den Ordner wechseln
und dann folgendes eingeben:
prxtool -f -n psplibdoc.xml paf.prx
Dann den NID suchen und in Mercury mit folgender Syntax initialisieren:
Bei EU Version:
int (* Funktion) (Parameter oder void) = (void *) (0x0880406C + NID);
Bei US Version:
int (* Funktion) (Parameter oder void) = (void *) (0x08804000 + NID);
Das ist NICHT getestet, sollte aber funktionieren.
Es können auch keine Libarys genutzt werden, daher können Libs wie OSLib oder VLF nicht genutzt werden, diese müssen neu geschrieben werden.
Naja, ich denke das reicht erstmal, das TIFF Tutorial kommt bald (kann aber noch ein bisschen dauern xD).
Und ich verspreche euch, das wird komplizierter, denn fürs 5.03 TIFF gibt es weder ein SDK noch irgendeine Dokumentation oder ein Tutorial
Grund: Zu instabil um groß dafür zu coden xD
mfg, HacKmaN
Super echt klasse!
Lerne auch grade C/++ und da ist das sehr hilfreich!
PS: Freue mich schon auf das Tiff Tut!!!
Danke... ;D
Danke
Ich arbeite schon dran xD
Ok,danke!
Echt klasse...
Melde dich wenn du es fertig hast
|
|
19.03.2010 18:54 |
|
Folgende User bedanken sich: |
|
pspbricker
Mod a.D.
Beiträge: 3.428
Gruppe: User
Registriert seit: May 2008
Status:
Offline
Danke erhalten: 1641
|
RE: [TUT-1] Binarys für ein Exploit - Mercury
Danke !
Hast dir sehr viel Mühe gegeben
Meine PS3 Games : Warhawk , NFS: Pro Street, Motorstorm ,Midnight Club LA, LittleBigPlanet, GTA4, Uncharted 2, Overlord, Killzone2, PES10, Battlefield ´43, Socom: Confrontation,
Forum Regeln Beachten! KEIN ISO Talk! KEINE Beleidigungen! KEINE illegalen Links!
|
|
19.03.2010 19:17 |
|
Folgende User bedanken sich: |
|
Prototype92
Halbprofi
Beiträge: 114
Gruppe: User
Registriert seit: Mar 2010
Status:
Offline
Danke erhalten: 16
|
RE: [TUT-1] Binarys für ein Exploit - Mercury
|
|
19.03.2010 19:26 |
|
Folgende User bedanken sich: |
|
HacKmaN
Ex-Developer
Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009
Status:
Offline
Danke erhalten: 3319
|
RE: [TUT-1] Binarys für ein Exploit - Mercury
Danke !
Hast dir sehr viel Mühe gegeben
20 Minuten in denen ich eigentlich Latein lernen sollte xD
|
|
19.03.2010 19:41 |
|
|
|
Yata
Halbprofi
Beiträge: 166
Gruppe: User
Registriert seit: Dec 2009
Status:
Offline
Danke erhalten: 23
|
RE: [TUT-1] Binarys für ein Exploit - Mercury
Echt hammer TUT
Respect
LG
Yata
|
|
19.03.2010 20:45 |
|
Folgende User bedanken sich: |
|
HacKmaN
Ex-Developer
Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009
Status:
Offline
Danke erhalten: 3319
|
RE: [TUT-1] Binarys für ein Exploit - Mercury
Danke
|
|
19.03.2010 20:56 |
|
|
|
Dr. Soup
Durchstarter
Beiträge: 58
Gruppe: User
Registriert seit: Mar 2010
Status:
Offline
Danke erhalten: 70
|
RE: [TUT-1] Binarys für ein Exploit - Mercury
Ganz brauchbares TUT, aber man kann auch andere Imports, als von der paf benutzen^^
|
|
19.03.2010 22:39 |
|
|
|
HacKmaN
Ex-Developer
Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009
Status:
Offline
Danke erhalten: 3319
|
RE: [TUT-1] Binarys für ein Exploit - Mercury
Stimmt.
Sorry, ich hab das mit der paf mehr so als Beispiel gemeint
Naja, danke, wenn ich an nen PC komme bessere ichs aus.
|
|
20.03.2010 07:27 |
|
|
|
Total_Noob
Developer
Beiträge: 496
Gruppe: Developer
Registriert seit: Dec 2009
Status:
Offline
Danke erhalten: 2208
|
RE: [TUT-1] Binarys für ein Exploit - Mercury
Wenn du einen Savegame Exploit hast musst du Imports vom Game nehmen(EBOOB.BIN)
|
|
20.03.2010 08:45 |
|
|
|
flofrucht
Banned
Beiträge: 2.470
Gruppe: Banned
Registriert seit: Jul 2009
Status:
Abwesend
Danke erhalten: 4709
|
RE: [TUT-1] Binarys für ein Exploit - Mercury
Wenn du einen Savegame Exploit hast musst du Imports vom Game nehmen(EBOOB.BIN)
Du meinst wohl "eboot.bin"
(Ist nicht böse gemeint)
mfg.flo
|
|
20.03.2010 10:08 |
|
|
|
HacKmaN
Ex-Developer
Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009
Status:
Offline
Danke erhalten: 3319
|
RE: [TUT-1] Binarys für ein Exploit - Mercury
Danke, ich habs grad gemerkt, wenn man die Imports wie in Tut benutzt, crasht die PSP.
Ich bin im Moment mit der PSP on und kann deshalb meinen 'etwas' langen Post nicht editieren (die PSP hat nen Zeichen Eingabe Limit), wenn ich wieder an nen PC mit Netzt komm, update ich das Tutorial (und bessere die etwas misslungenen Sätze aus.)
Ansonsten:
Einfach die EBOOT.BIN aus nem SK von Mercury nehmen, mit prxdecr. decrypten und dann mit folgendem Befehl die NIDs bekommen:
prxtool -f -n psplibdoc.xml EBOOT.BIN
|
|
20.03.2010 10:15 |
|
|
|
Dr. Soup
Durchstarter
Beiträge: 58
Gruppe: User
Registriert seit: Mar 2010
Status:
Offline
Danke erhalten: 70
|
RE: [TUT-1] Binarys für ein Exploit - Mercury
Wenn du einen Savegame Exploit hast musst du Imports vom Game nehmen(EBOOB.BIN)
Falsch. Man muss nicht die Imports des Games nehmen, man kann alle usermode Imports benutzen, die von einem Modul, das im usermode geladen wird, benutzen.
|
|
20.03.2010 13:19 |
|
|
|
|