PS3 Edit "The Legend of Korra"'s EBOOT for ISO version

Yes, thanks, that would be nice.
--------------------------------
I opened the EBOOT.ELF of CS:GO... It seems that that game just is not supposed to be rebuilt into nothing but HDD game type.
Code:
undefined8 FUN_00012538(longlong param_1,ulonglong param_2)

{
  undefined8 uVar1;
  undefined8 uVar2;
  int iVar3;
  char *pcVar4;
  char *__s1;
  char *__s;
  undefined *puVar5;
  undefined4 local_520;
  undefined4 local_51c;
  undefined4 local_518;
  undefined4 local_514;
  undefined4 local_510;
  undefined4 local_50c;
  undefined auStack1288 [32];
  undefined auStack1256 [1064];
  undefined local_c0;
  undefined auStack191 [31];
  undefined8 local_a0;
 
  if (*(char *)(param_1 + 0xc70) != '\0') {
    FUN_000124c0("CPs3ContentPathInfo is being initialized twice!\n");
  }
  uVar1 = cellSysmoduleLoadModule(0x16);
  if ((int)uVar1 == 0) {
    local_a0 = cellSysmoduleIsLoaded(0x3e);
    if ((int)local_a0 == 0) {
      FUN_000124c0(
                  "The SYSUTIL_GAME module is already loaded -- revist load order logic in CPs3ContentPathInfo::Init()\n"
                  );
    }
    else {
      uVar1 = cellSysmoduleLoadModule(0x3e);
      if ((int)uVar1 != 0) {
        uVar2 = FUN_00012398(uVar1,0xa0000);
        FUN_000124c0("Failed to load sysutil_game: %s\n",uVar2);
        return uVar1;
      }
    }
    local_520 = 0;
    local_51c = 0;
    local_518 = 0;
    local_c0 = 0;
    sys_libc_0xA7E9EA47(auStack191,0,0x1f);
    uVar1 = cellGameBootCheck(param_1 + 0xc64,param_1 + 0xc68,&local_520,&local_c0);
    if ((int)uVar1 == 0) {
      *(undefined *)(param_1 + 0xc70) = 1;
      *(undefined4 *)(param_1 + 0xc6c) = local_520;
      __s1 = (char *)(param_1 + 0x1a4);
      pcVar4 = (char *)(param_1 + 0xa4);
      if ((param_2 & 1) == 0) {
        uVar1 = cellGameGetParamString(0,param_1,0x80);
        if ((int)uVar1 < 0) {
          uVar2 = FUN_00012398(uVar1);
          FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_TITLE )",uVar2);
          return uVar1;
        }
        uVar1 = cellGameGetParamString(100,param_1 + 0x80,10);
        if ((int)uVar1 < 0) {
          uVar2 = FUN_00012398(uVar1);
          FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_TITLE_ID )",uVar2);
          return uVar1;
        }
        uVar1 = cellGameGetParamString(0x6a,param_1 + 0x8a,6);
        if ((int)uVar1 < 0) {
          uVar2 = FUN_00012398(uVar1);
          FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_APP_VER )",uVar2);
          return uVar1;
        }
        uVar1 = cellGameGetParamInt(0x66,param_1 + 0x98);
        if ((int)uVar1 < 0) {
          uVar2 = FUN_00012398(uVar1);
          FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_PARENTAL_LEVEL )",uVar2);
          return uVar1;
        }
        uVar1 = cellGameGetParamInt(0x67,param_1 + 0x9c);
        if ((int)uVar1 < 0) {
          uVar2 = FUN_00012398(uVar1);
          FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_RESOLUTION )",uVar2);
          return uVar1;
        }
        uVar1 = cellGameGetParamInt(0x68,param_1 + 0xa0);
        if ((int)uVar1 < 0) {
          uVar2 = FUN_00012398(uVar1);
          FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_SOUND_FORMAT )",uVar2);
          return uVar1;
        }
        uVar1 = cellGameContentPermit(pcVar4,__s1);
        if (((*(uint *)(param_1 + 0xc68) & 4) != 0) &&
           (iVar3 = strncmp(__s1,"/app_home",9), iVar3 == 0)) {
          snprintf(pcVar4,0x7f,"/app_home/PS3_GAME");
          snprintf(__s1,0x7f,"/app_home/PS3_GAME/USRDIR");
        }
      }
      else {
        if (*(int *)(param_1 + 0xc64) != 2) {
          FUN_000124c0("Unsupported boot in RETAIL mode! (bootmode=%d)\n",*(int *)(param_1 + 0xc64))
          ;
          return 0xffffffffffffffff;
        }
        uVar1 = cellGameGetParamString(0,param_1,0x80);
        if ((int)uVar1 < 0) {
          uVar2 = FUN_00012398(uVar1);
          FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_TITLE )",uVar2);
          return uVar1;
        }
        uVar1 = cellGameGetParamString(100,param_1 + 0x80,10);
        if ((int)uVar1 < 0) {
          uVar2 = FUN_00012398(uVar1);
          FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_TITLE_ID )",uVar2);
          return uVar1;
        }
        uVar1 = cellGameGetParamString(0x6a,param_1 + 0x8a,6);
        if ((int)uVar1 < 0) {
          uVar2 = FUN_00012398(uVar1);
          FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_APP_VER )",uVar2);
          return uVar1;
        }
        uVar1 = cellGameGetParamInt(0x66,param_1 + 0x98);
        if ((int)uVar1 < 0) {
          uVar2 = FUN_00012398(uVar1);
          FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_PARENTAL_LEVEL )",uVar2);
          return uVar1;
        }
        uVar1 = cellGameGetParamInt(0x67,param_1 + 0x9c);
        if ((int)uVar1 < 0) {
          uVar2 = FUN_00012398(uVar1);
          FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_RESOLUTION )",uVar2);
          return uVar1;
        }
        uVar1 = cellGameGetParamInt(0x68,param_1 + 0xa0);
        if ((int)uVar1 < 0) {
          uVar2 = FUN_00012398(uVar1);
          FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_SOUND_FORMAT )",uVar2);
          return uVar1;
        }
        uVar1 = cellGameContentPermit(pcVar4,__s1);
        if ((int)uVar1 != 0) {
          uVar2 = FUN_00012398(uVar1,0xa0000);
          FUN_000124c0("cellGameContentPermit failed (line %d, code %d): %s\n",0xe0,uVar1,uVar2);
          return uVar1;
        }
        iVar3 = *(int *)(param_1 + 0xc64);
        if (iVar3 != 2) {
          puVar5 = (undefined *)0x0;
          if (iVar3 == 2) {
            puVar5 = &local_c0;
          }
          uVar1 = cellGameDataCheck(iVar3,puVar5,&local_520);
          if ((int)uVar1 != 0) {
            uVar2 = FUN_00012398(uVar1,0xa0000);
            FUN_000124c0("cellGameDataCheck failed (line %d, code %d): %s\n",0xfb,uVar1,uVar2);
            return uVar1;
          }
          uVar1 = cellGameGetParamString(0,param_1,0x80);
          if ((int)uVar1 < 0) {
            uVar2 = FUN_00012398(uVar1);
            FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_TITLE )",uVar2);
            return uVar1;
          }
          uVar1 = cellGameGetParamString(100,param_1 + 0x80,10);
          if ((int)uVar1 < 0) {
            uVar2 = FUN_00012398(uVar1);
            FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_TITLE_ID )",uVar2);
            return uVar1;
          }
          uVar1 = cellGameGetParamString(0x6a,param_1 + 0x8a,6);
          if ((int)uVar1 < 0) {
            uVar2 = FUN_00012398(uVar1);
            FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_APP_VER )",uVar2);
            return uVar1;
          }
          uVar1 = cellGameGetParamInt(0x66,param_1 + 0x98);
          if ((int)uVar1 < 0) {
            uVar2 = FUN_00012398(uVar1);
            FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_PARENTAL_LEVEL )",uVar2);
            return uVar1;
          }
          uVar1 = cellGameGetParamInt(0x67,param_1 + 0x9c);
          if ((int)uVar1 < 0) {
            uVar2 = FUN_00012398(uVar1);
            FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_RESOLUTION )",uVar2);
            return uVar1;
          }
          uVar1 = cellGameGetParamInt(0x68,param_1 + 0xa0);
          if ((int)uVar1 < 0) {
            uVar2 = FUN_00012398(uVar1);
            FUN_000124c0("%s: %s\n","PARAM.SFO getParam( CELL_GAME_PARAMID_SOUND_FORMAT )",uVar2);
            return uVar1;
          }
          uVar1 = cellGameContentPermit(pcVar4,__s1);
        }
      }
      if ((*(uint *)(param_1 + 0xc68) & 1) != 0) {
        local_514 = 0;
        local_510 = 0;
        local_50c = 0;
        uVar1 = cellGamePatchCheck(&local_514,0);
        if ((int)uVar1 != 0) {
          uVar2 = FUN_00012398(uVar1,0xa0000);
          FUN_000124c0("cellGamePatchCheck failed (line %d, code %d): %s\n",0x113,uVar1,uVar2);
          return uVar1;
        }
        uVar1 = cellGameGetParamString(0x6a,param_1 + 0x90,6);
        if ((int)uVar1 < 0) {
          uVar2 = FUN_00012398(uVar1,0xa0000);
          FUN_000124c0("%s: %s\n","PARAM.SFO PATCH getParam( CELL_GAME_PARAMID_APP_VER )",uVar2);
          return uVar1;
        }
        uVar1 = cellGameContentPermit(param_1 + 0x124,param_1 + 0x224);
      }
      __s = (char *)(param_1 + 0x324);
      pcVar4 = __s1;
      if (*(int *)(param_1 + 0xc64) != 2) {
        pcVar4 = "/hddpath/invalid";
      }
      snprintf(__s,0x80,pcVar4);
      if (-1 < (int)uVar1) {
        sys_libc_0xA7E9EA47(auStack1288,0,0x444);
        memcpy(auStack1288,"NPUB30589",10);
        uVar1 = cellSysCacheMount(auStack1288);
        if ((-1 < (int)uVar1) &&
           (memcpy((void *)(param_1 + 0x424),auStack1256,0x41f), (param_2 & 0x80) != 0)) {
          cellSysCacheClear();
        }
      }
      pcVar4 = (char *)(param_1 + 0x3a4);
      snprintf(pcVar4,0x80,__s1);
      if ((param_2 & 8) == 0) {
        if ((param_2 & 4) == 0) {
          if ((param_2 & 2) != 0) {
            snprintf(pcVar4,0x80,"/dev_bdvd/PS3_GAME/USRDIR");
          }
        }
        else {
          snprintf(pcVar4,0x80,__s);
        }
      }
      else {
        snprintf(pcVar4,0x80,"/app_home/PS3_GAME/USRDIR");
      }
      pcVar4 = (char *)(param_1 + 0x2a4);
      snprintf(pcVar4,0x80,"%s/bin",__s1);
      if ((param_2 & 0x40) == 0) {
        if ((param_2 & 0x20) == 0) {
          if ((param_2 & 0x10) != 0) {
            snprintf(pcVar4,0x80,"/dev_bdvd/PS3_GAME/USRDIR/bin");
          }
        }
        else {
          snprintf(pcVar4,0x80,"%s/bin",__s);
        }
      }
      else {
        snprintf(pcVar4,0x80,"/app_home/PS3_GAME/USRDIR/bin");
      }
      sys_libc_0xBDA4DCF0((char *)(param_1 + 0x843),param_1 + 0x424,0x41f);
      strncat((char *)(param_1 + 0x843),"/tempsave/",0x41f);
      if ((int)local_a0 != 0) {
        cellSysmoduleUnloadModule(0x3e);
      }
    }
    else {
      uVar2 = FUN_00012398(uVar1,0xa0000);
      FUN_000124c0("cellGameBootCheck failed (line %d, code %d): %s\n",0x8b,uVar1,uVar2);
    }
  }
  else {
    uVar2 = FUN_00012398(uVar1,0xa0000);
    FUN_000124c0("Failed to load sysutil_np: %s\n",uVar2);
  }
  return uVar1;
}
Those lines:
if (*(int *)(param_1 + 0xc64) != 2) {
FUN_000124c0("Unsupported boot in RETAIL mode! (bootmode=%d)\n",*(int *)(param_1 + 0xc64))
- if they are here then I think the developers thought out the game rebuilt as to deprecate that. I tried to change !=2 to !=1, that case the system is trying to search for the non-existing files... So, looks like this game is doomed to exist in it's HDD type only :/
I am starting to think that the case with the Korra's EBOOT is just a single one...
--------------------------------------
Juast was wondering and had a free moment - tried to rebuild "InFamous: Festival of Blood" NPEA00322 into iso. There is no need in it's EBOOT edit, it simply rebuilds. It even functionals like a standalone BD game (without the needence in the original pkg's data presence in /dev_hdd0/, it is independable). Tested either in emulator and on my console device, passing to the moment after the videos when I could control a character. So, jcorrea, If you were trusting the rebuild proccess to some third program like psnliberator, it's time to have a doubt in it)
I Never used psnliberator. InFamous: Festival of Blood, if not edited eboot.bin (only param.sfo), will create data on TITLE_ID_INSTALL (at least the NPUA80657 creates data inside dev_hdd0/game/NPUA80657_INSTALL, with 1GB of data inside).
 
Last edited:
psn liberator does have a klicense database just like ps3 tools, but from what I remember, it's based on title id, so it may not have the game name next to it making it easily searchable. I don't use psn liberator either though, since I'm only using the internal hdd (no external drives connected as I only have about 50 games).
 
jcorrea, so you'd like to not install the game data which is installing at the game first launch. I think it is a bad idea, there are such folders named as "cache" and "temp", so it might be while passing through the game there will be a files appearing/disappearing. If you'll change the path to those folders to /dev_bdvd then those folders will be obviously write protected. Or if only you know the other folder which purpose is for a temporarily files containing, but that's an unworth task if you'd ask me.
NPEA00322_INSTALL folder size is a bit more than 1Gb, that's not a too much. Anyway, then you done with playing that game, you can always remove the data in XMB PS3 game data section. If you will decide to play that game again, when you launch it it installs it's data again. Your game progress will not be corrupted. My opinion)
 
I think the purpose of dev_hdd1 is for game cache only, maybe you can use it instead of usrdir.
 
jcorrea, so you'd like to not install the game data which is installing at the game first launch. I think it is a bad idea, there are such folders named as "cache" and "temp", so it might be while passing through the game there will be a files appearing/disappearing. If you'll change the path to those folders to /dev_bdvd then those folders will be obviously write protected. Or if only you know the other folder which purpose is for a temporarily files containing, but that's an unworth task if you'd ask me.
NPEA00322_INSTALL folder size is a bit more than 1Gb, that's not a too much. Anyway, then you done with playing that game, you can always remove the data in XMB PS3 game data section. If you will decide to play that game again, when you launch it it installs it's data again. Your game progress will not be corrupted. My opinion)
You are right, it's easy to delete the data. But I could say the same of Legend of Korra: you could just remove your Cobra hardware, and install HEN/CFW and load it as a PSN game. But I also agree that we aren't going to the easy path because we have a purpose: I learned a lot reading the code from Ghidra and with the trial/error changing some bytes. I got inFamous running on RPCS3 without caching, but I discovered RPCS3 is a lot more tolerant to fails than the real hardware (on PS3, it doesn't boot, occurs "corrupt data" error).

I think the purpose of dev_hdd1 is for game cache only, maybe you can use it instead of usrdir.
I'll try that. Thanks.
 
I updated makeps3iso to build a more "proper ps3 iso" : https://github.com/Zarh/ps3iso-utils/releases/tag/2.0
I'm able to skip the 3 videos on rpcs3 with the button start. I didn't try on the ps3, yet.

regs3iso is useless now :)
it wasn't working properly like I expected, and it was easy fix it : https://github.com/Zarh/ps3iso-utils/releases/tag/2.1
Quickly reading I read as "genps3iso is useless now") But in fact, regps3iso only is - now the game is playable with a sounds/music since your makeps3iso v2.0. But I rebuilt the game with your v2.0 and v2.1 and could not skip the first two intros this time. Did you test the game on the real console device? - is this same on yours?
 
I tested an iso build with 2.1 and it's working on my ps3. I drag&droped the folder one the exe. I was able to skip the 3 video :nickelodeon, and the 2 next with button START.
it's really weird because the 2.1 is building something more closer to the official iso than genps3iso, I'm going to give up this time because I don't have a clue why you can't skip them...
 
Quickly reading I read as "genps3iso is useless now") But in fact, regps3iso only is - now the game is playable with a sounds/music since your makeps3iso v2.0. But I rebuilt the game with your v2.0 and v2.1 and could not skip the first two intros this time. Did you test the game on the real console device? - is this same on yours?

Can you comment in makeps3iso.c
//#define USE_DIRNAME 1

- rebuilt makeps3iso
- rebuilt a new iso
- test the iso

maybe, it's the solution to skip the intro with your ODE
 
Zar, you wrote an action to do like everyone knows how to compile a program from the source code... Well, I know how) But I can only using cygwin and Linux.
I got 80010009. I compiled either using cygwin and in Fedora 30 Linux (by the way, I did not meet any "include" additions issue someone was reporting here before). The result iso images are the same size but the different MD5. The result makeps3iso.exe's size compiled with cygwin is precisely the same size as yours v2.1 (but as a cygwin binary it requires cygwin1.dll nearby). Cygwin's makeps3iso.exe percent proccess progress upgrades not every procent (as I saw they were 31%->62%->87%->...). That's the trifles if you are insterested in.
In both case compiled using this command:
make CC="gcc -static -static-libgcc" CXX="g++ -static -static-libgcc"

Also I would like to note that I made a little mistake in writting here that in the combo makeps3iso+regps3iso there were 3 intros unavailable to skip - no, I rebuilt it and tested for sure, so there are 2 intros unavailable to skip as well as in yours v2.0 and v2.1.
Nickelodeon.usm
Activision.usm
I notice again that not only that they can not be skipped, those intros also are pause-freezing while playing (btw need I record the video to show this moment?).
 
Zar, you wrote an action to do like everyone knows how to compile a program from the source code... Well, I know how) But I can only using cygwin and Linux.
I got 80010009. I compiled either using cygwin and in Fedora 30 Linux (by the way, I did not meet any "include" additions issue someone was reporting here before). The result iso images are the same size but the different MD5. The result makeps3iso.exe's size compiled with cygwin is precisely the same size as yours v2.1 (but as a cygwin binary it requires cygwin1.dll nearby). Cygwin's makeps3iso.exe percent proccess progress upgrades not every procent (as I saw they were 31%->62%->87%->...). That's the trifles if you are insterested in.
In both case compiled using this command:
make CC="gcc -static -static-libgcc" CXX="g++ -static -static-libgcc"

Also I would like to note that I made a little mistake in writting here that in the combo makeps3iso+regps3iso there were 3 intros unavailable to skip - no, I rebuilt it and tested for sure, so there are 2 intros unavailable to skip as well as in yours v2.0 and v2.1.
Nickelodeon.usm
Activision.usm
I notice again that not only that they can not be skipped, those intros also are pause-freezing while playing (btw need I record the video to show this moment?).
Zar already fixed the "include" issue in the source code (though that was for regps3iso, makeps3iso is a different ball game which didn't have "include" issues previously).
Does the 80010009 error only occur for this ISO or for other ISOs (original ones) as well? I can test compiling and making a few ISOs in Debian 10, though I usually only run make (without overriding anything).
 
Does the 80010009 error only occur for this ISO or for other ISOs (original ones) as well?
I don't get the question... Do you need that I rebuild some other game to check out the current situation with makeps3iso with that comment? - that case I think I'll got 80010009 too.
I can test compiling and making a few ISOs in Debian 10, though I usually only run make (without overriding anything).
Yes, just type 'make'. I used those define overridings only to not get the shared binary, especially for cygwin.
 
I don't get the question... Do you need that I rebuild some other game to check out the current situation with makeps3iso with that comment? - that case I think I'll got 80010009 too.

Yes, just type 'make'. I used those define overridings only to not get the shared binary, especially for cygwin.
Yeah, I was asking if you could build some other game (not a converted one from pkg) using makeps3iso just in case the problem was solely with the converted game itself. Maybe you won't get the error? (though, I would also expect the error to still be present)
 
AlexRhine,
cygwin's binary
NFSMW BLES01659
with a patch installed to internal hdd - 8001003E (expects the proper disc)
without a patch there - 80010009
 
I'll send you some test exe.
Also, can you use regps3iso on the iso (do not use drag&drop) it's a 'hidden' option of regos3iso, you can launch it with a batch, cmd or cygwin console

regps3iso do_read_region_info mybackup.iso

It will generate a txt file, i would like to see this file of each of your iso (with genps3iso, makeps3iso+regps3iso, makeps3iso 2.1)
There maybe something different from my iso and yours...
 
I decided to not create a new thread and write here.
Using the same experience dealing with Zar, I found out the HEX offsets locations for a game "Sonic Adventures (DX or not)" NPUB30249 to make a standalone iso from it. Here they are:
Code:
from offset ABAC:
It's data: 38 60 00 02
Edit to: 38 60 00 01

from offset 2EED08:
It's data: 38 60 00 02
Edit to: 38 60 00 01

The game have no patches, either it's addon have no other EBOOT.BIN, so the right and the only EBOOT.ELF is that decrypted from the game base .pkg. Anyway, you'll need to resign the .edat (and another .edat from addon using another .rap file) properly. After these edits those .edats will be properly found by the system in dev_bdvd (the system searches for them in /dev_hdd0/game/... folder originally without those edits).

That game could be launched without these edits next way - make an iso, resign the .edat(s), install .pkg of the game (and pkg of the DLC), replace .edat(s) in /dev_hdd0/game/NPUB30249/USRDIR/ by the resigned ones. Why some games can be launched the same way described and some are not? I think that's because of the next.
If to search "cellGameDataCheck" in this game, it's C representation is next:
Code:
cellGameDataCheck(2,uVar4 & 0xffffffff,&local_170);
- this time the case here is not in the comparison with the two as it was in case of Korra game. The creators programmatically set that "2" value here with the obvious reasons. That's why these, let's call them, "such type of games" can be launched using data rebuilt as iso and installed to internal hdd - because the creators set the value of the game type means that the game knows where to search for the data (in /dev_hdd0/game/TitleID/...).
----------------------------------------------------------------------------
One more game - "Extreme Exorcism" NPEB02239. This game is not working when you rebuild it to iso - black screen after launch with an error sound sometimes but always without exiting to XMB - that's what happens on the real console device, while it is launchable fine in RPCS3. The next offsets was found not by myself, so I do not know what they are actually fixing, I just have someone's fix for that game v1.0, decrypted EBOOT.BIN and compared the elf from that fix with the original one from v1.0. The offsets are correct both for v1.0 and for update v1.01 for that game. Here they are:
Code:
offset 3588FB:
It's data: 01
Edit to: 00

offset 358B87:
It's data: 01
Edit to: 00

offset 35BD97:
It's data: 01
Edit to: 00

from offset CEE6BC:
It's data: 39 80 00 00 65 8C 01 03 81 8C F2 3C
Edit to: 38 60 00 00 4E 80 00 20 60 46 47 5A

from offset CEE72C:
It's data: 39 80 00 00 65 8C 01 03 81 8C F2 3C
Edit to: 38 60 00 00 4E 80 00 20 60 46 47 5A

offset FFDE0D:
It's data: 47
Edit to: 34 (may be forced to 33 by the encrypting programs...)

offset FFDE35:
It's data: 47
Edit to: 34
Obviously, there is something more and completely different than "comparison with the 2"...

Anyway, do not forget to resign the .sprx'es
1 in Media folder
18 in Media/Managed directory
and 2 in Media/Plugins directory
and the .edat file of course.

P.S. For those who want a challange in the assembly searching. The game "Unreal Tournament III". It appears that it can be played through ethernet cable without PSN, but it actually can be not - when you choose ethernet mode, it forces to log into PSN. If to disable the needence of the PSN login, then you'll 'unlock' the ability to play the whole campaign of that game with someone without PSN using the services of XLink Kai (if I'm right in the program title :S)!!! And also there will be one more game playable through ethernet.
 
Last edited:
  • Like
Reactions: Zar
Back
Top