挽救你的可执行 flash 电子书

flash / swf

近来整理文档发现一批 exe 格式的旧电子书,出于想把电子书保存更久的目的,想把里面的资源提取出来,供日后使用,这里分享一下当时的做法,也许可以供您参考,这是一个 flash 制作的 exe 文件,书籍的内容是杂志的扫描页,我们来试试看如何从头开始,把这些资源提取出来

1 使用到的工具

1.1 Resource Hacker

用来检查 windows 的 exe 或 dll 文件中有哪些资源,可以从这里下载

1.2 exe2swf

用来从 exe 中提取 swf 文件,可以从这里下载

1.3 swftools

用来从 swf 文件中提取资源,可以从这里下载,注意此工具的安装和执行均需要管理员权限

2 执行 exe 电子书

首先我们应该在比较旧的操作系统上运行一下我们的电子书,有一个感官性的认识,这样比较容易确认后续我们需要提取的资源

这里要提醒一下您,因为是 exe 文件,熟悉 windows 的用户可能都知道,这种文件能做的事情太多了,而且旧的可执行文件一般还会需要管理员权限才能执行,这就给了病毒或勒索软件可乘之机,它们可以公然向你索要管理员权限,然后做坏事,所以这里推荐 在虚拟机中执行来路不明的 exe 文件 ,我们在 win7 的虚拟机打开电子书来看一下

并没有提示需要管理员权限,然后我们随手翻了几页,基本确定这个电子书其实就是纸质书的扫描件,而且应该是图片格式

3 确定电子书使用的技术

由于是一个单一的 exe 文件,那么很显然我们要找的图片资源就在这个文件内,这时候需要用到 Resource Hacker 来检查一下 exe 文件中有哪些资源,同样,我们在虚拟机中用 Resource Hacker 来打开电子书

很遗憾我们没能一下找到我们要找的图片资源,不过我们看到有一个位图是 flash 的图标,我们再继续一个一个看下去

我们看到了 flash exe 的字样,那么我们基本上可以判定,这个 exe 是一个打包了 flash 运行环境和资源的文件,因为 flash 这个红极一时的平台现在已经日薄西山了,所以我们更有必要把资源提取出来

4 提取资源

4.1 提取 swf 文件

既然是 flash,首先就应该提取 flash 的标准格式 swf 文件,这时 exe2swf 就派上用场,首先我们把电子书放在虚拟机的一个单独的目录,然后执行 exe2swf,打开我们的电子书

当显示以上信息时,提取就完成了,我们可以看到目录里放了不少的 swf 文件

4.2 提取图像资源

提取图像资源需要第三个工具 swftools,这是一个命令行工具,前面说了,安装和执行都需要管理员权限,所以还是推荐只在虚拟机中运行,我们打开管理员权限的命令行,看一下 swf 文件中都包含哪些资源

:: 设置 swftools 的目录位置
set path=%path%;"c:\Program Files\SWFTools"
:: 移动到 swf 目录
cd \Users\IEUser\Downloads\popsoft.1996.01
:: 检查任意 swf 文件
swfextract 00000006.swf

我们可以看到有意思的情况,很多 swf 都有一个 id 为 2 的 jpg 图片,可以推断,这就是我们要找的 jpg 图片,赶紧提取出来看一下

:: -j 设置提取 jpg 资源 id,-o 设置输出文件名
swfextract 00000006.swf -j 2 -o 00000006.swf.jpg

打开 jpg 文件,是不是就是电子书中的某页呢?我们可以写一个批处理文档,一次把目录中所有 swf 文件的 jpg 资源提取出来

@echo off
set swfextract="C:\Program Files\SWFTools\swfextract.exe"

for %%x in (*.swf) do (
  echo %%x
  %swfextract% %%x -j 2 -o %%x.jpg
)

5 总结

现在我们已经可以导出所有页面,不过要注意,exe2swf 会自动给输出的 swf 文件一个像是序号的文件名,但是这个序号跟页码是对不上的,这个原因未知,可能是提取软件的问题,也可能是编辑成册时资源本身也不是按照顺序导入的,所以还需要我们后续自己排一下顺序

6 参考

本文中的图片和程序可以在这里找到