Skip to content

Instantly share code, notes, and snippets.

@ihaveamac
Last active June 15, 2016 10:45
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ihaveamac/263a5909d3674a7aedfd69f8a93ee7fd to your computer and use it in GitHub Desktop.
Save ihaveamac/263a5909d3674a7aedfd69f8a93ee7fd to your computer and use it in GitHub Desktop.
convert .3ds to .cia with just an exheader xorpad (old crappy method)
# Manual and DLPChild for some reason don't work.
# it must be a make_cia issue since I tried using makerom and hex editing and it worked fine
if [ ! -f "$1" ]; then
echo "no"
exit 1
fi
rm 0.cxi ncch.header exheader.bin exefs.bin romfs.bin logo.bcma.lz plain.bin converted.cia
EXHXOR=$(python2 get-exh-xorpad.py "$1")
3dstool -xvt012f cci orig.cxi manual.cfa dlpchild.cfa "$1"
3dstool -xvtf cxi orig.cxi --header ncch.header --exh exheader.bin --exh-xor $EXHXOR --exefs exefs.bin --romfs romfs.bin --logo logo.bcma.lz --plain plain.bin
if [ -s logo.bcma.lz ]; then
USELOGO="--logo logo.bcma.lz"
fi
if [ -s manual.cfa ]; then
USEMANUAL="--content1=manual.cfa --id_1=00000001 --index_1=0001"
fi
if [ -s dlpchild.cfa ]; then
USEDLPCHILD="--content2=dlpchild.cfa --id_2=00000002 --index_2=0002"
fi
#cp exheader.bin exheader-old.bin
python2 exh-patch.py exheader.bin
3dstool -cvtf cxi conv.cxi --header ncch.header --exh exheader.bin --exh-xor $EXHXOR --exefs exefs.bin --romfs romfs.bin $USELOGO --plain plain.bin --not-update-exefs-hash --not-update-romfs-hash
make_cia --content0=conv.cxi --id_0=00000000 --index_0=0000 $USEMANUAL $USEDLPCHILD --savesize=$(python2 get-savesize.py exheader.bin) -o CONVERTED.cia
#!/usr/bin/env python2
import sys, os.path
if len(sys.argv) != 2:
print("only need one argument for ExHeader")
sys.exit()
if not os.path.isfile(sys.argv[1]):
print("file doesn't exist")
sys.exit()
if os.path.getsize(sys.argv[1]) != 0x800:
print("not 2048 bytes (ExHeader size)")
sys.exit()
f = open(sys.argv[1], "r+b")
f.seek(0xD)
x = f.read(1)
y = ord(x)
print("original: "+hex(y))
y = y | 2
print("shifted: "+hex(y))
f.seek(0xD)
f.write(chr(y))
f.close()
#!/usr/bin/env python2
from __future__ import print_function
import binascii, sys, os.path
if len(sys.argv) != 2:
print("only need one argument for rom")
sys.exit()
if not os.path.isfile(sys.argv[1]):
print("file doesn't exist")
sys.exit()
rom = open(sys.argv[1], "rb")
rom.seek(0x190)
tid = binascii.hexlify(rom.read(8)[::-1])
print(tid.upper()+".Main.exheader.xorpad", end="")
rom.close()
#!/usr/bin/env python2
from __future__ import print_function
import binascii, sys, os.path
if len(sys.argv) != 2:
print("only need one argument for ExHeader")
sys.exit()
if not os.path.isfile(sys.argv[1]):
print("file doesn't exist")
sys.exit()
exh = open(sys.argv[1], "rb")
exh.seek(0x1C0)
ss = binascii.hexlify(exh.read(8)[::-1])
print(int(ss, 16)/1024, end="")
exh.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment