Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import sys
- import struct
- import zlib
- def get_data(filename):
- totalbytes = os.path.getsize(filename)
- infile = open(filename, 'rb')
- totalfiledata = infile.read(totalbytes)
- return totalfiledata
- if __name__ == '__main__':
- for filename in os.listdir(sys.argv[1]):
- if filename.find('.data') != -1 and filename.find('.bak') == -1:
- indexoffset = 0
- afilename = sys.argv[1] + '\\' + filename
- fileindex = get_data('LINKDATA.IDX')
- importedfile = get_data(afilename)
- filenum = int(filename.split('.')[0])
- indexoffset = filenum*0x20
- if indexoffset < 0x4380:
- linkdata = '0'
- elif indexoffset >= 0x4380 and indexoffset < 0x74b00:
- linkdata = '1'
- elif indexoffset >= 0x74b00 and indexoffset < 0x7a8a0:
- linkdata = '2'
- elif indexoffset >= 0x7a8a0:
- linkdata = '3'
- filedatasize = os.path.getsize(('LINKDATA%s.BIN' % linkdata))
- newoffset = filedatasize
- #IsZipped = struct.unpack('<B',fileindex[indexoffset+0x18:indexoffset+0x19])[0]
- IsZipped = 0x0
- if IsZipped == 0x1:
- newimportedfile = ''
- outputbuffer = len(importedfile)
- while outputbuffer % 0x10000 != 0:
- outputbuffer += 1
- newimportedfile += struct.pack('<I',outputbuffer) + struct.pack('<I',0x1) + struct.pack('<I',len(importedfile))
- compresseddata = zlib.compress(importedfile,9)
- newimportedfile += struct.pack('<I',len(compresseddata)+0x4)
- while len(newimportedfile) % 0x80 != 0:
- newimportedfile += '\x00'
- newimportedfile += struct.pack('<I',len(compresseddata))
- newimportedfile += compresseddata
- while len(newimportedfile) % 0x80 != 0:
- newimportedfile += '\x00'
- size1 = len(importedfile)
- size2 = len(newimportedfile)
- while len(newimportedfile) % 0x100 != 0:
- newimportedfile += '\x00'
- #outtest = open('test.data','wb')
- #outtest.write(newimportedfile)
- #outtest.close()
- filedata = file(('LINKDATA%s.BIN' % linkdata),'ab')
- filedata.seek(filedatasize,0)
- filedata.write(newimportedfile)
- filedata.close()
- else:
- size1 = len(importedfile)
- size2 = size1
- while len(importedfile) % 0x100 != 0:
- importedfile += '\x00'
- filedata = file(('LINKDATA%s.BIN' % linkdata),'ab')
- filedata.seek(filedatasize,0)
- filedata.write(importedfile)
- filedata.close()
- newindex = fileindex[:indexoffset] + struct.pack('<Q',newoffset) + struct.pack('<Q',size1) + struct.pack('<Q',size2) + struct.pack('<Q',IsZipped) + fileindex[indexoffset+0x20:]
- print 'appending %s into LINKDATA%s' % (filename,linkdata)
- indexout = open('LINKDATA.IDX', 'wb')
- indexout.write(newindex)
- indexout.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement