机甲世纪II 资源文件分析

机甲世纪一些资源所在目录:

\机甲世纪Ⅱ\AOA\RESOURCE

其中Fonts.pcg文件应该是空数据文件,只包含文件头数据,所以可以结合其他文件进行比较分析,这里比较Effects.pcg

Fonts.pcg


Effects.pcg


代码:

#! /usr/bin/env python
# -*- coding: gb2312 -*-
#
#   
#
# Usage:
#   python <fileName> <资源文件> <目标文件夹>   
#
# example:
#	python extractor.py UI.pcg temp
import sys, os
import os.path
import binascii

#转换小端模式 int
def lETransformInt(hexString):
	sbr=""
	j=0
	for i in range(len(hexString)-1,-1,-1):
		sbr = sbr + hexString[i]
	return int(binascii.b2a_hex(sbr), 16)
	
#转换小端模式 String
def lETransformStr(hexString):
	sbr=""
	j=0
	for i in range(len(hexString)-1,-1,-1):
		sbr = sbr + hexString[i]
	return binascii.b2a_hex(sbr)
	
#创建目录 并构造文件路径
def getRootDir(path):
	fullPath = os.getcwd() + "\\"+ sys.argv[2] +"\\"
	fileName = os.path.basename(path)
	reFilePath = path.split(fileName)[0]
	
	fullPath = fullPath + reFilePath
	if not os.path.isdir(fullPath):
		os.makedirs(fullPath)

	return fullPath + fileName
	
#按路径写入文件
def wtiteFileWithPathAndHex(path, HexStr):
	fileName = getRootDir(path)
	hexF = open(fileName, "wb")
	hexF.write(HexStr)
	hexF.close()

if len(sys.argv) != 3 :
	print "Usage:\n\tpython <fileName> <资源文件> <目标文件夹> \nexample:\n\tpython extractor.py The_Spell.vst temp "

else:
	f = open(sys.argv[1], "rb")
	#17 定位到文件个数段
	f.seek(17, 0)

	#读取文件数目
	fileCount = lETransformInt(f.read(4))
	globalOffset = 61
	print fileCount
	fileNum = 0
	while fileNum < fileCount:
		fileNum = fileNum + 1
		
		#定位到偏移地址
		f.seek(globalOffset, 0)
		#print "--------------" + str(globalOffset)
	
		#读取文件名长度
		filePathLength = lETransformInt(f.read(2))
		#print filePathLength
		
		#读取文件路径
		filePath = f.read(filePathLength)
		print "path:" + binascii.b2a_hex(filePath) + "\n" +filePath
		
		#读取偏移长度 文件大小
		offsetAdd = lETransformInt(f.read(4))
		#print "offsetAdd:" + str(offsetAdd)
		
		#移过32字节
		f.seek(32, 1)
		
		#读取偏移地址 文件起始地址
		originAdd = lETransformInt(f.read(4))
		#print "originAdd:" + str(originAdd)

		#按偏移地址读取
		f.seek(originAdd, 0)
		#获取偏移的长度的数据
		fileStr = f.read(offsetAdd)

		wtiteFileWithPathAndHex(filePath, fileStr)

		#计算文件索引位置
		globalOffset = globalOffset + 118 + filePathLength
	
	



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值