Skip to content

Instantly share code, notes, and snippets.

@Naim2000
Created September 23, 2024 11:21
Show Gist options
  • Save Naim2000/eefdfd69799a3337e34b68767ea5a305 to your computer and use it in GitHub Desktop.
Save Naim2000/eefdfd69799a3337e34b68767ea5a305 to your computer and use it in GitHub Desktop.
BuildEssentialsBackup() GM9 script
# essential.exefs builder script by thepikachugamer (Naim2000)
# version 1.0
# Last modified: 2024/09/22 17:05 PM
# Can I add an RSA signature here? Can we maybe make some directives so GM9 can show a nice name in the Scripts menu?
set EXEFS 9:/essential.exefs
fdummy $[EXEFS] 2200
fill $[EXEFS] 00
# Section I - Finding the files
find S:/nand_hdr.bin NAND_HDR
find M:/nand_cid.mem NAND_CID
find M:/otp.mem OTP
find 1:/private/movable.sed MOVABLE
find 1:/ro/sys/HWCAL0.dat HWCAL0
find 1:/ro/sys/HWCAL1.dat HWCAL1
if not find 1:/rw/sys/SecureInfo_A SECINFO
find 1:/rw/sys/SecureInfo_B SECINFO
echo "You have a SecureInfo_B? Weird but okay."
end
if not find 1:/rw/sys/LocalFriendCodeSeed_B FRNDSEED
find 1:/rw/sys/LocalFriendCodeSeed_A FRNDSEED
echo "You have a LocalFriendCodeSeed_A? Weird but okay."
end
# Section II - Constructing EXEFS file headers
# File 1: nand_hdr
# Offset: 0x000
# Size: 0x200
fset $[EXEFS]@00:8 6e616e645f686472
fset -e $[EXEFS]@08:4 00000000
fset -e $[EXEFS]@0C:4 00000200
# File 2: secinfo
# Offset: 0x200
# Size: 0x111
fset $[EXEFS]@10:8 736563696e666f00
fset -e $[EXEFS]@18:4 00000200
fset -e $[EXEFS]@1C:4 00000111
# File 3: movable
# Offset: 0x400
# Size: 0x140
fset $[EXEFS]@20:8 6d6f7661626c6500
fset -e $[EXEFS]@28:4 00000400
fset -e $[EXEFS]@2C:4 00000140
# File 4: frndseed
# Offset: 0x600
# Size: 0x110
fset $[EXEFS]@30:8 66726e6473656564
fset -e $[EXEFS]@38:4 00000600
fset -e $[EXEFS]@3C:4 00000110
# File 5: nand_cid
# Offset: 0x800
# Size: 0x10
fset $[EXEFS]@40:8 6e616e645f636964
fset -e $[EXEFS]@48:4 00000800
fset -e $[EXEFS]@4C:4 00000010
# File 6: otp
# Offset: 0xA00
# Size: 0x100
fset $[EXEFS]@50:8 6f74700000000000
fset -e $[EXEFS]@58:4 00000A00
fset -e $[EXEFS]@5C:4 00000100
# File 7: hwcal0
# offset: 0xC00
# Size: 0x9D0
fset $[EXEFS]@60:8 687763616c300000
fset -e $[EXEFS]@68:4 00000C00
fset -e $[EXEFS]@6C:4 000009D0
# File 8: hwcal1
# offset: 0x1600
# Size: 0x9D0
fset $[EXEFS]@70:8 687763616c310000
fset -e $[EXEFS]@78:4 00001600
fset -e $[EXEFS]@7C:4 000009D0
# Section III - Writing file data
inject $[NAND_HDR] $[EXEFS]@0200
inject $[SECINFO] $[EXEFS]@0400
inject $[MOVABLE] $[EXEFS]@0600
inject $[FRNDSEED] $[EXEFS]@0800
inject $[NAND_CID] $[EXEFS]@0A00
inject $[OTP] $[EXEFS]@0C00
inject $[HWCAL0] $[EXEFS]@0E00
inject $[HWCAL1] $[EXEFS]@1800
# Section IV - Writing file hashes
set HASH 0000000000000000000000000000000000000000000000000000000000000000
# Work with the exefs. It is inside RAMDISK, no need to go round 2 of reading the source files.
shaget $[EXEFS]@200:200 HASH
fset $[EXEFS]@1E0:20 $[HASH]
shaget $[EXEFS]@400:111 HASH
fset $[EXEFS]@1C0:20 $[HASH]
shaget $[EXEFS]@600:140 HASH
fset $[EXEFS]@1A0:20 $[HASH]
shaget $[EXEFS]@800:110 HASH
fset $[EXEFS]@180:20 $[HASH]
shaget $[EXEFS]@A00:10 HASH
fset $[EXEFS]@160:20 $[HASH]
shaget $[EXEFS]@C00:100 HASH
fset $[EXEFS]@140:20 $[HASH]
shaget $[EXEFS]@E00:9D0 HASH
fset $[EXEFS]@120:20 $[HASH]
shaget $[EXEFS]@1800:9D0 HASH
fset $[EXEFS]@100:20 $[HASH]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment