資源簡(jiǎn)介
Python編寫(xiě)的RGSS3A解包工具
因?yàn)槭菍?xiě)著玩的所以代碼略亂
Python3+Ubuntu12.04下測(cè)試可用,但依然不能保證完全正常工作
僅供研究學(xué)習(xí)(還有吐槽)使用,請(qǐng)勿用于不適當(dāng)?shù)挠猛?
代碼片段和文件信息
#!/usr/bin/python3
import?sys
import?struct
import?os
def?usage():
print(‘RGSS3A?decrypter\nUsage:?rgss3adec??‘)
#?主密鑰變形
def?get_mainkey(mainkey):
tmpkey=struct.unpack(‘ tmpkey=tmpkey[0]*9+3
return?tmpkey
#?解密子文件信息
def?get_metadata(edatamainkey):
tmpedata=struct.unpack(‘ tmpdata=[]
for?i?in?range(len(tmpedata)):
tmpdata.append(tmpedata[i]^mainkey)
return?tmpdata
#?解密文件名|文件內(nèi)容
def?get_data(edatakeyisfile):
length=len(edata)
count=length//4
extra=length%4
# if?not?isfile:
# tmpdata=‘‘
# else:
tmpdata=bytearray()
for?i?in?range(0count):
nameblk=0
for?j?in?range(04):
nameblk+=edata[4*i+j]*pow(256j)
nameblk=struct.pack(‘ tmpdata+=nameblk
# if?not?isfile:
# tmpdata+=nameblk.decode()
# else:
# tmpdata+=nameblk
if?isfile:
key=(key*7+3)%4294967296
nameblk=0
if?extra!=0:
for?j?in?range(0extra):
nameblk+=edata[4*(i+1)+j]*pow(256j)
nameblk=struct.pack(‘# if?not?isfile:
# tmpdata+=(nameblk.decode())[0:extra]
# else:
tmpdata+=nameblk[0:extra]
if?not?isfile:
return?tmpdata.decode()
else:
return?tmpdata
#?在輸出文件夾中建立子文件夾
def?mksubdir(pathdirname):
newdir?=?os.path.join(path?dirname)
if?not?os.path.isdir(newdir):
os.mkdir(newdir)
#?建立輸出文件夾
def?mkoutdir(path):
try:
if?not?os.path.isdir(path):
os.mkdir(path)
mksubdir(path‘Data‘)
mksubdir(path‘Graphics‘)
except:
print(‘Unable?to?create?output?directory.‘)
sys.exit(2)
#?測(cè)試文件路徑格式是否為linux格式(不確定win下是否可用)
def?islinux(path):
if?(os.path.abspath(path))[0]==‘/‘:
return?True
else:
評(píng)論
共有 條評(píng)論