Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from insani import *
- import os
- import sys
- #m twist stuff
- _N = 0x270
- M = 0x18D
- MATRIX_A = 0x9908B0DF #/* constant vector a */
- UPPER_MASK = 0x80000000 #/* most significant w-r bits */
- LOWER_MASK = 0x7fffffff #/* least significant r bits */
- mt = [0] * _N; #/* the array for the state vector */
- mti = _N+1; #/* mti==_N+1 means mt[_N] is not initialized */
- #m twist functions
- def srand(s):
- global mti
- mt[0] = s & 0xffffffff
- mti = 1
- while (mti<_N):
- mt[mti] = (0x6C078965 * (mt[mti-1] ^ (mt[mti-1] >> 30)) + mti)
- #/* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */
- #/* In the previous versions, MSBs of the seed affect */
- #/* only MSBs of the array mt[]. */
- #/* 2002/01/09 modified by Makoto Matsumoto */
- mt[mti] &= 0xffffffff;
- #/* for >32 bit machines */
- mti += 1
- def rand():
- global mti
- mag01 = [0x0, MATRIX_A]
- #/* mag01[x] = x * MATRIX_A for x=0,1 */
- if (mti >= _N): #/* generate _N words at one time */
- if (mti == _N+1): #/* if init_genrand() has not been called, */
- srand(0x1571) #/* a default initial seed is used */
- kk = 0
- while (kk<_N-M):
- #//y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK)
- y = ( (mt[kk+1]^mt[kk])&LOWER_MASK) ^ mt[kk]
- mt[kk] = mt[kk+M] ^ (y >> 1) ^ mag01[y & 0x1]
- kk = kk + 1
- while (kk<_N-1):
- #//y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK)
- y = ( (mt[kk+1]^mt[kk])&LOWER_MASK) ^ mt[kk]
- mt[kk] = mt[kk+(M-_N)] ^ (y >> 1) ^ mag01[y & 0x1]
- kk = kk + 1
- #//y = (mt[_N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK)
- y = (mt[_N-1]) ^ ( (mt[0]^mt[_N-1])&LOWER_MASK) & 0xFFFFFFFF
- mt[_N-1] = mt[M-1] ^ (y >> 1) ^ mag01[y & 0x1]
- mti = 0
- y = mt[mti]
- mti = mti + 1
- #/* Tempering */
- y ^= (y >> 11) & 0xFFFFFFFF
- y ^= ((y & 0xFF3A58AD) << 7) & 0xFFFFFFFF
- y ^= ((y & 0xFFFFDF8C) << 15) & 0xFFFFFFFF
- y ^= (y >> 18) & 0xFFFFFFFF
- return y
- #program
- files = sys.argv[1:]
- for filename in files:
- infile = open(filename, 'rb')
- assert_string(infile, "UTGP", ERROR_WARNING)
- srand(0x11922960)
- filecount = read_unsigned(infile, 4)
- dirname = filename[0:filename.find(".")]
- print "Processing file", filename
- if not os.path.isdir(dirname):
- os.mkdir(dirname)
- infile.seek(0x20, os.SEEK_SET)
- entries = []
- #expected_id = 0
- for i in xrange(filecount):
- entry = {}
- entry['id'] = read_unsigned(infile, 4) ^ rand()
- #So much for that.
- #if (entry['id'] != expected_id):
- # print "Expected an ID of %d, got %d! Around %d" % (expected_id, entry['id'], infile.tell())
- # sys.exit(0)
- #expected_id = expected_id + 1
- entry['start'] = read_unsigned(infile, 4) ^ rand()
- entry['size'] = read_unsigned(infile, 4) ^ rand()
- entry['crc'] = read_unsigned(infile, 4) ^ rand()
- entries.append(entry)
- for entry in entries:
- print "Extracting file of ID %06d from %08X of size %08X. CRC=%08X" % (entry['id'], entry['start'], entry['size'], entry['crc'])
- infile.seek(entry['start'], os.SEEK_SET)
- position = 0
- data = ""
- srand(0x11922960)
- while (position < entry['size']):
- rawdata = infile.read(4)
- newdata = "1234"
- rnd = rand()
- character0 = chr(ord(rawdata[0]) ^ ((rnd>>0)&0xFF))
- character1 = chr(ord(rawdata[1]) ^ ((rnd>>8)&0xFF))
- character2 = chr(ord(rawdata[2]) ^ ((rnd>>16)&0xFF))
- character3 = chr(ord(rawdata[3]) ^ ((rnd>>24)&0xFF))
- data += character0 + character1 + character2 + character3
- position += 4
- #data = infile.read(entry['size'])
- outfile = open("%s/%06d.png" % (dirname, entry['id']), 'wb')
- outfile.write(data)
- outfile.close()
- infile.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement