![]() |
| Forums | Gaming News | Videos | Downloads | Today's Posts | Mark Forums Read | Chat | FAQ | Members List | Contact |
| ||||||
This is a discussion on [Released] UltraPsarDumper v1 within the PSP Development Forum forums, part of the PSP Development, Hacks, and Homebrew category; UltraPsarDumper is a simple application for Fat an Slims PSPs with custom firmware 3.9X m33. For instaling UltraPsarDumper extrack all ...
![]() |
|
|
LinkBack | Thread Tools |
|
|
#1 |
![]() UltraPsarDumper is a simple application for Fat an Slims PSPs with custom firmware 3.9X m33. For instaling UltraPsarDumper extrack all the content of the .RAR archive and copie it in the folder MsRoot in the root of yous memory stick. Using UltraPsarDumper is very simple, use the direction pad and select one of the options by pressing the X buttom. ![]() This app is brought to you by Marce_82 and The Sixth Halcon,we hope, you really enjoy it! Web-Site -> www.marce82projects.es Download ![]() Code:
Thanks: To PspPet, C+D, Dark_Alex, M33 and all past PSAR Dumper programmers. To Team M33 (and so Dark_Alex) to have released Psar Dumper source code. To HelldashX for 3.80 Psar Dumper. To Red Squirrel 3.90 compatibility and to have released RsPsar_Dumper src. To Robert Metz for 3.80/3.90 Decryption. To Blaky for 3.93 support and decryption. To PSPGen 3.95 Decryption. |
|
|
|
|
|
|
#2 |
![]() Join Date: Sep 2007
Real First Name: soul
Location: Poland
Just Played: Dead Space
Posts: 36
Trader Feedback: 0
|
ok, but what it does execpt all the stuff done by RS Psardumper?
In first look: nothing. See no point of releasing it. If someone will add option to select firmware for any file, not only eboot.pbp, or to sort all the dumped files into proper directories (for example :\DUMP\390\DECRYPTED or :\DUMP\390\SIGNCHECKED) that would be usefull feature. Making apps with new gui and no new features is pointless. |
|
|
|
|
|
#3 |
![]() ![]() Avada Kedavra
|
Great,get rspardumper code & add a useless gui = new release.Lame,very lame.
__________________
|
|
|
|
|
|
#9 |
|
Sorry, just wanted to give a touch graphic at psardumper, sorry
![]() code that has been used in the psardumper Code:
****************************************************************************************
* *
* Thanks: *
* *
* To PspPet, C+D, Dark_Alex, M33 and all past PSAR Dumper programmers. *
* To Team M33 (and so Dark_Alex) to have released Psar Dumper source code. *
* To HelldashX for 3.80 Psar Dumper. *
* To Red Squirrel 3.90 compatibility and to have released RsPsar_Dumper src. *
* To Robert Metz for 3.80/3.90 Decryption. *
* To Blaky for 3.93 support and decryption. *
* To PSPGen 3.95 decryption. *
* *
***************************************************************************************/
#include <pspsdk.h>
#include <pspkernel.h>
#include <pspdebug.h>
#include <pspctrl.h>
#include <psppower.h>
#include <pspsuspend.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdarg.h>
#include <libPsarDumper.h>
#include <pspdecrypt.h>
#include <psputility_sysparam.h>
PSP_MODULE_INFO("PsarDumper_Prx", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(0);
#define FIRM_VERSIONS 4
static u8 g_dataPSAR[20399999] __attribute__((aligned(64)));
static u8 g_dataOut[3000000] __attribute__((aligned(0x40)));
static u8 *g_dataOut2;
int uscita, ret;
char versione[64];
char firm_version[] = { '3','.','8','0','3','.','9','0','3','.','9','3','3','.','9','5' };
enum
{
MODE_ENCRYPT_SIGCHECK,
MODE_ENCRYPT,
MODE_DECRYPT,
};
int unload_loader(void)
{
SceModule *mod;
SceUID modid;
int ret = 0;
int status;
mod = sceKernelFindModuleByName("PsarDumper_Prx");
if(mod != NULL)
{
modid = mod->modid;
ret = sceKernelStopModule(modid, 0, NULL, &status, NULL);
if(ret >= 0)
{
ret = sceKernelUnloadModule(modid);
}
}
return 0;
}
int build_args(char *args, const char *execfile, int argc, char **argv)
{
int loc = 0;
int i;
strcpy(args, execfile);
loc += strlen(execfile) + 1;
for(i = 0; i < argc; i++)
{
strcpy(&args[loc], argv[i]);
printf("Arg %i => %s\n", i, argv[i]);
loc += strlen(argv[i]) + 1;
}
return loc;
}
int loadStartModule(const char *name, int argc, char **argv)
{
SceUID modid;
int status;
char args[128];
int len;
modid = sceKernelLoadModule(name, 0, NULL);
if(modid >= 0)
{
len = build_args(args, name, argc, argv);
modid = sceKernelStartModule(modid, len, (void *) args, &status, NULL);
}
return modid;
}
void salir()
{
sceKernelExitGame();
}
void texto_inicio(void)
{
pspDebugScreenClear();
pspDebugScreenSetBackColor(0x000000);
pspDebugScreenPrintf("\n\n\n\n\n\n\n\n\n\n");
pspDebugScreenSetBackColor(0xFFFFFF);
pspDebugScreenPrintf("\n");
pspDebugScreenSetBackColor(0x999999);
pspDebugScreenPrintf("\n\n\n\n\n");
pspDebugScreenPrintf(" - PLEASE WAIT -\n");
pspDebugScreenPrintf("\n\n\n");
pspDebugScreenSetBackColor(0xFFFFFF);
pspDebugScreenPrintf("\n");
pspDebugScreenSetBackColor(0x000000);
}
void crear_carpetas(void)
{
sceIoMkdir("ms0:/PsarDumper", 0777);
sceIoMkdir("ms0:/PsarDumper/Encrypt_Sigcheck", 0777);
sceIoMkdir("ms0:/PsarDumper/Encrypt_Sigcheck/Flash0", 0777);
sceIoMkdir("ms0:/PsarDumper/Encrypt_Sigcheck/Flash0/ipls", 0777);
sceIoMkdir("ms0:/PsarDumper/Encrypt_Sigcheck/Flash0/data", 0777);
sceIoMkdir("ms0:/PsarDumper/Encrypt_Sigcheck/Flash0/dic", 0777);
sceIoMkdir("ms0:/PsarDumper/Encrypt_Sigcheck/Flash0/font", 0777);
sceIoMkdir("ms0:/PsarDumper/Encrypt_Sigcheck/Flash0/kd", 0777);
sceIoMkdir("ms0:/PsarDumper/Encrypt_Sigcheck/Flash0/vsh", 0777);
sceIoMkdir("ms0:/PsarDumper/Encrypt_Sigcheck/Flash0/data/cert", 0777);
sceIoMkdir("ms0:/PsarDumper/Encrypt_Sigcheck/Flash0/kd/resource", 0777);
sceIoMkdir("ms0:/PsarDumper/Encrypt_Sigcheck/Flash0/vsh/etc", 0777);
sceIoMkdir("ms0:/PsarDumper/Encrypt_Sigcheck/Flash0/vsh/module", 0777);
sceIoMkdir("ms0:/PsarDumper/Encrypt_Sigcheck/Flash0/vsh/resource", 0777);
sceIoMkdir("ms0:/PsarDumper/Encrypt_Sigcheck/Flash1", 0777);
sceIoMkdir("ms0:/PsarDumper/Encrypt_Sigcheck/Flash1/dic", 0777);
sceIoMkdir("ms0:/PsarDumper/Encrypt_Sigcheck/Flash1/gps", 0777);
sceIoMkdir("ms0:/PsarDumper/Encrypt_Sigcheck/Flash1/net", 0777);
sceIoMkdir("ms0:/PsarDumper/Encrypt_Sigcheck/Flash1/registry", 0777);
sceIoMkdir("ms0:/PsarDumper/Encrypt_Sigcheck/Flash1/vsh", 0777);
}
int ReadFile(char *file, int seek, void *buf, int size)
{
SceUID fd = sceIoOpen(file, PSP_O_RDONLY, 0);
if (fd < 0)
return fd;
if (seek > 0)
{
if (sceIoLseek(fd, seek, PSP_SEEK_SET) != seek)
{
sceIoClose(fd);
return -1;
}
}
int read = sceIoRead(fd, buf, size);
sceIoClose(fd);
return read;
}
int WriteFile(char *file, void *buf, int size)
{
SceUID fd = sceIoOpen(file, PSP_O_WRONLY | PSP_O_CREAT | PSP_O_TRUNC, 0777);
if (fd < 0)
{
return fd;
}
int written = sceIoWrite(fd, buf, size);
sceIoClose(fd);
return written;
}
static char com_table[0x4000];
static int comtable_size;
static char _1g_table[0x4000];
static int _1gtable_size;
static char _2g_table[0x4000];
static int _2gtable_size;
static int FindTablePath(char *table, int table_size, char *number, char *szOut)
{
int i, j, k;
for (i = 0; i < table_size-5; i++)
{
if (strncmp(number, table+i, 5) == 0)
{
for (j = 0, k = 0; ; j++, k++)
{
if (table[i+j+6] < 0x20)
{
szOut[k] = 0;
break;
}
if (!strncmp(table+i+6, "flash", 5) &&
j == 6)
{
szOut[6] = ':';
szOut[7] = '/';
k++;
}
else if (!strncmp(table+i+6, "ipl", 3) &&
j == 3)
{
szOut[3] = ':';
szOut[4] = '/';
k++;
}
else
{
szOut[k] = table[i+j+6];
}
}
return 1;
}
}
return 0;
}
static int FindReboot(u8 *input, u8 *output, int size)
{
int i;
for (i = 0; i < (size - 0x30); i++)
{
if (memcmp(input+i, "~PSP", 4) == 0)
{
size = *(u32 *)&input[i+0x2C];
memcpy(output, input+i, size);
return size;
}
}
return -1;
}
static void ExtractReboot(int mode, char *loadexec, char *reboot, char *rebootname)
{
int s = ReadFile(loadexec, 0, g_dataOut, sizeof(g_dataOut));
if (s <= 0) return;
if (mode != MODE_DECRYPT)
{
if (mode == MODE_ENCRYPT_SIGCHECK)
{
memcpy(g_dataOut2, g_dataOut, s);
pspSignCheck(g_dataOut2);
if (WriteFile(loadexec, g_dataOut2, s) != s)
{
salir(loadexec);
}
}
s = pspDecryptPRX(g_dataOut, g_dataOut2, s);
if (s <= 0)
{
salir(loadexec);
}
s = pspDecompress(g_dataOut2, g_dataOut, sizeof(g_dataOut));
if (s <= 0)
{
salir(loadexec);
}
}
s = FindReboot(g_dataOut, g_dataOut2, s);
if (s <= 0)
{
salir(rebootname);
}
s = pspDecryptPRX(g_dataOut2, g_dataOut, s);
if (s <= 0)
{
salir(rebootname);
}
s = pspDecompress(g_dataOut, g_dataOut2, sizeof(g_dataOut));
if (s <= 0)
{
salir(rebootname);
}
if (WriteFile(reboot, g_dataOut2, s) != s)
{
salir(reboot);
}
}
static char *GetVersion(char *buf)
{
char *p = strrchr(buf, ',');
if (!p) return NULL;
return p+1;
}
int main(void)
{
unload_loader();
int mode=0, s;
uscita = 0;
u8 pbp_header[0x28];
pspDebugScreenInit();
int firm = 0;
if (sceKernelDevkitVersion() < 0x02070110)
{
salir();
}
SceUID mod = pspSdkLoadStartModule("libpsardumper.prx", PSP_MEMORY_PARTITION_KERNEL);
if (mod < 0)
{
salir(mod);
}
mod = pspSdkLoadStartModule("pspdecrypt.prx", PSP_MEMORY_PARTITION_KERNEL);
if (mod < 0)
{
salir(mod);
}
ret = pspDecryptCode_Start();
if(sceKernelDevkitVersion() >= 0x03080010)
{
if(ret == 2); else if(ret == 1); else if(!ret); else;
}
mode = MODE_ENCRYPT_SIGCHECK; // change mode
if (uscita==1)
{
salir();
}
sceKernelVolatileMemLock(0, (void *)&g_dataOut2, &s);
texto_inicio();
if (ReadFile("ms0:/EBOOT.PBP", 0, pbp_header, sizeof(pbp_header)) != sizeof(pbp_header))
{
salir();
}
int cbFile;
cbFile = ReadFile("ms0:/EBOOT.PBP", *(u32 *)&pbp_header[0x24], g_dataPSAR, sizeof(g_dataPSAR));
if (cbFile <= 0)
{
salir();
}
else if (cbFile == sizeof(g_dataPSAR))
{
salir();
}
if (memcmp(g_dataPSAR, "PSAR", 4) != 0)
{
salir();
}
if (pspPSARInit(g_dataPSAR, g_dataOut, g_dataOut2) < 0)
{
salir();
}
crear_carpetas();
sceKernelDelayThread(50000);
int i;
for(i = 0; i < FIRM_VERSIONS;i++)
{
if(memcmp(&firm_version[i*4],GetVersion((char *)g_dataOut+0x10),4) == 0)
{
firm = 1;
break;
}
}
while (1)
{
char name[128];
int cbExpanded;
int pos;
int signcheck;
int res = pspPSARGetNextFile(g_dataPSAR, cbFile, g_dataOut, g_dataOut2, name, &cbExpanded, &pos, &signcheck);
if (res < 0)
{
salir(pos);
}
else if (res == 0)
{
break;
}
if (!strncmp(name, "com:", 4) && comtable_size > 0)
{
if (!FindTablePath(com_table, comtable_size, name+4, name))
{
salir(name);
}
}
else if (!strncmp(name, "01g:", 4) && _1gtable_size > 0)
{
if (!FindTablePath(_1g_table, _1gtable_size, name+4, name))
{
salir(name);
}
}
else if (!strncmp(name, "02g:", 4) && _2gtable_size > 0)
{
if (!FindTablePath(_2g_table, _2gtable_size, name+4, name))
{
salir(name);
}
}
pspDebugScreenClear();
pspDebugScreenSetBackColor(0x000000);
pspDebugScreenPrintf("\n\n\n\n\n\n\n\n\n\n");
pspDebugScreenSetBackColor(0xFFFFFF);
pspDebugScreenPrintf("\n");
pspDebugScreenSetBackColor(0x999999);
pspDebugScreenPrintf("\n\n\n\n\n");
pspDebugScreenPrintf(" Extracting >>> %s\n", name);
pspDebugScreenPrintf("\n\n\n");
pspDebugScreenSetBackColor(0xFFFFFF);
pspDebugScreenPrintf("\n");
pspDebugScreenSetBackColor(0x000000);
char* szFileBase = strrchr(name, '/');
if (szFileBase != NULL) szFileBase++;
else szFileBase = "err.err";
if (cbExpanded > 0)
{
char szDataPath[128];
if (!strncmp(name, "flash0:/", 8))
{
sprintf(szDataPath, "ms0:/PsarDumper/Encrypt_Sigcheck/Flash0/%s", name+8);
}
else if (!strncmp(name, "flash1:/", 8))
{
sprintf(szDataPath, "ms0:/PsarDumper/Encrypt_Sigcheck/Flash1/%s", name+8);
}
else if (!strcmp(name, "com:00000"))
{
comtable_size = pspDecryptTable(g_dataOut2, g_dataOut, cbExpanded,firm);
if (comtable_size <= 0)
{
salir();
}
if (comtable_size > sizeof(com_table))
{
salir();
}
memcpy(com_table, g_dataOut2, comtable_size);
strcpy(szDataPath, "ms0:/PsarDumper/Encrypt_Sigcheck/Flash0/ipls/common_files_table.bin");
}
else if (!strcmp(name, "01g:00000"))
{
_1gtable_size = pspDecryptTable(g_dataOut2, g_dataOut, cbExpanded,firm);
if (_1gtable_size <= 0)
{
salir();
}
if (_1gtable_size > sizeof(_1g_table))
{
salir();
}
memcpy(_1g_table, g_dataOut2, _1gtable_size);
strcpy(szDataPath, "ms0:/PsarDumper/Encrypt_Sigcheck/Flash0/ipls/fat_files_table.bin");
}
else if (!strcmp(name, "02g:00000"))
{
_2gtable_size = pspDecryptTable(g_dataOut2, g_dataOut, cbExpanded,firm);
if (_2gtable_size <= 0)
{
salir(_2gtable_size);
}
if (_2gtable_size > sizeof(_2g_table))
{
salir();
}
memcpy(_2g_table, g_dataOut2, _2gtable_size);
strcpy(szDataPath, "ms0:/PsarDumper/Encrypt_Sigcheck/Flash0/ipls/slim_files_table.bin");
}
else
{
sprintf(szDataPath, "ms0:/PsarDumper/Encrypt_Sigcheck/Flash0/ipls/%s", strrchr(name, '/') + 1);
}
if (signcheck && mode == MODE_ENCRYPT_SIGCHECK && (strcmp(name, "flash0:/kd/loadexec.prx") != 0)&& (strcmp(name, "flash0:/kd/loadexec_02g.prx") != 0))
{
pspSignCheck(g_dataOut2);
}
if ((mode != MODE_DECRYPT) || (memcmp(g_dataOut2, "~PSP", 4) != 0))
{
if (strstr(szDataPath, "ipl") && strstr(szDataPath, "2000"))
{
cbExpanded = pspDecryptPRX(g_dataOut2, g_dataOut, cbExpanded);
if (cbExpanded <= 0)
{
}
else
{
memcpy(g_dataOut2, g_dataOut, cbExpanded);
}
}
if (WriteFile(szDataPath, g_dataOut2, cbExpanded) != cbExpanded)
{
salir(szDataPath);
break;
}
}
if ((memcmp(g_dataOut2, "~PSP", 4) == 0) && (mode == MODE_DECRYPT))
{
int cbDecrypted = pspDecryptPRX(g_dataOut2, g_dataOut, cbExpanded);
if (cbDecrypted > 0)
{
u8* pbToSave = g_dataOut;
int cbToSave = cbDecrypted;
if ((g_dataOut[0] == 0x1F && g_dataOut[1] == 0x8B) ||
memcmp(g_dataOut, "2RLZ", 4) == 0 || memcmp(g_dataOut, "KL4E", 4) == 0)
{
int cbExp = pspDecompress(g_dataOut, g_dataOut2, sizeof(g_dataOut));
if (cbExp > 0)
{
pbToSave = g_dataOut2;
cbToSave = cbExp;
}
}
if (WriteFile(szDataPath, pbToSave, cbToSave) != cbToSave)
{
salir(szDataPath);
}
}
else
{
salir();
}
}
else if (strncmp(name, "ipl:", 4) == 0)
{
sprintf(szDataPath, "ms0:/PsarDumper/Encrypt_Sigcheck/Flash0/ipls/part1_%s", szFileBase);
int cb1 = pspDecryptIPL1(g_dataOut2, g_dataOut, cbExpanded);
if (cb1 > 0 && (WriteFile(szDataPath, g_dataOut, cb1) == cb1))
{
int cb2 = pspLinearizeIPL2(g_dataOut, g_dataOut2, cb1);
sprintf(szDataPath, "ms0:/PsarDumper/Encrypt_Sigcheck/Flash0/ipls/part2_%s", szFileBase);
WriteFile(szDataPath, g_dataOut2, cb2);
int cb3 = pspDecryptIPL3(g_dataOut2, g_dataOut, cb2);
sprintf(szDataPath, "ms0:/PsarDumper/Encrypt_Sigcheck/Flash0/ipls/part3_%s", szFileBase);
WriteFile(szDataPath, g_dataOut, cb3);
}
}
}
else if (cbExpanded == 0)
{
}
scePowerTick(0);
}
ExtractReboot(mode, "ms0:/PsarDumper/Encrypt_Sigcheck/Flash0/kd/loadexec.prx", "ms0:/PsarDumper/Encrypt_Sigcheck/Flash0/reboot.bin", "reboot.bin");
ExtractReboot(mode, "ms0:/PsarDumper/Encrypt_Sigcheck/Flash0/kd/loadexec_02g.prx", "ms0:/PsarDumper/Encrypt_Sigcheck/Flash0/reboot_02g.bin", "reboot_02g.bin");
scePowerTick(0);
salir();
return 0;
}
int module_stop()
{
return 0;
}
the PRX libpsardumper and pspdecrytp, are the same as the psardumper. eboot the code is a simple graphical menu, does not contain functions of psardumper, only the burden of PRX. sorry, just wanted to help.
Last edited by _Hellin_; 06-06-2008 at 01:53 PM.. |
|
|
|
|
|
|
#11 |
|
Sorry if anyone got angry with me or with the app... The purpose of this app is to have a nice look of PSAR dumper...
RS: Sorry, I forgot to do that, here, on the top of this msg is the source code. About the name of the app... I called it "ultrapsardumper" because it is with gfx menu, but it is indiferent for me, if you want I can change it to ultrarspsardumer, or give me a name to put in
|
|
|
|
|
|
|
#12 |
![]() |
I wasn't so what angry
lol i thought what you did was take his source and just added gfx to the program. But it is using psppet's psardumper so i don't think you'll have to rename the application lol.Also i was a bit angry because i thought you used his source and it is licensed thats why i asked for source ![]() MiKeY188... |
|
|
|
![]() |
| Tags |
| released , ultrapsardumper |
| Thread Tools | |
|
|