Created
September 23, 2024 11:21
-
-
Save Naim2000/eefdfd69799a3337e34b68767ea5a305 to your computer and use it in GitHub Desktop.
BuildEssentialsBackup() GM9 script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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