Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os,sys,struct,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('.'):
- if filename.find('.arc') != -1:
- print 'Extracting %s' % filename
- filedata = get_data(filename)
- filecnt = struct.unpack('<H',filedata[0x6:0x8])[0]
- if not os.path.isdir(filename.rsplit('.',1)[0]):
- os.mkdir(filename.rsplit('.',1)[0])
- for i in range(0xc,0xc+(filecnt*0x50),0x50):
- filename1 = filedata[i:filedata.find('\x00',i)]
- #print 'Extracting %s' % filename1
- filelen = struct.unpack('<I',filedata[i+0x44:i+0x48])[0]
- filedecomplen = struct.unpack('<H',filedata[i+0x48:i+0x4a])[0]
- filedecomplen = filedecomplen << 8
- filedecomplen = filedecomplen | struct.unpack('<B',filedata[i+0x4a:i+0x4b])[0]
- filepos = struct.unpack('<I',filedata[i+0x4c:i+0x50])[0]
- file = filedata[filepos:filepos+filelen]
- if filelen != filedecomplen:
- file = zlib.decompress(file)
- filepath = filename1.split('\\')
- currpath = filename.rsplit('.',1)[0]
- for i in range(0,len(filepath)-1):
- if filepath[i] != '':
- if not os.path.isdir(currpath + '\\' + filepath[i]):
- os.mkdir(currpath + '\\' + filepath[i])
- currpath += '\\' + filepath[i]
- outfile = open(currpath + '\\' + filepath[len(filepath)-1],'wb')
- outfile.write(file)
- outfile.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement