catalog

吉云

得,今天唠唠那个叫的玩意儿。这东西当初可把我折腾得够呛。

初遇这玩意儿

那还是好几年前,公司接个老系统的维护迁移活儿。系统老掉牙,文档几乎没有,就扔过来一堆文件和数据。翻腾的时候,就碰上这个文件,还不止一个,好几个目录里都有。看名字像是某种目录或者索引文件,后缀.wci也没见过,搜也搜不到啥有用信息。

catalog

头疼的开始

这下麻烦。不知道这文件是干嘛的,系统里具体哪个功能在用它,心里就没底。直接用文本编辑器打开?试,全是乱码,偶尔蹦出几个能看懂的词,但连不成句子,没啥用。用二进制编辑器看看,稍微好点,能看到一些规律性的数据头,但具体啥意思,还是两眼一抹黑。

问客户?客户那边负责的人也换好几茬,也是一问三不知,就说系统以前能跑,让咱们看着办。得,皮球踢回来。

瞎折腾过程

没办法,只能硬着头皮上。我当时琢磨着:

    catalog

  • 关联性分析: 我把所有找到的文件都列出来,看它们所在的目录结构,发现它们通常跟一堆图片或者文档放在一块儿。这更印证我的猜想,这玩意儿八成就是这些资源的索引文件。
  • 动态调试?太难: 想着能不能把那老系统跑起来,看看它读写这文件的时候是啥情况。但这老系统依赖的环境太古老,虚拟机搭起来都费劲,还缺这少那的,跑不起来。这条路基本堵死。
  • 暴力猜解: 我找个最小的文件,也就几KB,对着二进制编辑器硬看。配合着同目录下的资源文件,比如图片名、文档名啥的,去文件里找对应的十六进制串。你还别说,真让我蒙着点儿。发现里面确实存储文件名、好像还有文件大小和修改时间之类的信息,但格式很怪,不是常见的那种。

找到点门道

搞差不多两天,对着那个二进制文件看得眼睛都快瞎,总算摸清一点点门道。它大概是这么个结构:

catalog

  1. 一个文件头,记录索引多少个文件之类的基本信息。
  2. 后面跟着一堆记录条目,每个条目对应一个资源文件。
  3. 每个条目里包含加密(或者说就是简单异或处理过)的文件名、文件在某个大资源包里的偏移量、大小等。

那个所谓的“加密”很简单,就是跟一个固定的字节做异或。试出来之后,文件名就能正确显示。

catalog

最终解决

搞明白结构就好办。我赶紧用手头顺手的脚本语言(好像是Python,记不清),写个小程序,专门读取这种文件。程序逻辑很简单:

  1. 读取文件头,获取信息。
  2. 循环读取每个记录条目。
  3. 对文件名部分进行解密(异或还原)。
  4. catalog

  5. 把提取出来的信息,比如文件名、路径、大小啥的,整理成咱们需要的格式,存到一个新的文本文件或者数据库里。

跑一下,成!把那堆老系统里的资源信息都给扒出来。有这些信息,后面的数据迁移工作就好做多,至少知道那些散乱的文件都是干嘛的。

一点感想

搞这种没文档的、奇奇怪怪的文件格式,真是又烦人又有点小兴奋。 烦的是过程太痛苦,跟猜谜似的;兴奋的是搞定,有种解开谜题的成就感。这回对付的经历,也算是给我提个醒,以后再碰到类似情况,别怕麻烦,多观察、多尝试,总能找到突破口。有时候最笨的办法,比如对着二进制硬看,反而能有奇效。要是能一开始就有文档,谁愿意费这劲儿,

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]