Custom Game Patches for PlayStation 4 Games.
.xml
support
- Download patch zip.
- Copy
patch1.zip
to/data/GoldHEN/
using an FTP client. - Open GoldHEN Cheat Manager and click Update.
- If the patches was installed correctly from Internal HDD, you should see the following message:
- Download patch zip.
- Copy
patch1.zip
to root of USB drive. - Open GoldHEN Cheat Manager and click Update.
- If the patches was installed correctly from USB, you should see the following message:
- Patches can be configured, install/update via:
- Run your game.
- Use
FTP
to upload patch files to:/user/data/GoldHEN/patches/xml/
- Naming conversion for app and patch engine to recognize:
(TitleID).{format}
- e.g.
CUSA00001.xml
- e.g.
CUSA03694.xml
- e.g.
Plugin system and GoldHEN Cheat Manager looks for patches by (TitleID).{format}
. (this is automatically generated from a python script using app_titleid
key when downloading/updating)
You may edit the individual file for your Title ID or edit the base file and upload it to your PS4 as (TitleID).{format}
.
export PS4_IP=192.168.1.138 # your PS4 ip address
export PS4_FTP_PORT=2121 # your PS4 ftp port (2121 via GoldHEN payload)
# sending base file as CUSA00000.xml
curl -T ExampleGame.xml ftp://$PS4_IP:$PS4_FTP_PORT/data/GoldHEN/patches/json/CUSA00000.xml
# sending CUSA00000.xml as CUSA00000.xml
curl -T CUSA00000.xml ftp://$PS4_IP:$PS4_FTP_PORT/data/GoldHEN/patches/json/CUSA00000.xml
- Repository naming conversion for single or multiple games:
GameName.{format}
(English names only)- e.g.
ExampleGame.xml
- e.g.
Set base address to 0x00400000
when importing binaries for consistency with PS4 memory address. (ASLR disabled)
- Patch must be named
GameTitle.json
and be in/patches/json
.
For example, a patch file for Gravity Rush 2 must be calledGravityRush2.json
. - If you are making a patch for a game that already has a file, then add to it.
- Submitting patches:
- No whitespace.
- Lowercase hex for address/value hex, uppercase for Title ID.
type |
Info | Value (example) |
---|---|---|
byte |
Hex, 1 byte | "0x00" |
bytes16 |
Hex, 2 bytes | "0x0000" |
bytes32 |
Hex, 4 bytes | "0x00000000" |
bytes64 |
Hex, 8 bytes | "0x0000000000000000" |
bytes |
Hex, max size is 255 bytes string (no spaces) | "####" |
float32 |
Float, single | "1.0" |
float64 |
Float, double | "1.0" |
utf8 |
String, UTF-8* | "string" |
utf16 |
String, UTF-16* | "string" |
mask |
Pattern Scan, max size is 255 bytes string (with spaces) Parameters: Offset : Offset from first address of found address |
"aa bb ?? dd" |
mask_jump32 |
Pattern Scan With Branch (32 bit), max size is 255 bytes string (with spaces) Parameters: Target : target bytes string for branchSize : size of jump (min: 5) with nop padding afterOffset : Offset from first address of found address |
"aa bb ?? dd" |
- Note: Strings must be manually null terminated.
<?xml version="1.0" encoding="utf-8"?>
<Patch>
<!--
This will not be used by the game patch parser.
It is only used for generating the files for distribution.
-->
<TitleID>
<ID>EXAMPLE01</ID>
<ID>EXAMPLE02</ID>
</TitleID>
<!-- `AppVer="mask"` can be used for pattern scan patches -->
<Metadata Title="Example Game Title"
Name="Example Name"
Note="Example Note"
Author="Example Author"
PatchVer="1.0"
AppVer="00.34"
AppElf="eboot.bin">
<PatchList>
<!-- This is a code comment, improves code readability. -->
<!-- Code comment at end of line is also supported. -->
<Line Type="bytes" Address="0x00000000" Value="0102030405060708"/>
<Line Type="utf8" Address="0x00000000" Value="Hello World\x00"/>
</PatchList>
</Metadata>
</Patch>