Advertisement
Guest User

Untitled

a guest
Jun 12th, 2014
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.43 KB | None | 0 0
  1. import os
  2. import sys
  3. import struct
  4. import zlib
  5.  
  6. def get_data(filename):
  7.     totalbytes = os.path.getsize(filename)
  8.     infile = open(filename, 'rb')
  9.     totalfiledata = infile.read(totalbytes)
  10.     return totalfiledata
  11.  
  12. if __name__ == '__main__':
  13.     for filename in os.listdir(sys.argv[1]):
  14.         if filename.find('.data') != -1 and filename.find('.bak') == -1:
  15.             indexoffset = 0
  16.             afilename = sys.argv[1] + '\\' + filename
  17.             fileindex = get_data('LINKDATA.IDX')
  18.             importedfile = get_data(afilename)
  19.  
  20.             filenum = int(filename.split('.')[0])
  21.             indexoffset = filenum*0x20
  22.  
  23.             if indexoffset < 0x4380:
  24.                 linkdata = '0'
  25.             elif indexoffset >= 0x4380 and indexoffset < 0x74b00:
  26.                 linkdata = '1'
  27.             elif indexoffset >= 0x74b00 and indexoffset < 0x7a8a0:
  28.                 linkdata = '2'
  29.             elif indexoffset >= 0x7a8a0:
  30.                 linkdata = '3'
  31.            
  32.             filedatasize = os.path.getsize(('LINKDATA%s.BIN' % linkdata))
  33.             newoffset = filedatasize
  34.            
  35.             #IsZipped = struct.unpack('<B',fileindex[indexoffset+0x18:indexoffset+0x19])[0]
  36.             IsZipped = 0x0
  37.            
  38.             if IsZipped == 0x1:
  39.                 newimportedfile = ''
  40.                 outputbuffer = len(importedfile)
  41.                 while outputbuffer % 0x10000 != 0:
  42.                     outputbuffer += 1
  43.                
  44.                 newimportedfile += struct.pack('<I',outputbuffer) + struct.pack('<I',0x1) + struct.pack('<I',len(importedfile))
  45.                 compresseddata = zlib.compress(importedfile,9)
  46.                 newimportedfile += struct.pack('<I',len(compresseddata)+0x4)
  47.                 while len(newimportedfile) % 0x80 != 0:
  48.                     newimportedfile += '\x00'
  49.                 newimportedfile += struct.pack('<I',len(compresseddata))
  50.                 newimportedfile += compresseddata
  51.  
  52.                 while len(newimportedfile) % 0x80 != 0:
  53.                     newimportedfile += '\x00'
  54.                
  55.                 size1 = len(importedfile)
  56.                 size2 = len(newimportedfile)
  57.  
  58.                 while len(newimportedfile) % 0x100 != 0:
  59.                     newimportedfile += '\x00'
  60.  
  61.                 #outtest = open('test.data','wb')
  62.                 #outtest.write(newimportedfile)
  63.                 #outtest.close()
  64.                
  65.                 filedata = file(('LINKDATA%s.BIN' % linkdata),'ab')
  66.                 filedata.seek(filedatasize,0)
  67.                 filedata.write(newimportedfile)
  68.                 filedata.close()
  69.             else:
  70.                 size1 = len(importedfile)
  71.                 size2 = size1
  72.  
  73.                 while len(importedfile) % 0x100 != 0:
  74.                     importedfile += '\x00'
  75.                
  76.                 filedata = file(('LINKDATA%s.BIN' % linkdata),'ab')
  77.                 filedata.seek(filedatasize,0)
  78.                 filedata.write(importedfile)
  79.                 filedata.close()
  80.                
  81.             newindex = fileindex[:indexoffset] + struct.pack('<Q',newoffset) + struct.pack('<Q',size1) + struct.pack('<Q',size2) + struct.pack('<Q',IsZipped) + fileindex[indexoffset+0x20:]
  82.            
  83.             print 'appending %s into LINKDATA%s' % (filename,linkdata)
  84.             indexout = open('LINKDATA.IDX', 'wb')
  85.             indexout.write(newindex)
  86.             indexout.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement