2019-8-9 12:55 /
(为了纪念天国的light和天国的DI汉化,我决定写一些东西来造福人类)
PlayDRM这一块我不会说,我只能提醒EnigmaProtector5.6和阿皇仔的视频。
那么,来看这个封包吧(说实话这个封包对于新手来说难度比较大……)

struct LIBUHDRVER1 {
  unsigned char signature[4]; // "LIB" or "LIBU"
  unsigned long unknown1;
  unsigned long entry_count;
  unsigned long unknown2;
};


struct LIBPHDR {
  unsigned char signature[4]; // "LIBP"
  unsigned long entry1_count;
  unsigned long entry2_count;
  unsigned long unknown1;
};

摘自asmodean的代码,实际上分析也是一样的。
不管是新版还是老版的MalieSystem,文件头始终都是这几个(新版的封包也就只有加密key和后缀名改了而已),加密用到了camelia,是一种块密码,关于这个,传送一下拓海大的分析
需要注意的是,每一个游戏的key都不一定相同,你需要自己开调试器调,具体方法看上面的分析。
老游戏和新游戏的文本位置不一样的,老游戏一般是在malie.exe的exec区段里面,把这个区段提取出来做camelia+zlib可以在末端看到文本。需要注意的是这里的camelia的key和解包用的key不同。新游戏一般就在封包里面,并且没有加密。
exec这玩意儿是malie的虚拟机,整体分为六个模块,最后一块就是文本,思路就是解析VM_CODE然后按照脚本导出。
dzi是malie的图片格式(雾,其实应该是list),malie的图片被分割了,依靠读取dzi来定位(相对位置)。图片本身没加密。
所以你明白了吗,为什么malie可以做到随意放大缩小图片大小可以跟着变而且还非常清晰,不是什么即时渲染,而是每一次一块一块拼的。
说下回封,根据路径创建文件夹,把东西丢里面,exec回封到exe里。