def decode(buff): buff.seek(0x20) deoff = buff.readu32() buff.seek(0x28) size = buff.readu32() newb = [buff[0:deoff]] for i in range(size): newb.append(chr(ord(buff[i + deoff]) ^ decode_table[i & 0xff])) compr = strfile.MyStr(''.join(newb[1:])) compr.seek(4) uncompr = LZdecompr(compr[8:], compr.readu32()) return ''.join([newb[0], compr[0:8], uncompr])
maps_idx[j] = maps_idx[j] + dist newNsb.append(nsb[lastpos:]) newMaps = [] maps.seek(0) for midx in maps_idx: len1, = unpack('4xH', maps.read(6)) newMaps.append(pack('IH', midx, len1)) newMaps.append(maps.read(len1)) return (''.join(newNsb), ''.join(newMaps)) file_name = 'extra_tips.nsb' if 0: fs = open(file_name, 'rb') stm = strfile.MyStr(fs.read()) fs.close() ext = ExtTips(stm) index_data = ''.join([pack('I', i) for i in ext[0]]) str_data = '\r\n'.join(ext[1]) fs = open(file_name.replace('.nsb', '.idx'), 'wb') fs.write(index_data) fs.close() fs = open(file_name.replace('.nsb', '.txt'), 'wb') fs.write(str_data) fs.close() else: fs = open(file_name, 'rb') nsb = strfile.MyStr(fs.read()) fs.close()
start=0x61cb08-DATA_BASE for i in range(0x1b): cur=start+i*768 while 1: stm.seek(cur) addr=stm.readu32() if addr==0: break stm.seek(addr-RDATA_BASE) newtxt.append(stm.readstr().replace(b'\n',b'\\n').replace(b'\r',b'\\r')) cur+=4 newtxt.append(b'/'+b'*'*60+b'/') return b'\r\n'.join(newtxt) fs=open('STEINSGATE.exe','rb') stm=strfile.MyStr(fs.read()) fs.close() names=extName(stm) fs=open('name.txt','wb') fs.write(names.decode('932').encode('utf-16')) fs.close() phone_info=extStr(stm,0x621d08,82) fs=open('info.txt','wb') fs.write(phone_info.decode('shift-jis').encode('utf-16')) fs.close() mail=extMail(stm) fs=open('mail.txt','wb') fs.write(mail.decode('shift-jis').encode('utf-16'))
def decode(buff): buff.seek(0x20) deoff = buff.readu32() buff.seek(0x28) size = buff.readu32() newb = [buff[0:deoff]] for i in range(size): newb.append(chr(ord(buff[i + deoff]) ^ decode_table[i & 0xff])) compr = strfile.MyStr(''.join(newb[1:])) compr.seek(4) uncompr = LZdecompr(compr[8:], compr.readu32()) return ''.join([newb[0], compr[0:8], uncompr]) fs = file('seen.txt', 'rb') idxes = strfile.MyStr(fs.read(10000 * 8)) if 'seen' not in os.listdir('.'): os.mkdir('seen') for i in range(10000): off = idxes.readu32() size = idxes.readu32() if off != 0: newfile = file('seen\\seen%04d.txt' % i, 'wb') fs.seek(off) newfile.write(decode(strfile.MyStr(fs.read(size)))) newfile.close() print '%04d Success' % i print 'Success'
def decStr(s): name = [] for ch in s: name.append(chr(ord(ch) ^ 0x56)) return ''.join(name) filename = 'rio.arc' fs = open(filename, 'rb') fs.seek(0x10) count = toint(fs.read(4)) fs.seek(0x1a) cadr_off = toint(fs.read(4)) fs.seek(0) stm = strfile.MyStr(fs.read(cadr_off + count * 12)) fs.close() ctif_off = toint(stm[0x2A:0x2A + 4]) names = [] stm.seek(0x28 + 2) for i in range(count): cur = stm.tell() stm.seek(stm.readu32() + 4) idx, len1, crc, = unpack('HHH', stm.read(6)) names.append(('0x%02X\t' % idx) + decStr(stm.read(len1))) stm.seek(cur + 8) txt = '\r\n'.join(names) fs = open(filename.replace('.arc', '_idx.txt'), 'wb')