Skip to content

Instantly share code, notes, and snippets.

@nattybear
Last active November 29, 2016 14:31
Show Gist options
  • Save nattybear/ce51f9abebb0fee5c41421c5d8b6328d to your computer and use it in GitHub Desktop.
Save nattybear/ce51f9abebb0fee5c41421c5d8b6328d to your computer and use it in GitHub Desktop.
from sys import argv, exit
from struct import unpack
from binascii import hexlify
from StringIO import StringIO
from os import getcwd
from zlib import decompress
from os import makedirs
from os.path import dirname
if len(argv) != 2:
print '[*] Usage: python', argv[0], '<arc>'
exit()
def read(fp, offset, size):
fp.seek(offset)
return fp.read(size)
def two(buf):
return unpack('H', buf)[0]
def int_(buf):
return unpack('I', buf)[0]
arc = argv[1]
fp = open(arc, 'rb')
magic = read(fp, 0, 4)
version = two(read(fp, 4, 2))
num = two(read(fp, 6, 2))
print '[*] Magic ID :', magic
print '[*] Version :', version
print '[*] Number of files :', num
print ''
class Jpn:
def __init__(self, buf):
fp = StringIO(buf)
self.dir = read(fp, 0, 64).replace(b'\x00', '')
self.ext = hexlify(read(fp, 0x40, 4))
self.compsize = int_(read(fp, 0x44, 4))
self.uncompsize = read(fp, 0x48, 3)
self.unknown = hexlify(read(fp, 0x4b, 1))
self.address = int_(read(fp, 0x4c, 4))
if self.ext == '9ab22b24':
self.dir = self.dir + '.gmd'
elif self.ext == 'eb5d1f24':
self.dir = self.dir + '.tex'
elif self.ext == '0026462d':
self.dir = self.dir + '.gfd'
offset = 0xc
dir = getcwd() + '\\'
for i in range(num):
fp.seek(offset)
buf = fp.read(0x50)
jpn = Jpn(buf)
offset = fp.tell()
fp.seek(jpn.address)
buf = fp.read(jpn.compsize)
buf = decompress(buf)
try:
fp1 = open(dir + jpn.dir, 'wb')
except IOError:
makedirs(dirname(jpn.dir))
fp1 = open(dir + jpn.dir, 'wb')
fp1.write(buf)
fp1.close()
print '[*] No.:', i+1
print '[+] Directory :', jpn.dir
print ' [-] Extention :', jpn.ext
print ' [-] Compress size :', jpn.compsize
print ' [-] Uncompress size :', hexlify(jpn.uncompsize)
print ' [!] Unknown :', jpn.unknown
print ' [-] Address :', hex(jpn.address)
print ''
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment