diff --git a/Changelog.txt b/Changelog.txt index 42dd260..479b281 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,7 +1,9 @@ TO DO : Add : MultiContent PKGDIR/PS3_GMXX/PK3_EXTRA/INSDIR +Add : Decrypt EDAT/SDAT v1.40 +Fix : Dock buttons when the window is docked to the left. Fix : IRD build of backups with PKGDIR. Fix : Shortcut pkg. Add : Scans sub-folders to find backups. diff --git a/MGZ/source/extern.h b/MGZ/source/extern.h index 4c893c5..0502cc4 100644 --- a/MGZ/source/extern.h +++ b/MGZ/source/extern.h @@ -28,3 +28,7 @@ extern void Delete(char* path); extern void print_head(char *format2, ...); extern void print_load(char *format, ...); extern u8 DEBUG; +extern void task_Init(const u64 max); +extern void task_Update(u64 val); +extern void task_Update2(u64 val); +extern void task_End(); diff --git a/MGZ/source/fw_unk.c b/MGZ/source/fw_unk.c index 3edd67b..369cf4e 100644 --- a/MGZ/source/fw_unk.c +++ b/MGZ/source/fw_unk.c @@ -48,6 +48,7 @@ extern u64 lv1peek(u64 addr); extern int64_t prog_bar1_value; extern char ManaGunZ_id[10]; extern u8 SetFilePerms(char *path); +extern void Delete(char* path); u8 compare(u8 ignore, char *mem, char *flag, u32 size) { @@ -244,6 +245,8 @@ u8 read_fw_unk() return SUCCESS; } + Delete(fw_unk_path); + init_values(); return FAILED; } diff --git a/MGZ/source/main.c b/MGZ/source/main.c index c9b2153..2ce74eb 100644 --- a/MGZ/source/main.c +++ b/MGZ/source/main.c @@ -9955,6 +9955,16 @@ void task_Update(u64 val) task_ProgressBar2_val+= val; } +void task_Update2(u64 val) +{ + if( task_ProgressBar2_max != 0 ) { + task_ProgressBar1_val += val - task_ProgressBar2_val; + task_ProgressBar2_val = val; + } else { + task_ProgressBar1_val = val; + } +} + void task_End() { if(task_ProgressBar2_max != 0) { @@ -27525,21 +27535,21 @@ void Option(char *item) } else if(strcmp(item, "Test") == 0) { start_loading(); - char *edat = "/dev_hdd0/game/NPEB02082/USRDIR/data/data000.edat"; - char *dat = "/dev_hdd0/game/NPEB02082/USRDIR/data/data000.dat"; - char *eboot_elf = "/dev_hdd0/game/NPEB02082/USRDIR/EBOOT.ELF"; - char *eboot_bin = "/dev_hdd0/game/NPEB02082/USRDIR/EBOOT.BIN"; - char *rap = "/dev_hdd0/home/00000001/exdata/EP0002-NPEB02082_00-LEGENDOFKORRAPS3.rap"; + char *edat = "/dev_hdd0/data000.edat"; + char *dat = "/dev_hdd0/data000.dat"; + char *eboot_elf = "/dev_hdd0/EBOOT.elf"; + char *eboot_bin = "/dev_hdd0/EBOOT.BIN"; + char *rap = "/dev_hdd0/EP0002-NPEB02082_00-LEGENDOFKORRAPS3.rap"; char *dev_klics_txt = "/dev_hdd0/game/MANAGUNZ0/USRDIR/sys/dev_klics.txt"; u8 dev_klicensee[0x10]={0}; - + print_load("Search dev_klicensee inside local db"); if( npdata_bruteforce(edat, dev_klics_txt, NPDATA_BF_MODE_LINES_STREAM, dev_klicensee) == SUCCESS) { print_load("Found !"); hex_print_load((char *)dev_klicensee, 0x10); } else - if( npdata_bruteforce(edat, eboot_elf, NPDATA_BF_MODE_BINARY | NPDATA_BF_MODE_TEXT | NPDATA_BF_MODE_UNICODE, dev_klicensee) == SUCCESS) { + if( npdata_bruteforce(edat, eboot_elf, NPDATA_BF_MODE_BINARY, dev_klicensee) == SUCCESS) { print_load("Found !"); hex_print_load((char *)dev_klicensee, 0x10); } else { @@ -28334,7 +28344,7 @@ void Open_option() add_option_item(STR_DUMP_FLASH); */ - add_option_item("Test"); + //add_option_item("Test"); //add_option_item("Test2"); if( !cobra && !mamba && PEEKnPOKE) { @@ -28825,14 +28835,13 @@ u8 window_input() return CONTINUE; } - //DOCK_LEFT CONTROLBOX_X -= CONTROLBOX_GAP + CONTROLBOX_W; mouse_over = NO; if( CONTROLBOX_X < curs_x && curs_x < CONTROLBOX_X + CONTROLBOX_W && CONTROLBOX_Y < curs_y && curs_y < CONTROLBOX_Y + CONTROLBOX_H ) { - if(GetWindowLocation() != WINDOW_LOC_MAX) { + if(GetWindowLocation() != WINDOW_LOC_LEFT) { SetWindowLocation(WINDOW_LOC_LEFT); } else { SetWindowLocation(WINDOW_LOC_DEFAULT); @@ -41702,6 +41711,9 @@ int main(void) if(PEEKnPOKE) { if(init_fw() == FAILED) { + if( HEN ) { + PEEKnPOKE=NO; + } else if( init_fw_unk() == FAILED ) { PEEKnPOKE = NO; } diff --git a/MGZ/source/npdata_make.c b/MGZ/source/npdata_make.c index 604439a..da67f47 100644 --- a/MGZ/source/npdata_make.c +++ b/MGZ/source/npdata_make.c @@ -2,6 +2,7 @@ // Licensed under the terms of the GNU GPL, version 3 // http://www.gnu.org/licenses/gpl-3.0.txt +#include "mgz_io.h" #include "npdata_make.h" #include "extern.h" @@ -1510,25 +1511,25 @@ bool pack_data(FILE *input, FILE *output, const char* input_file_name, unsigned return 0; } - -u8 npdata_bruteforce(char *npdata_file, char *source_file, u8 mode, u8 *dev_klicensee) +// too slow ! +u8 npdata_bruteforce_old(char *npdata_file, char *source_file, u8 mode, u8 *dev_klicensee) { FILE* input = NULL; FILE* source = NULL; - + u8 found = NO; input = fopen(npdata_file, "rb"); if (input == NULL) { - printf("Error: Please check your input file!\n"); + printf("Error: Please check your input file : %s", npdata_file); goto end; } source = fopen(source_file, "rb"); if (source == NULL) { - printf("Error: Please check your source file!\n"); + printf("Error: Please check your source file : %s", source_file); goto end; } @@ -1583,14 +1584,17 @@ u8 npdata_bruteforce(char *npdata_file, char *source_file, u8 mode, u8 *dev_klic // Read the NPD header dev_hash. fread(test_dev_hash, 0x10, 1, input); + task_Init(source_file_size); printf("Brute-forcing dev_klicensee, source %s", source_file); - int i; + u64 i; for (i = 0; i < source_file_size; i++) { + task_Update2(i); + // Binary if( (mode & NPDATA_BF_MODE_BINARY) || (mode & NPDATA_BF_MODE_BINARY_STREAM)) { - if( !(mode & NPDATA_BF_MODE_BINARY_STREAM) ) fseek(source, i, SEEK_SET); + if( mode & NPDATA_BF_MODE_BINARY ) fseek(source, i, SEEK_SET); memset(dev_klicensee, 0, 0x10); fread(dev_klicensee, 0x10, 1, source); @@ -1612,7 +1616,7 @@ u8 npdata_bruteforce(char *npdata_file, char *source_file, u8 mode, u8 *dev_klic // Text if( (mode & NPDATA_BF_MODE_TEXT) || (mode & NPDATA_BF_MODE_TEXT_STREAM) || (mode & NPDATA_BF_MODE_LINES_STREAM)) { - if( !(mode & NPDATA_BF_MODE_TEXT_STREAM) || !(mode & NPDATA_BF_MODE_LINES_STREAM)) fseek(source, i, SEEK_SET); + if( mode & NPDATA_BF_MODE_TEXT) fseek(source, i, SEEK_SET); memset(test_klicensee_text, 0, 0x20); if(mode & NPDATA_BF_MODE_LINES_STREAM) { @@ -1645,7 +1649,7 @@ u8 npdata_bruteforce(char *npdata_file, char *source_file, u8 mode, u8 *dev_klic // Unicode mode if( (mode & NPDATA_BF_MODE_UNICODE) || (mode & NPDATA_BF_MODE_UNICODE_STREAM)) { - if(!(mode & NPDATA_BF_MODE_UNICODE_STREAM)) fseek(source, i, SEEK_SET); + if(mode & NPDATA_BF_MODE_UNICODE) fseek(source, i, SEEK_SET); memset(test_klicensee_unicode_text, 0, 0x40); fread(test_klicensee_unicode_text, 0x40, 1, source); @@ -1676,7 +1680,237 @@ u8 npdata_bruteforce(char *npdata_file, char *source_file, u8 mode, u8 *dev_klic } end: + task_End(); + + if(found) { + printf("Found valid dev_klicensee!"); + } else { + printf("Failed to brute-force dev_klicensee!"); + memset(dev_klicensee, 0, 0x10); + } + + // Cleanup. + FCLOSE(input); + FCLOSE(source); + + return found; +} + +void read_double_mem(char *data, u64 size, u8 **buffer, s64 *buffer_s, u64 buffer_o, u8 swap) +{ + memset(data, 0, size); + if( buffer_s[swap] < buffer_o ) return; + + if( buffer_o + size <= buffer_s[swap]){ + memcpy(data, buffer[swap], size); + } else + if( buffer_s[swap] < buffer_o + size && buffer_o + size - buffer_s[swap] <= buffer_s[!swap]) { + memcpy(data, buffer[swap], buffer_s[swap] - buffer_o); + memcpy(data + buffer_s[swap] - buffer_o, buffer[!swap], buffer_o + size - buffer_s[swap]); + } +} + +u8 is_empty(char *data, u32 size) +{ + u32 i; + for(i=0; i