Antwort schreiben  Thema schreiben 
Verfasser Nachricht
DarXPloit_$a1
Halbprofi
***


Beiträge: 206
Gruppe: User
Registriert seit: Oct 2010

Status: Offline
Danke erhalten: 218
Beitrag: #1
xPSP  [TUT] Exploiting Savegames [TEIL 3]

-> Exploiting Savegames [TEIL 1]

-> Exploiting Savegames [TEIL 2]

############################################################ ###################

Der 3. Teil - Main.c

Ich werde anhand des berühmt berüchtigten Sparta SDK´s erklären.

Nachdem wir uns gründlichst mit Teil 1 und ebenfalls Teil 2 des Tutorials auseinander gesetzt haben, können wir uns jetzt um unseren ausführbaren Code kümmern.
Dieser "eigentlicher" code wird sich später in Form der Datei "main.c" befinden.


Bevor wir beginnen:

1. Erst einmal brauchen wir einen Text Editor , oder eine Entwicklungsumgebung.
Ich persönlich finde das Notepad++ sehr gut für solche Zwecke.

2. Zudem werde ich nicht den ganzen code ausführlich erklären können. Zu faul Tongue
Ich erkläre nur das aller nötigste ausführlich, der Rest ist eh nur Augenweide.

3. Ich stelle euch hiermit als erstes mal ein SDK zur Verfügung.
Dort befinden sich typische .h files ( Header Dateien) für PSP, aber auch noch eine help.h.
In dieser help.h befindet sich eine Ansammlung an Delarationen und Funktionen von dem Sparta SDK welche ihr natürlich benutzen könnt. Es lohnt sich auf jeden Fall die Datei zu durchstöbern.


Also beginnen wir:

Als erstes müssen wir in der main.c die "sdk.h" inlcudieren. In der "sdk.h" wiederum befinden sich alle Includierungen die wir benötigen werden.
------------------------------------------------------------------------------------------------------------


Werfen wir also zunächst einen Blick auf die sdk.h, bevor wir sie in der main.c deklarieren.

SDK.H

Code:
#include "pspdisplay.h"
#include "pspctrl.h"
#include "pspkernel.h"
#include "pspdebug.h"
#include "pspaudio.h"
#include "help.h"

#ifndef __VAL-SDK__
#define __VAL-SDK__

// Typedefs
typedef unsigned char byte;

#endif

Jetz kann man hoffentlich verstehen , was ich gemeint habe:
Da die sdk.h alle unsere anderen .h files includiert, brauchen wir nur dieses sdk.h in unsere main.c einbinden. Das spart Platz und trägt der Übersichtlichkeit bei.
--------------------------------------------------------------------------------------------------------



Nach diesem kurzem Zwischenschritt bringen wir nun unser "sdk.h" in unsere main.c

Main.c

Code:
#include "sdk.h"


Ok, jetzt wollen wir mal Farbe ins Spiel bringen Tongue
Wir werden nun mal ein paar Farb-Namen definen und ihnen Farbwerte zuweisen.
Das machen wir so:

Code:
#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 long colours[11];

int color,i;


void InitGlobals()
{
    colours[10] = 0x00000000L;
    colours[1] = 0x00FFFFFFL;
    colours[2] = 0x00FF00FFL;
    colours[3] = 0x000000FFL;
    colours[4] = 0x00FF0000L;
    colours[5] = 0x0000FF00L;
    colours[6] = 0x0000FFFFL;
    colours[7] = 0x00FFFF00L;
    colours[8] = 0x00FFFF88L;
    colours[9] = 0x00888888L;
    colours[0] = 0x00008800L;

    i=0;
    color=INDEX_GRAY;
}

Jeder Wert "colours[0] = 0x00008800L" hat eine Nummer (hier 0) welche mit unseren definieten Namen "INDEX_DARKGREEN 0" übereinstimmen sollte.
Später mir wir dadurch nur den Farb-Namen benützen.




Jetzt gebe ich euch nochmal den Syntax aller Funktionen an, die nun verwendet werden können Tongue
Das sollten wir ebenfalls in unsere main.c schreiben, um immer die Übersicht über unsere Funktionen zu haben.
Nicht vergessen , die richtige Funktion befindet sich in der help.h !

Code:
// get vram address for character position
unsigned char *GetVramAddr(unsigned long x,unsigned long y);

// print a single character
void PutChar(unsigned long x,unsigned long y,unsigned long color,unsigned long bgcolor,unsigned char ch,char drawfg,char drawbg,char mag);

// print a string
void Print(unsigned long x,unsigned long y,unsigned long color,const char *str);

// x is in pixels rather than character cells
void PrintFine(unsigned long x,unsigned long y,unsigned long color,const char *str);

// clear video ram
void Fillvram(unsigned long color);

void WriteNibble(int x, int y, unsigned char val);

void WriteByte(int x, int y, unsigned char val);

void WriteDword(int x, int y, unsigned long val);

void WriteNibbleDummy(int x, int y, unsigned char val);

void WriteByteDummy(int x, int y, unsigned char val);

void WriteDwordDummy(int x, int y, unsigned long val);

void FillRect(RECT *xirect, unsigned long xicolour);

void MoveToEx(short x, short y);

void LineTo(short x, short y);

void changeBuffer();

void DebugValue(int y, char * label, unsigned long val);

void WriteDecimal(int x, int y, unsigned long val);

void initScreenAndCtrl();

void memcpy(char *dest, char *src, int size);

int strlen(char * xistr);

void createScreenshot();

void memdump();






Und weiter gehts !

Im späteren Verlauf wollen wir ja sicherlich unser Joypad benützen. Zum Beispiel , wenn wir x drücken, dann soll ein Programm oder eine Funktion starten (aka If Bedingung).

Aber wie stellen wir das an ? - Ganz einfach Smile

Dafür müssen wir zunächst "SceCtrlData" ins Spiel bringen. Das returned unsere Controller Daten.
Nachdem wir es deklariert haben , geben wir ihr?ihm *lol* noch einen Trivialnamen, in diesem Fall "gpaddata".

Unsere If Bedingungen selbst werden wir in einer "void" sammeln. Das hilft wieder mal zur Übersichtlichkeit.
Am Ende sieht das dann so aus:

Code:
SceCtrlData gpaddata;

void ProcessKeys(unsigned long xikeys)
{
  if (xikeys & PSP_CTRL_UP || xikeys & PSP_CTRL_RIGHT) {
             if(color>=10) { color=0; }
             else { color++; }
  // up taste oder recht Taste drücken um Farbe zu verändern
  }
  if (xikeys & PSP_CTRL_DOWN || xikeys & PSP_CTRL_LEFT) {
             if(color<0) { color=10; }
             else { color--; }
  // down taste oder links Taste drücken um Farbe zu verändern
  }
  if (xikeys & PSP_CTRL_HOME) // if home is pressed
  {
             for(i=0;i<278;i++) {
                                Fillvram(0x00FFFFFFL);
                                changeBuffer();                                        // flip screen to display what i just wrote
                                sceKernelDelayThread(1*1000);
             }
             changeBuffer();                                        // flip the buffer back to drawing mode
             fadeIn();                                              // fadeIn
             fadeOut();                                             // fadeOut
           sceKernelExitGame();                             // exit
  }

  if (xikeys & PSP_CTRL_TRIANGLE) createScreenshot();
  if (xikeys & PSP_CTRL_CIRCLE) memdump();
}





So das wars Wink - NEIN , Moment mal ?!?


In C haben wir doch die main() , in der sich unser Hauptcode befindet.
So leicht haben wir es bei Savegame Exploits nicht. Da wir durch unseren Shellcode zu einer bestimmten Stelle im RAM springen, müssen wir das auch der main.c deutlich machen.
Und zwar so:

Code:
void _start(unsigned long, unsigned long *) __attribute__ ((section (".text.start")));
void _start(unsigned long arglen, unsigned long *argp)
{
}


Das wird unseren Code an der vom Shellcode & Linker.x gewünschten RAM-Location ausführen.


Als Erstes werden wir nun die Function "sceKernelDcacheWritebackAll();" declarieren.
Das wird unsere Cache zum Memory zurückschreiben.
.
Ebenfalls schreiben wir noch "InitGlobals();" Damit haben wir die Farbe im Hauptprogramm.
Die "initScreenAndCtrl();" darf auch nicht fehlen, da sie den Bildschirm und unsere Controls initialisiert Tongue

Code:
sceKernelDcacheWritebackAll();
  



  InitGlobals();

  initScreenAndCtrl();



So dann wollen wir ein Cooles Intro für unseren Exploit , das schafft man mit den Funktionen "fadeIn();" und "fadeOut();" , ebenfalls kann man noch etwas im Intro aus auf dem Bildschirm ausgeben, und zwar mit der Funktion
"Print(unsigned long x,unsigned long y,unsigned long color,const char *str);"
x für die X-Achse , y für die Y-Achse, color für eure Farbe , und *str für euren Text
Man könnte dann sowas daraus machen:

Code:
fadeIn();
  fadeOut();

  Print (22,15,colours[INDEX_GREEN]," - Hello World! -");
  changeBuffer();
  sceKernelDelayThread(2*1000*1000);
  changeBuffer();

  fadeIn();
  fadeOut();



Nach dem Intro müssen wir nun in eine "for( ; ; ) { }" treten.
Unser Code sollte sich ja am besten für immer wiederholen. Dies ermöglicht eine Deklaration der for schleife mit 2 Semikolon.

Code:
for(;;)
  {
  }



Um jetzt binden wir unsere "ProcessKeys" Function in die for( ; ; ) schleife ein.

Code:
gpaddata.Buttons = 0;

sceCtrlReadBufferPositive(&gpaddata,1);

ProcessKeys(gpaddata.Buttons);


Nun kommen wir zu unserem Hello World, das wir auf dem PSP Bildschirm ausgeben werden.
Davor müssen wir allerdings den Video RAM einfärben. Da wir am Anfang unsere Farben declariert haben , ist dies nun ganz einfach - mit der Function "Fillvram(unsigned long color);".
Zuletzt können wir nun den gewünschten Text ausgeben. Mein Code würde so aussehen:

Code:
Fillvram(colours[INDEX_BLACK]);

     Print (0,0,colours[color],"Hello World Tutorial von Darxploit");
     Print (0,2,colours[INDEX_WHITE],"Juhu :) , das ist unser Hallo Welt !!!");
     Print (0,3,colours[INDEX_WHITE],"Jetzt sind wir richtige Hacker :P ");

     Print (0,5,colours[INDEX_WHITE],"Was lernen wir daraus:");
     Print (0,7,colours[INDEX_WHITE],"Exploits sind aufwendig und erfordern eine gewisse Routine !");

     Print (0,9,colours[INDEX_WHITE],"Visit: http://darxploit-dev.blogspot.com/ ");

     Print (0,25,colours[INDEX_GRAY],"Druecke o fuer einen memory dump");
     Print (0,26,colours[INDEX_GRAY],"Druecke /\\ fuer einen screenshot");
     Print (0,27,colours[INDEX_GRAY],"Druecke HOME um den Exploit zu beenden");


Jetzt nur noch den Frame-Buffer neu aufsetzen, was mit dieser Funktion gelingt - changeBuffer();
Es ist sehr wichtig, dass ihr diese Funktion am Ende der for( ; ; ) schleife benutzt, sonst werdet ihr nur einen Blackscreen bekommen.

Code:
changeBuffer();





Die Zusammenfassung unserer erstellten Main.c :

Spoiler: (anzeigen)





Wer will mehr xD ?

Wem dieses Hello World zu langweilig ist , der kann natürlich auch das Folgende nehmen.

Es wird euch sicherlich bekannt vorkommen, da es schon einige Hacker benutzt haben, unter anderem Wololo

Spoiler: (anzeigen)

--------------------------------------------------------------------------------------------------------------


Abspann:

Ok, das wars so weit von mir ! Ich hoffe es hat euch gefallen Smile

Als cooles Spezial gibts von mir noch ein SDK für eure Exploits !
Und ebenfalls das SDK von dem Sukkiri Exploit, falls ihr noch keinen eigen habt. So kann jeder testen Wink

Downloads:

Meine_SDK´s_FÜR_EUCH

Sukkiri Savegame Exploit



############################################################ ###################

-> Exploiting Savegames [TEIL 1]

-> Exploiting Savegames [TEIL 2]

Dieser Beitrag wurde zuletzt bearbeitet: 17.02.2011 15:52 von DarXPloit_$a1.

16.02.2011 21:35
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Folgende User bedanken sich:
NeverCheat (Oct-8-2014), hans2116 (Apr-16-2012), Total_freak (Jan-8-2012), kaiser7 (Feb-22-2011), m33 (Feb-20-2011), Cha0z (Feb-18-2011), eMKayWe (Feb-17-2011), greenieZ (Feb-17-2011), pspkilled (Feb-17-2011), FaNNat1c (Feb-17-2011), XiaDao (Feb-17-2011), Xeramon (Feb-17-2011), xxx_knoppix_xxx (Feb-17-2011), Namenloser (Feb-17-2011), -blue7 (Feb-16-2011), pspbricker (Feb-16-2011), HacKmaN (Feb-16-2011), Deutschland 1 (Feb-16-2011)
HacKmaN
Ex-Developer
*


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

Status: Offline
Danke erhalten: 3319
Beitrag: #2
RE: [TUT]Exploiting Savegames [TEIL 3]

Sehr schön, wie immer Smile

16.02.2011 21:48
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Folgende User bedanken sich:
Cha0z (Feb-18-2011), FaNNat1c (Feb-17-2011), XiaDao (Feb-17-2011), Xeramon (Feb-17-2011)
DarXPloit_$a1
Halbprofi
***


Beiträge: 206
Gruppe: User
Registriert seit: Oct 2010

Status: Offline
Danke erhalten: 218
Beitrag: #3
RE: [TUT]Exploiting Savegames [TEIL 3]

Ok, Ich habe jetz noch einen Index hinzugefügt Tongue
So ist es einfach von Teil A nach Teil B zu springen.

Vielleicht werde ich noch ein Video von unserem ausgeführten Code auf der PSP machen.

Dann mal bis zum nächsten Tutorial Wink

17.02.2011 15:08
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
pspkilled
Legende
*****


Beiträge: 1.630
Gruppe: User
Registriert seit: Jan 2010

Status: Offline
Danke erhalten: 351
Beitrag: #4
RE: [TUT]Exploiting Savegames [TEIL 3]

super sache aucch für anfänger glaub ich verständlich :-)

17.02.2011 15:40
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Cha0z
Banned


Beiträge: 1.501
Gruppe: Banned
Registriert seit: Oct 2010

Status: Abwesend
Danke erhalten: 436
Beitrag: #5
RE: [TUT] Exploiting Savegames [TEIL 3]

Super TUT! Sry, habe es erst jetzt gesehen :O


Alter Nick: Co$m0



GodFather = Faker!!! (anzeigen)
In Arbeit: (CFW Installer v1, Hide my ThingZ v3, 6.20 Cha0z-A, FlasH DumpeR v1) (anzeigen)
18.02.2011 20:12
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
DarXPloit_$a1
Halbprofi
***


Beiträge: 206
Gruppe: User
Registriert seit: Oct 2010

Status: Offline
Danke erhalten: 218
Beitrag: #6
xPSP  RE: [TUT]Exploiting Savegames [TEIL 3]

pspkilled :
super sache aucch für anfänger glaub ich verständlich :-)


Das ist auch mein Ziel Tongue
Einfach und verständlich !
Ich hoffe , das ich das auch einfach erklären konnte :S

20.02.2011 18:50
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Folgende User bedanken sich:
Cha0z (Feb-21-2011)
3m!n
Legende
*****


Beiträge: 1.652
Gruppe: User
Registriert seit: Aug 2010

Status: Offline
Danke erhalten: 951
Beitrag: #7
RE: [TUT] Exploiting Savegames [TEIL 3]

Sehr schön,
funzt das auch mit VLF ?

22.02.2011 03:01
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
DarXPloit_$a1
Halbprofi
***


Beiträge: 206
Gruppe: User
Registriert seit: Oct 2010

Status: Offline
Danke erhalten: 218
Beitrag: #8
xPSP  RE: [TUT] Exploiting Savegames [TEIL 3]

EmInK123 :
Sehr schön,
funzt das auch mit VLF ?


Soweit ich weiß nein, tut mir leid

22.02.2011 23:17
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Antwort schreiben  Thema schreiben 

Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
xPSP [TUT] Exploiting Savegames [TEIL 1] DarXPloit_$a1 26 13.294 21.04.2012 10:04
Letzter Beitrag: hans2116
xPSP [TUT] Exploiting Savegames [TEIL 2] DarXPloit_$a1 15 5.987 06.02.2011 22:34
Letzter Beitrag: DarXPloit_$a1

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




» zum Seitenanfang