近来整理文档发现一批 exe 格式的旧电子书,出于想把电子书保存更久的目的,想把里面的资源提取出来,供日后使用,这里分享一下当时的做法,也许可以供您参考,这是一个 flash 制作的 exe 文件,书籍的内容是杂志的扫描页,我们来试试看如何从头开始,把这些资源提取出来
用来检查 windows 的 exe 或 dll 文件中有哪些资源,可以从这里下载
用来从 exe 中提取 swf 文件,可以从这里下载
用来从 swf 文件中提取资源,可以从这里下载,注意此工具的安装和执行均需要管理员权限
首先我们应该在比较旧的操作系统上运行一下我们的电子书,有一个感官性的认识,这样比较容易确认后续我们需要提取的资源
这里要提醒一下您,因为是 exe 文件,熟悉 windows 的用户可能都知道,这种文件能做的事情太多了,而且旧的可执行文件一般还会需要管理员权限才能执行,这就给了病毒或勒索软件可乘之机,它们可以公然向你索要管理员权限,然后做坏事,所以这里推荐 在虚拟机中执行来路不明的 exe 文件 ,我们在 win7 的虚拟机打开电子书来看一下
并没有提示需要管理员权限,然后我们随手翻了几页,基本确定这个电子书其实就是纸质书的扫描件,而且应该是图片格式
由于是一个单一的 exe 文件,那么很显然我们要找的图片资源就在这个文件内,这时候需要用到 Resource Hacker 来检查一下 exe 文件中有哪些资源,同样,我们在虚拟机中用 Resource Hacker 来打开电子书
很遗憾我们没能一下找到我们要找的图片资源,不过我们看到有一个位图是 flash 的图标,我们再继续一个一个看下去
我们看到了 flash exe 的字样,那么我们基本上可以判定,这个 exe 是一个打包了 flash 运行环境和资源的文件,因为 flash 这个红极一时的平台现在已经日薄西山了,所以我们更有必要把资源提取出来
既然是 flash,首先就应该提取 flash 的标准格式 swf 文件,这时 exe2swf 就派上用场,首先我们把电子书放在虚拟机的一个单独的目录,然后执行 exe2swf,打开我们的电子书
当显示以上信息时,提取就完成了,我们可以看到目录里放了不少的 swf 文件
提取图像资源需要第三个工具 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
)
现在我们已经可以导出所有页面,不过要注意,exe2swf 会自动给输出的 swf 文件一个像是序号的文件名,但是这个序号跟页码是对不上的,这个原因未知,可能是提取软件的问题,也可能是编辑成册时资源本身也不是按照顺序导入的,所以还需要我们后续自己排一下顺序
本文中的图片和程序可以在这里找到