目前有许多使用DXLib引擎的游戏,但是有些游戏使用的引擎与常规的DXLib不同,他们使用的是魔改版的DXLib,封包以.med为主。其中_BGSET、_SPRSET、md_scr.med使用的封包格式为自创版本,格式及加密算法与常规dxa封包不同。
大部分的游戏的med文件都经过了加密,而且一个游戏对应一个Key,写在exe内部,不以明文存储,所以不同游戏的exe文件也不通用。我曾尝试使用反汇编找出exe内的解密模块,但是我都水平实在是有限,无法定位解密模块。
在查找资料时得知med拆解出的文件加密方式其实很简单:除了前0x10字节,之后的数据每个字节循环和Key相加。既然这么简单也许我可以直接研究文件来解密。
为了方便研究,我下载了GARbro可以解密的游戏《 [120831][Trois]MONSTER PARK 2神々を宿した乙女》,key是:97 92 97 8D 87 8B 95 9F 92
发现大部分文件在字符串开头存在:;---------------------------------
未解密时如下
MONSTER PARK 2未解密.png
把未解密的文件通过与key循环相减可以得出解密后的文件。
熟悉解密方式后,我使用GARBro拆解md_scr.med,得到一堆没有扩展名的文件,内部数据均加密,随便打开一个文件,通过观察发现也存在类似的部分:
需要解密的文件.png
这里有明显的循环,将此处的数据减去0x2D,并去除循环得到密钥:
\xa1\xb2\xbb\xa9\xb2\xbf\xb2\xbf\xb3\xb7
使用此密钥解密文件,解密成功!
成功解密的文件.png
但是我尝试了多个游戏后发现,通过查找循环的方式解密,在较新的版本不再适用,因为封包内不再出现大段的:---------------------------------。比如《[160129]光翼戦姫エクスティア2》以及后续版本。
我目前最优解密方法
继续研究,发现我手上所有med封包拆解后都会有一个_VIEW文件,这个文件的前24个字节是固定的:
_view.png
只需要把拆解出的_view文件开头和:
\x00\x23\x52\x55\x4C\x45\x5F\x56\x49\x45\x57\x45\x52\x00\x3A\x56\x49\x45\x57\x5F\x30\x00\x7B\x00
相减就可以得到密钥,一般的密钥不会太长,我目前遇到最长的也就20字节,最后放出我已经解密的游戏密钥:
_VIEW 前24字节完全一样
name: [120224][ルネ Team Bitters] マリッジブルー[婚約者がいるのに、どうしてこんな男に……]
key: b'\xb5\xbf\xad\xbf\xa7\xbf'
name: [110325][ルネ Team Bitters] それでも妻を愛してる
key: b'\xa1\xb2\xbb\xa9\xb2\xbf\xb2\xbf\xb3\xb7'
name: [130222][ルネ Team Bitters]魔法少女はキスして変身る
key: b'\xb7\xb1\xae\xb7'
name: [150529]光翼戦姫エクスティア1
key: b'\x9b\xd0\xcf\xd0\x9b\x88\x8d\x8c\x97\x9f\xd0\xcf\x94\x8b\x8d\x8c\x9b\x8e\x97\x8d'
name: [160129]光翼戦姫エクスティア2
key: b'\x9b\xd0\xcf\xce\x9b\x88\x8d\x8c\x97\x9f\xd0\xce\x94\x8b\x8d\x8c\x9b\x8e\x97\x8d'
name: [170512]光翼戦姫エクスティアA
key: b'\xd0\xcf\xcd\x9b\x88\x8d\x8c\x97\x9f\xbf\x94\x8b\x8d\x8c\x9b\x8e\x97\x8d\x9b'
网友评论