Hacking [W.i.P.] Savedata Hexediting DB

Slade.AU

Well-Known Member
Member
Joined
May 23, 2006
Messages
292
Trophies
1
Location
Yes
Website
127.0.0.1
XP
590
Country
Australia
Another one:

-- Jetpack Joyride (EUR) - PCSB00244
-- Credits: Slade

cur_chts = {
{["name"]="500,000 Credits", ["offset"]=0x50, ["file"]="JETPACK.SAV", ["value"]=0x7A120, ["size"]=4},
}

You will need to recalculate the CRC-32 as per liomajor's post here.
I hope that functionality can be built in ? Maybe with another field ["CRC"]=Yes and the app then calculates and edits the file for you.
 
Last edited by Slade.AU, , Reason: Title ID
  • Like
Reactions: Rinnegatamante

Regiiko

Well-Known Member
Member
Joined
Apr 19, 2007
Messages
332
Trophies
0
Location
Örebro
Website
Visit site
XP
274
Country
Regarding Persona 4 Golden, here's a tip for anyone wanting a challenge.

The P4G save editor is written in C#, therefore can be decompiled with Jetbrains dotPeek. All the offsets are listed within the reversed code.
 

Slade.AU

Well-Known Member
Member
Joined
May 23, 2006
Messages
292
Trophies
1
Location
Yes
Website
127.0.0.1
XP
590
Country
Australia
-- MUD FIM Motorcross World Championship (EUR) - PCSB00182
-- Credits: Slade

cur_chts = {
{["name"]="999,999 Credits", ["offset"]=0x2982, ["file"]="CAREER-0.DAT", ["value"]=0x0F423F, ["size"]=4},
}

This is almost as much fun as DS hacking :) A little more convoluted, but early days.
 
Last edited by Slade.AU, , Reason: Title ID

Rinnegatamante

Well-Known Member
OP
Member
Joined
Nov 24, 2014
Messages
3,162
Trophies
2
Age
29
Location
Bologna
Website
rinnegatamante.it
XP
4,858
Country
Italy
Thanks @Slade.AU , your help is really appreciated. Going to add your cheats to the db right now.
Database is starting looking pretty solid. I'll probably release the hb soon.

About the CRC32, may i ask you to add me on Skype so that i can try to add such feature and ask you to test it? (rinnegatamante1)
 
Last edited by Rinnegatamante,

Slade.AU

Well-Known Member
Member
Joined
May 23, 2006
Messages
292
Trophies
1
Location
Yes
Website
127.0.0.1
XP
590
Country
Australia
Another one:

-- Jetpack Joyride (EUR) - PCSB00244
-- Credits: Slade

cur_chts = {
{["name"]="500,000 Credits", ["offset"]=0x50, ["file"]="JETPACK.SAV", ["value"]=0x7A120, ["size"]=4},
}

You will need to recalculate the CRC-32 as per liomajor's post here.
I hope that functionality can be built in ? Maybe with another field ["CRC"]=Yes and the app then calculates and edits the file for you.


Ok, this is odd. Editing the file works once, but won't work subsequent times. I'm going to have to look into this more. Talk about painful.

what is .lua and how do i use it ?

lua is a scripting language. I'm not sure whether these files specifically follow the lua programming convention or are just making use of their extension. In all honesty, it's not important.
The files are plain text. Rename them to .txt and have a look. At this point in time, you can't use them until the release of the PS Vita app that makes use of them.

Edit:

An update to the Jetpack Joyride save cheat. It can only be run once, when you have zero coins or a few coins. For some reason, the game makes a copy of the amount of coins and uses that location. Which would be fine, except the location has been in two different places on the same cheat file.

As such, I've updated the cheat to give a lot more coins initially.

-- Jetpack Joyride (EUR)
-- Credits: Slade

needs_crc32 = true

cur_chts = {
{["name"]="9,999,999 Credits", ["offset"]=0x50, ["file"]="JETPACK.SAV", ["value"]=0x98967F, ["size"]=4}
}
 
Last edited by Slade.AU, , Reason: Update stuff.

Darklord2007

Well-Known Member
Newcomer
Joined
Oct 17, 2007
Messages
60
Trophies
0
XP
391
Country
United States
Ok, this is odd. Editing the file works once, but won't work subsequent times. I'm going to have to look into this more. Talk about painful.



lua is a scripting language. I'm not sure whether these files specifically follow the lua programming convention or are just making use of their extension. In all honesty, it's not important.
The files are plain text. Rename them to .txt and have a look. At this point in time, you can't use them until the release of the PS Vita app that makes use of them.

Edit:

An update to the Jetpack Joyride save cheat. It can only be run once, when you have zero coins or a few coins. For some reason, the game makes a copy of the amount of coins and uses that location. Which would be fine, except the location has been in two different places on the same cheat file.

As such, I've updated the cheat to give a lot more coins initially.

-- Jetpack Joyride (EUR)
-- Credits: Slade

needs_crc32 = true

cur_chts = {
{["name"]="9,999,999 Credits", ["offset"]=0x50, ["file"]="JETPACK.SAV", ["value"]=0x98967F, ["size"]=4}
}
once i rename the .lua to .txt the cheat would show up right.
 

Slade.AU

Well-Known Member
Member
Joined
May 23, 2006
Messages
292
Trophies
1
Location
Yes
Website
127.0.0.1
XP
590
Country
Australia
can i help ?

Anyone can help.

You'll need:
Rincheat installed and working from here: https://github.com/Rinnegatamante/rinCheat
HxD: https://mh-nexus.de/en/downloads.php
Windows (or alternative) Calculator


Once Rincheat is installed and running (you will need to reboot and run Henkaku again), load a game, play it for a while and take a note of any stats you want to change.
Using Jetpack Joyride as an example, I played until I collected just over a thousand coins.
Make sure you've saved your game and haven't done anything else. It's often best to exit back to the main menu.
Press Start and Select and the Rincheat menu should pop up. Select: Export decrypted savedata and wait for Rincheat to finish. It only takes a few seconds at most.
You can turn on the FTP and dump the save that way, but I often find it doesn't work very well. So, exit the game with the PS button, and run VitaShell, and press Select to turn on the FTP.
Copy the save directory from ux0:/data/rinCheat/xxxxxxxxx_SAVEDATA, where the x's represent the Title ID of the game.
Inside that directory there may a sub directory sce_sys this can be ignored in every case, none of the files are needed. You want the file in the _savedata directory.
In the case of Jetpack Joyride it's JETPACK.SAV Open this file (drag and drop) in HxD, then open Windows (or whatever) Calculator.
Set the mode to Programmer and convert the value of coins you had from Dec(imal) to Hex(idecimal). Let's say you had 1000 coins, that's 3E8 in hex. The byte order is reversed in the save file, so you'll want to search (ctrl+f) for E803.
Don't just assume the first location is the correct one. Also, having a somewhat random number will help. It'd be better to have 1312 coins than 1000, only to minimise the chances of 1000 be used for some other entry you can't see.
Once you've found your location (and it may require you to dump the game save more than once at different times of play), change the value. Don't forget reversed byte order for any values.
Some games require you calculate and edit the first 4 bytes as the CRC32. I've mentioned earlier in this thread where to find that info (liomajor's post).
Copy the save file back to your PSV through VitaShell, load the game, open rinCheat and then select import decrypted savedata. Quit the game with the PS button and swiping it away (daft idea BTW Sony, my screen always has finger prints all over it).
Load the game back again and if you've done everything correctly, you should see any changes you have made.

If you have any issues, post them here and I'm sure people will help. Good luck.
 
  • Like
Reactions: Rinnegatamante

Slade.AU

Well-Known Member
Member
Joined
May 23, 2006
Messages
292
Trophies
1
Location
Yes
Website
127.0.0.1
XP
590
Country
Australia
More:
-- Alien Breed (EUR)
-- Credits: Slade

cur_chts = {
{["name"]="999,999 Credits", ["offset"]=0x3C10, ["file"]="my_data.bin", ["value"]=0xF423F, ["size"]=4},
{["name"]="99 Lives", ["offset"]=0x3C2C, ["file"]="my_data.bin", ["value"]=0x63, ["size"]=1},
{["name"]="99 Health", ["offset"]=0x3C30, ["file"]="my_data.bin", ["value"]=0x63, ["size"]=1},
{["name"]="99 Keys", ["offset"]=0x3C34, ["file"]="my_data.bin", ["value"]=0x63, ["size"]=1},
{["name"]="Full Ammo", ["offset"]=0x3C38, ["file"]="my_data.bin", ["value"]=0x3DE0, ["size"]=4}
}

I've been thinking about writing a small Windows app that will make these file for you, just fill in the blanks...
 
  • Like
Reactions: Rinnegatamante

Rinnegatamante

Well-Known Member
OP
Member
Joined
Nov 24, 2014
Messages
3,162
Trophies
2
Age
29
Location
Bologna
Website
rinnegatamante.it
XP
4,858
Country
Italy
More:
-- Alien Breed (EUR)
-- Credits: Slade

cur_chts = {
{["name"]="999,999 Credits", ["offset"]=0x3C10, ["file"]="my_data.bin", ["value"]=0xF423F, ["size"]=4},
{["name"]="99 Lives", ["offset"]=0x3C2C, ["file"]="my_data.bin", ["value"]=0x63, ["size"]=1},
{["name"]="99 Health", ["offset"]=0x3C30, ["file"]="my_data.bin", ["value"]=0x63, ["size"]=1},
{["name"]="99 Keys", ["offset"]=0x3C34, ["file"]="my_data.bin", ["value"]=0x63, ["size"]=1},
{["name"]="Full Ammo", ["offset"]=0x3C38, ["file"]="my_data.bin", ["value"]=0x3DE0, ["size"]=4}
}

I've been thinking about writing a small Windows app that will make these file for you, just fill in the blanks...

I need the titleid.
 

Slade.AU

Well-Known Member
Member
Joined
May 23, 2006
Messages
292
Trophies
1
Location
Yes
Website
127.0.0.1
XP
590
Country
Australia
The next game on the list: Dead Nation PCSF00427. I should finish later today. Expect an update to this post.
I attempted Murmasa Rebirth and found several promising locations, sadly the game uses some sort of CRC check, and I wasn't able to work it out.

Code:
-- Dead Nation (EUR/US) - PCSF00427
-- Credits: Slade

needs_crc32 = false


cur_chts = {

   
    {["name"]="9,999,999 Cash", ["offset"]=0x6A47, ["file"]="SAVE.DAT", ["value"]=0x98967F, ["size"]=4},

    {["name"]="Max Rifle", ["offset"]=0x6A8B, ["file"]="SAVE.DAT", ["value"]=0x040404, ["size"]=4},
    {["name"]="SMG Unlock (No purchase)", ["offset"]=0x6AA7, ["file"]="SAVE.DAT", ["value"]=0x03, ["size"]=1},
    {["name"]="SMG Purchasable 1/2", ["offset"]=0x6AB3, ["file"]="SAVE.DAT", ["value"]=0x09090909, ["size"]=4},
    {["name"]="SMG Purchasable 2/2", ["offset"]=0x6AB7, ["file"]="SAVE.DAT", ["value"]=0x01, ["size"]=1},
    {["name"]="SMG Max Level 1/2", ["offset"]=0x6AAB, ["file"]="SAVE.DAT", ["value"]=0x09090909, ["size"]=4},
    {["name"]="SMG Max Level 2/2", ["offset"]=0x6AAF, ["file"]="SAVE.DAT", ["value"]=0x01, ["size"]=1},
    {["name"]="SMG Infinite Ammo", ["offset"]=0x6ABD, ["file"]="SAVE.DAT", ["value"]=0xFFFF, ["size"]=4},
    {["name"]="Shotgun Unlock (No Purchase)", ["offset"]=0x6AC7, ["file"]="SAVE.DAT", ["value"]=0x03, ["size"]=1},
    {["name"]="Shotgun Purchasable 1/2", ["offset"]=0x6AB3, ["file"]="SAVE.DAT", ["value"]=0x09090909, ["size"]=4},
    {["name"]="Shotgun Purchasable 2/2", ["offset"]=0x6AD7, ["file"]="SAVE.DAT", ["value"]=0x01, ["size"]=1},
    {["name"]="Shotgun Max Level 1/2", ["offset"]=0x6ACB, ["file"]="SAVE.DAT", ["value"]=0x09090909, ["size"]=4},
    {["name"]="Shotgun Max Level 2/2", ["offset"]=0x6ACF, ["file"]="SAVE.DAT", ["value"]=0x01, ["size"]=1},
    {["name"]="Shotgun Infinite Ammo", ["offset"]=0x6ADD, ["file"]="SAVE.DAT", ["value"]=0xFFFF, ["size"]=4},
    {["name"]="Flamethrower Unlock (No purchase)", ["offset"]=0x6AE7, ["file"]="SAVE.DAT", ["value"]=0x03, ["size"]=1},
    {["name"]="Flamethrower Purchasable", ["offset"]=0x6AF3, ["file"]="SAVE.DAT", ["value"]=0x04040404, ["size"]=4},
    {["name"]="Flamethrower Max Level", ["offset"]=0x6AEB, ["file"]="SAVE.DAT", ["value"]=0x04040404, ["size"]=4},
    {["name"]="Flamethrower Infinite Ammo", ["offset"]=0x6AFD, ["file"]="SAVE.DAT", ["value"]=0xFFFF, ["size"]=4},
    {["name"]="Blade Cannon Unlock (No purchase)", ["offset"]=0x6B07, ["file"]="SAVE.DAT", ["value"]=0x03, ["size"]=1},
    {["name"]="Blade Cannon Purchasable", ["offset"]=0x6B13, ["file"]="SAVE.DAT", ["value"]=0xFF010202, ["size"]=4},
    {["name"]="Blade Cannon Max Level", ["offset"]=0x6B0B, ["file"]="SAVE.DAT", ["value"]=0xFF010202, ["size"]=4},
    {["name"]="Blade Cannon Infinite Ammo", ["offset"]=0x6B1D, ["file"]="SAVE.DAT", ["value"]=0xFFFF, ["size"]=4},
    {["name"]="Launcher Unlock (No purchase)", ["offset"]=0x6B27, ["file"]="SAVE.DAT", ["value"]=0x03, ["size"]=1},
    {["name"]="Launcher Purchasable", ["offset"]=0x6B33, ["file"]="SAVE.DAT", ["value"]=0x0204, ["size"]=4},
    {["name"]="Launcher Max Level", ["offset"]=0x6B2B, ["file"]="SAVE.DAT", ["value"]=0x09090909, ["size"]=4},
    {["name"]="Launcher Infinite Ammo", ["offset"]=0x6B3D, ["file"]="SAVE.DAT", ["value"]=0xFFFF, ["size"]=4},
    {["name"]="Shocker Unlock (No purchase)", ["offset"]=0x6B47, ["file"]="SAVE.DAT", ["value"]=0x03, ["size"]=1},
    {["name"]="Shocker Purchasable", ["offset"]=0x6B53, ["file"]="SAVE.DAT", ["value"]=0x04040404, ["size"]=4},
    {["name"]="Shocker Max Level", ["offset"]=0x6B4B, ["file"]="SAVE.DAT", ["value"]=0x04040404, ["size"]=4},
    {["name"]="Shocker Infinite Ammo", ["offset"]=0x6B5D, ["file"]="SAVE.DAT", ["value"]=0xFFFF, ["size"]=4},
    {["name"]="Flare Max Level", ["offset"]=0x6B6B, ["file"]="SAVE.DAT", ["value"]=0x0304, ["size"]=4},
    {["name"]="Flare Max Ammo", ["offset"]=0x6B7D, ["file"]="SAVE.DAT", ["value"]=0xFFFF, ["size"]=4},
    {["name"]="Grenade Max Level", ["offset"]=0x6B8B, ["file"]="SAVE.DAT", ["value"]=0x0304, ["size"]=4},
    {["name"]="Grenade Infinite Ammo", ["offset"]=0x6B9D, ["file"]="SAVE.DAT", ["value"]=0xFFFF, ["size"]=4},
    {["name"]="Mine Unlock (No purchase)", ["offset"]=0x6BA7, ["file"]="SAVE.DAT", ["value"]=0x03, ["size"]=1},
    {["name"]="Mine Purchasable", ["offset"]=0x6BB3, ["file"]="SAVE.DAT", ["value"]=0x0304, ["size"]=4},
    {["name"]="Mine Max Level", ["offset"]=0x6BAB, ["file"]="SAVE.DAT", ["value"]=0x0304, ["size"]=4},
    {["name"]="Mine Infinite Ammo", ["offset"]=0x6BBD, ["file"]="SAVE.DAT", ["value"]=0xFFFF, ["size"]=4},
    {["name"]="Molotov Unlock (No purchase)", ["offset"]=0x6BC7, ["file"]="SAVE.DAT", ["value"]=0x03, ["size"]=1},
    {["name"]="Molotov Purchasable", ["offset"]=0x6BD3, ["file"]="SAVE.DAT", ["value"]=0x02, ["size"]=1},
    {["name"]="Molotov Max Level", ["offset"]=0x6BCB, ["file"]="SAVE.DAT", ["value"]=0x02, ["size"]=1},
    {["name"]="Molotov Infinite Ammo", ["offset"]=0x6BDD, ["file"]="SAVE.DAT", ["value"]=0xFFFF, ["size"]=4},
    {["name"]="Dynamite Unlock (No purchase)", ["offset"]=0x6BE7, ["file"]="SAVE.DAT", ["value"]=0x03, ["size"]=1},
    {["name"]="Dynamite Purchasable", ["offset"]=0x6BF3, ["file"]="SAVE.DAT", ["value"]=0x01, ["size"]=1},
    {["name"]="Dynamite Max Level", ["offset"]=0x6BEB, ["file"]="SAVE.DAT", ["value"]=0x01, ["size"]=1},
    {["name"]="Dynamite Infinite Ammo", ["offset"]=0x6BFD, ["file"]="SAVE.DAT", ["value"]=0xFFFF, ["size"]=4},
    {["name"]="Auto-Turret Unlock (No purchase)", ["offset"]=0x6C07, ["file"]="SAVE.DAT", ["value"]=0x03, ["size"]=1},
    {["name"]="Auto-Turret Purchasable", ["offset"]=0x6C13, ["file"]="SAVE.DAT", ["value"]=0x0303, ["size"]=4},
    {["name"]="Auto-Turret Max Level", ["offset"]=0x6C0B, ["file"]="SAVE.DAT", ["value"]=0x0303, ["size"]=4},
    {["name"]="Auto-Turret Infinite Ammo", ["offset"]=0x6C1D, ["file"]="SAVE.DAT", ["value"]=0xFFFF, ["size"]=4}
}

Edit: Working now.
 
Last edited by Slade.AU, , Reason: Fixed the issues. All save hacks are fully working.

Slade.AU

Well-Known Member
Member
Joined
May 23, 2006
Messages
292
Trophies
1
Location
Yes
Website
127.0.0.1
XP
590
Country
Australia
Some of these locations come courtesy of @Rasa39 and have been checked and tested by myself.

Title: PCSB00640

Code:
-- Akiba's Trip Undressed & Undead (EUR)
-- Credits: Slade & Rasa39

needs_crc32 = false

cur_chts = {
    {["name"]="999,999 XP", ["offset"]=0x60C, ["file"]="USR-DATA0000.BIN", ["value"]=0xF423F, ["size"]=4},
    {["name"]="999,990 Money", ["offset"]=0xB51C, ["file"]="USR-DATA0000.BIN", ["value"]=0xF4236, ["size"]=4},
    {["name"]="999 Upper Body Points", ["offset"]=0x124, ["file"]="USR-DATA0000.BIN", ["value"]=0x3E7, ["size"]=4},
    {["name"]="999 Equipment Points", ["offset"]=0x5A4, ["file"]="USR-DATA0000.BIN", ["value"]=0x3E7, ["size"]=4},
    {["name"]="999 Lower Body Points", ["offset"]=0x184, ["file"]="USR-DATA0000.BIN", ["value"]=0x3E7, ["size"]=4},
    {["name"]="300 Base Attack", ["offset"]=0x608, ["file"]="USR-DATA0000.BIN", ["value"]=0x12C, ["size"]=4},
    {["name"]="300 Base Defence", ["offset"]=0x604, ["file"]="USR-DATA0000.BIN", ["value"]=0x12C, ["size"]=4},
    {["name"]="1000 Upper Durability", ["offset"]=0x988, ["file"]="USR-DATA0000.BIN", ["value"]=0x3E8, ["size"]=4},
    {["name"]="1000 Lower Durability", ["offset"]=0x9E8, ["file"]="USR-DATA0000.BIN", ["value"]=0x3E8, ["size"]=4},
}



Title: PCSF00006

Code:
-- Everybody's Golf (EUR)
-- Credits: Slade

needs_crc32 = false

cur_chts = {
    {["name"]="50,000,000 Current Points", ["offset"]=0x58EF8, ["file"]="data2_EU.bin", ["value"]=0x2FAF080, ["size"]=4},
    {["name"]="50,000,000 Total Points", ["offset"]=0x58EFC, ["file"]="data2_EU.bin", ["value"]=0x2FAF080, ["size"]=4},
}


Title: PCSE00582

Code:
-- Adventure Time: The Secret of the Nameless Kingdom (USA)
-- Credits: Slade

needs_crc32 = false

cur_chts = {
    {["name"]="999 Rubles", ["offset"]=0x1A00, ["file"]="data.bin", ["value"]=0x3E7, ["size"]=4},
    {["name"]="99 Nuts", ["offset"]=0x1A08, ["file"]="data.bin", ["value"]=0x63, ["size"]=1},
    {["name"]="99 Fruit", ["offset"]=0x1A0C, ["file"]="data.bin", ["value"]=0x63, ["size"]=1},
    {["name"]="3 Thump Shards", ["offset"]=0x19F8, ["file"]="data.bin", ["value"]=0x3, ["size"]=1},
    {["name"]="99 Rattling Artifact", ["offset"]=0x1A24, ["file"]="data.bin", ["value"]=0x63, ["size"]=1},
    {["name"]="99 Gross?", ["offset"]=0x1A04, ["file"]="data.bin", ["value"]=0x63, ["size"]=1},
    {["name"]="9 Wood", ["offset"]=0x1A28, ["file"]="data.bin", ["value"]=0x09, ["size"]=1},
}

I'm not going to bother with that one any further. It's not a very enjoyable game. I'm sure there's more than could be done... Someone else can look at it.

Edit:

Title: PCSE00317

Code:
-- Terraria (USA)
-- Credits: Slade

needs_crc32 = false

cur_chts = {
    {["name"]="Max Current Health", ["offset"]=0x0B, ["file"]="PLAYER1.PLR", ["value"]=0x190, ["size"]=4},
    {["name"]="Max Total Health", ["offset"]=0x0D, ["file"]="PLAYER1.PLR", ["value"]=0x190, ["size"]=4},
}

This game could do with a save editor. I'm not going to make one. There are well over 3000 items in the game (according to the PC version), and I'm honestly not that interested in putting in that effort.

If you want to edit your save file, Slot 3 of the inventory starts at 0x4D with the item type as two bytes and then the amount of the item (presumably two bytes as well). You can look up items here, and hover over the icon and it will tell you the item number. Convert that to hex and edit the slot you want with the amount of an item.
 
Last edited by Slade.AU,
  • Like
Reactions: Rinnegatamante

Slade.AU

Well-Known Member
Member
Joined
May 23, 2006
Messages
292
Trophies
1
Location
Yes
Website
127.0.0.1
XP
590
Country
Australia
Title: PCSB00429
Code:
-- Sorcery Saga: Curse of the Great Curry God (UNK)
-- Credits: Slade

needs_crc32 = false

cur_chts = {
    {["name"]="99,999 Gold in Piggy Bank", ["offset"]=0x1548, ["file"]="SaveData_0001.sav", ["value"]=0x1869F, ["size"]=4},
    {["name"]="99,999 Gold in Funds", ["offset"]=0x362E0, ["file"]="SaveData_0001.sav", ["value"]=0x1869F, ["size"]=4},
}

Not a very complex turn based RPG. The money seems somewhat pointless given you restart your level every time you leave a dungeon. You do keep equipment, and buying / selling equipment is pointless. It's better to get your little imp like creature to craft you better stuff. Either way, here's lots of money.
 

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
    Xdqwerty @ Xdqwerty: @Sonic Angel Knight, never watched doug