Linux 下支持多种压缩文件格式,但是Windows 下生成的 rar/zip/7z等自解压格式文件,在 Linux下却没有相应的程序能打开或解压缩。其实我们也可以通过一些简单的处理,把自解压文件变成普通压缩文件,就可以正常打开。
一、原理
rar/zip/7z自解压格式文件,其实就是在普通的压缩文件的文件头,添加了一个自解压模块,自解压模块的文件名一般是Default.SFX, 或者Zip.SFX, 或者7z.sfx。只是zip自解压格式稍微复杂一点,它还修改了普通zip格式压缩文件末尾的5个字节(普通zip格式压缩文件末尾的5个字节内容一般是5个 0x00)。
二、需要用到的linux命令和程序
1 dd 命令(用于跳过自解压文件头,直接把普通压缩文件复制出来);
对于 rar/zip/7z自解压格式文件, 只用这个命令就行了。再在linux用解压缩软件直接打开压缩文件就行了。
2 二进制编辑器 (主要用于编辑 zip自解压格式文件的末尾5个字节)
如 gnome 下的 ghex, bless; KDE 下的 khexedit; 文本模式的 qemacs, hexedit 等。
安装方法:
代码: 全选
sudo apt-get install ghex bless khexedit gemacs hexedit
三、技术常识
3.1 WinRAR 3.71 for Windows 的自解压模块的大小:
* Default.SFX (rar自解压模块): 103424字节;
* Zip.SFX (zip自解压模块): 67584字节;
3.2 7-zip 自解压模块的大小:
* 7z.sfx (7z自解压模块): 60928字节;
说明:不同的程序使用的自解压模块,不同的程序版本号,不同的自解压模块版本,上面的大小可能不同。如果无法正常打开处理后的压缩文件,请用二进制编辑器查看自解压格式文件的压缩模块结尾和普通压缩文件的文件头,确定有效的自解压模块大小,再进行处理。
四、操作实例:
4.1 提取 WinRAR 3.71 for Windows 生成的rar自解压文件中的普通压缩文件
代码: 全选
dd if=old.rar.exe of=new.rar bs=103424 skip=1
上面的 old.rar.exe 是旧文件名,
new.rar 是新文件名,
103424 是自解压模块的大小,单位是字节(byte)
skip=1 代表复制时跳过文件前面的自解压模块103424字节*1 =103424
4.2 提取 WinRAR 3.71 for Windows 生成的zip自解压文件中的普通压缩文件
代码: 全选
dd if=old.zip.exe of=new.zip bs=67584 skip=1
4.3 提取 7-zip 生成的7z自解压文件中的普通压缩文件
代码: 全选
dd if=old.7z.exe of=new.7z bs=60928 skip=1
五、自己把普通压缩文件处理成自解压文件
5.1 先制作一个普通的 rar/7z 压缩文件,再运行下面的命令即可。
(注意:不推荐生成 zip 自解压文件,因为要对文件末尾进行处理,操作较复杂)
代码: 全选
cat rar.sfx old.rar > new.rar.exe
------------------
代码: 全选
cat 7z.sfx old.7z > new.7z.exe
上面的 rar.sfx 和 7z.sfx 分别是自解压模块。如果没有,也可按下面的命令进行提取:
代码: 全选
dd if=old.rar.exe of=rar.sfx bs=103424 count=1
代码: 全选
dd if=old.zip.exe of=zip.sfx bs=67584 count=1
代码: 全选
dd if=old.7z.exe of=7z.sfx bs=60928 count=1
下面是一些压缩文件格式的文件头和文件尾内容,可供有一定经验的用户参考。 把上面的图片打了包: