trumank/uesave-rs

[request] GEVA instead of GVAS

tuxfamily opened this issue ยท 7 comments

Hello.

I would like to edit a PS4 save made with UE 4.16 but it does not seem to be supported by any UE save editor.
The header is a bit different from a classic GVAS, it starts with GEVASEND instead of GVAS, and I don't really know for the rest of the file.
I searched for resources online about this particular format ("GEVA" or "GEVASEND") but did not find anything relevant.

As you are pretty familiar with this (kind of) file format,
could you give a look at the attached file and maybe point me in the right direction?

Many thanks.

ue4savegame.ps4.sav.zip

The header looks mostly familiar with some small oddities. Unfortunately it looks like the save file body is either compressed or encrypted. I don't see any magic numbers that suggest a specific compression algorithm so hard to say what's going on just looking at the save file in isolation. Perhaps you could try creating a slightly modified version of the save file in game and then diff the output? That might tell you things like where the compressed/encrypted data begins or whether it's a block cipher or stream cipher.

Thanks for the fast reply.

Perhaps you could try creating a slightly modified version of the save file in game and then diff the output?

A slightly modification is not really possible with this game (it's Life is strange 2) because it only saves after major decision or chapter, so, it's not like if I could spent $1 and then save, unfortunately.

Anyway, I don't want to bother you more with this, so I'm closing this ticket.
I will check if I have some other UE4 games on the PS4, in order to compare the saves.

Thanks for the suggestion and your time :)

Well you're in luck. ๐Ÿ˜„ I shared this with @LongerWarrior and he made the astute observation there is a Zlib compression stream header 4 bytes after what appears to the be the save file class name (78 9C). Sure enough, extracting this stream and passing it through Zlib produces what I would expect a save file body to look like. This commit has some messy patches that let the save file parse and re-save again which should let you edit the save as needed: 4f69f63

Awesome! Many thanks to both of you!

Unfortunately, I can't get it to work, but I probably do something wrong.

What I did:

git clone https://github.com/trumank/uesave-rs.git
git checkout -b life-is-strange
cargo install --path .
Replacing /Users/tuxfamily/.cargo/bin/uesave
    Replaced package `uesave v0.2.1 (https://github.com/trumank/uesave-rs.git#64e74aa9)` with `uesave v0.2.1 (/Users/tuxfamily/Projects/divers/uesave-rs)` (executable `uesave`)

But...

/Users/tuxfamily/.cargo/bin/uesave edit ue4savegame.ps4.sav
Found non-standard magic: [47, 45, 56, 41] (GEVA) expected: GVAS, continuing to parse...
Error: at offset 577188: io error: failed to fill whole buffer

What I did wrong? How can I avoid this error? ๐Ÿ˜Ÿ
Were you able to open this save on your side, with your patch?

I think you are creating a new branch off of master when you checkout with the -b flag.

If you just want to cargo install you can skip the clone entirely: cargo install --git https://github.com/trumank/uesave-rs.git --branch life-is-strange

Oh right, my mistake ๐Ÿ˜Ÿ
Sorry for that.

It seems to work, I will try to resign the save and upload it on the PS4... probably tomorrow.
I will keep you posted.

Thanks again.

Sorry for the late reply.

I've tried many times but, somehow, the save get corrupted after edit.

Basically, I'm just trying to change the 'money' value.
I found it in the JSON, in one place, it's a float, identified with a GUID.

So I've tried to just change it by $1 ($5.03 instead of $4.03) but after the game says that the save is corrupted.
I've tried everything possible on the PS4, even to delete all saves and the game itself, in case it was some kind of internal protection, but no luck.

Of course, it works if I do not edit the save, even transferring it from a console to another one (my Slim to my Pro in this case).

So, maybe there is a kind of signature/hash in the save, or something like that.

Well, not a big deal, I was able to change this value in game/memory with ps4debug.
Thanks to the save edit, I was able to see that the value is a real float, not rounded, so it was easy to found it in memory ๐Ÿ˜‰

Thank you very much for your help and your time.