Antwort schreiben  Thema schreiben 
Seiten (2): « Erste [1] 2 Nächste > Letzte »
Verfasser Nachricht
HacKmaN
Ex-Developer
*


Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009

Status: Offline
Danke erhalten: 3319
Beitrag: #1
xPSP  [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 Wink
Wer Fehler findet, bitte melden (ich meine mir melden, nicht einem Moderator Tongue)
Dieses Tutorial ist größtenteils eine reine Übersetztung von FreePlays Code, deshalb danke an ihn Smile

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) Big Grin)
- 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 Wink)
- 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 Smile)
- 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 Smile
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 Wink

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:

Code:
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:

crt0.c :
int main(void);


Der Prototyp meiner main Funktion.

crt0.c :
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.

crt0.c :
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:

Code:
#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:

Code:
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:

Code:
int main(void)
{
    sceKernelDcacheWritebackAll();
    initScreenAndCtrl();
    Fillvram(colours[INDEX_BLACK]);


Ja, jetzt kommt unsere main Funktion Smile
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.

Code:
    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 Big Grin

Ihr könnt jetzt die main.c Datei schließen.
Jetzt erstellt eine Datei namens "linkfile.l" und schreibt hinein:

Code:
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 Tongue
Nur mal ne kurze Erklährung:

Code:
ENTRY(_start)


Deshalb muss die Funktion "void _start(...)" heißen Smile

Code:
    . = 0x09FD0C00;


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:

Code:
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 Tongue

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 Smile

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 Wink
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:

Code:
prxtool -f -n psplibdoc.xml paf.prx


Dann den NID suchen und in Mercury mit folgender Syntax initialisieren:
Bei EU Version:

Code:
int (* Funktion) (Parameter oder void) = (void *) (0x0880406C + NID);


Bei US Version:

Code:
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 Wink
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
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
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
Beitrag: #2
xPSP  RE: [TUT-1] Binarys für ein Exploit - Mercury

HacKmaN :
Spoiler: (anzeigen)


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
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Folgende User bedanken sich:
HacKmaN (Mar-19-2010)
HacKmaN
Ex-Developer
*


Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009

Status: Offline
Danke erhalten: 3319
Beitrag: #3
xPSP  RE: [TUT-1] Binarys für ein Exploit - Mercury

D!S :

HacKmaN :
Spoiler: (anzeigen)


Super echt klasse!
Lerne auch grade C/++ und da ist das sehr hilfreich!

PS: Freue mich schon auf das Tiff Tut!!!

Danke... ;D


Danke Smile
Ich arbeite schon dran xD

19.03.2010 18:43
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
D!S
Legende
*****


Beiträge: 1.537
Gruppe: User
Registriert seit: Sep 2009

Status: Abwesend
Danke erhalten: 470
Beitrag: #4
xPSP  RE: [TUT-1] Binarys für ein Exploit - Mercury

HacKmaN :

D!S :

HacKmaN :
Spoiler: (anzeigen)


Super echt klasse!
Lerne auch grade C/++ und da ist das sehr hilfreich!

PS: Freue mich schon auf das Tiff Tut!!!

Danke... ;D


Danke Smile
Ich arbeite schon dran xD


Ok,danke!
Echt klasse...
Melde dich wenn du es fertig hast Big Grin



19.03.2010 18:54
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Folgende User bedanken sich:
HacKmaN (Mar-19-2010)
pspbricker
Mod a.D.
*


Beiträge: 3.428
Gruppe: User
Registriert seit: May 2008

Status: Offline
Danke erhalten: 1641
Beitrag: #5
RE: [TUT-1] Binarys für ein Exploit - Mercury

Danke !
Hast dir sehr viel Mühe gegeben thumb




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
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Folgende User bedanken sich:
HacKmaN (Mar-19-2010)
Prototype92
Halbprofi
***


Beiträge: 114
Gruppe: User
Registriert seit: Mar 2010

Status: Offline
Danke erhalten: 16
Beitrag: #6
RE: [TUT-1] Binarys für ein Exploit - Mercury

Danke gutes tut^^

19.03.2010 19:26
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Folgende User bedanken sich:
HacKmaN (Mar-19-2010)
HacKmaN
Ex-Developer
*


Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009

Status: Offline
Danke erhalten: 3319
Beitrag: #7
xPSP  RE: [TUT-1] Binarys für ein Exploit - Mercury

pspbricker :
Danke !
Hast dir sehr viel Mühe gegeben thumb


20 Minuten in denen ich eigentlich Latein lernen sollte xD

19.03.2010 19:41
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Yata
Halbprofi
***


Beiträge: 166
Gruppe: User
Registriert seit: Dec 2009

Status: Offline
Danke erhalten: 23
Beitrag: #8
xPSP  RE: [TUT-1] Binarys für ein Exploit - Mercury

Echt hammer TUT
Respect Wink

LG
Yata

19.03.2010 20:45
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Folgende User bedanken sich:
HacKmaN (Mar-19-2010)
HacKmaN
Ex-Developer
*


Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009

Status: Offline
Danke erhalten: 3319
Beitrag: #9
RE: [TUT-1] Binarys für ein Exploit - Mercury

Danke Smile

19.03.2010 20:56
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Dr. Soup
Durchstarter
**


Beiträge: 58
Gruppe: User
Registriert seit: Mar 2010

Status: Offline
Danke erhalten: 70
Beitrag: #10
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
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
HacKmaN
Ex-Developer
*


Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009

Status: Offline
Danke erhalten: 3319
Beitrag: #11
RE: [TUT-1] Binarys für ein Exploit - Mercury

Stimmt.
Sorry, ich hab das mit der paf mehr so als Beispiel gemeint Wink
Naja, danke, wenn ich an nen PC komme bessere ichs aus.

20.03.2010 07:27
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Total_Noob
Developer
*


Beiträge: 496
Gruppe: Developer
Registriert seit: Dec 2009

Status: Offline
Danke erhalten: 2208
Beitrag: #12
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
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
flofrucht
Banned


Beiträge: 2.470
Gruppe: Banned
Registriert seit: Jul 2009

Status: Abwesend
Danke erhalten: 4709
Beitrag: #13
xPSP  RE: [TUT-1] Binarys für ein Exploit - Mercury

Total_Noob :
Wenn du einen Savegame Exploit hast musst du Imports vom Game nehmen(EBOOB.BIN)

Du meinst wohl "eboot.bin"Wink
(Ist nicht böse gemeint)
mfg.flo

20.03.2010 10:08
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
HacKmaN
Ex-Developer
*


Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009

Status: Offline
Danke erhalten: 3319
Beitrag: #14
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
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Dr. Soup
Durchstarter
**


Beiträge: 58
Gruppe: User
Registriert seit: Mar 2010

Status: Offline
Danke erhalten: 70
Beitrag: #15
xPSP  RE: [TUT-1] Binarys für ein Exploit - Mercury

Total_Noob :
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
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Seiten (2): « Erste [1] 2 Nächste > Letzte »
Antwort schreiben  Thema schreiben 

Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
xGames Exploit Hunting SkyleN 15 24.918 16.02.2015 09:01
Letzter Beitrag: fifanutri
xPSP Kernel Exploit fener98 22 5.810 20.05.2011 17:57
Letzter Beitrag: PSP_Lord
xPSP Neuer Savegame Exploit by mrmrm Fly Destination 11 3.417 08.01.2011 18:43
Letzter Beitrag: Fly Destination
xPSP CODE_R3D hat vielleicht einen neuen Tiff-Exploit gefunden Mishka84 2 1.716 20.11.2010 20:07
Letzter Beitrag: Mishka84
xPSP [Exploit?] Crashes PSP on every FW -blue7 7 2.673 13.07.2010 21:00
Letzter Beitrag: RainMan

Druckversion anzeigen
Thema einem Freund senden
Thema abonnieren | Thema zu den Favoriten hinzufügen




» zum Seitenanfang