跳转到主要内容

主要使用7zip、libarchive和Python标准库进行可靠归档提取的通用归档提取器。

项目描述

  • 许可证:Apache-2.0

  • 版权:版权所有 (c) nexB. Inc. 及其他

  • 主页:https://github.com/nexB/extractcode

  • 关键词:存档、提取、libarchive、7zip、scancode-toolkit、extractcode

支持Windows、Linux和macOS的64位处理器,以及Python 3.6到3.9。

ExtractCode是一个(主要)通用存档提取器。

使用以下方式安装

pip install extractcode[full]

为什么还需要另一个提取器?

它会提取!

ExtractCode可以在其他存档和压缩文件提取器可能失败的地方提取内容。

ExtractCode支持本文件底部支持的存档格式列表中列出的最大数量的存档格式之一。

  • 比如说,你想要在Windows上提取Linux内核源代码的tar包。它包含在忽略大小写时相同的路径,因此无法在Windows上正常提取:某些文件可能被损坏或提取失败。

  • 或者,tar包(在任何操作系统上)可能包含多次完全相同的路径。在这种情况下,在存档中先出现的路径可能被“隐藏”,并被存档中后来出现的相同路径覆盖,给人一种只有一个文件的感觉。

  • 或者,存档可能损坏了一点点,但大多数文件仍然可以提取。

  • 或者,提取的文件权限是您无法读取的,并且不属于您。

  • 或者,存档可能包含奇怪的路径,包括可能难以提取的相对路径。

  • 或者,存档可能包含特殊类型的文件(字符/设备文件),这些文件可能难以提取。

  • 或者,存档可能是一个虚拟磁盘或某些文件系统镜像,通常需要挂载才能访问,可能需要root权限和猜测来确定哪个分区和文件系统正在运行以及使用哪个驱动器。

在这些所有情况下,ExtractCode都会提取并尽力做到正确的事情,以获取实际的存档内容,而其他工具可能失败。

它还可以递归地提取任何类型的(嵌套)存档中的存档。

作为缺点,提取的内容可能不是典型的包含文件的使用情况所提取的内容:例如,某些文件可能被重命名,特殊文件和符号链接将被跳过,权限和所有者将被更改,但这对于主要用例,即文件内容分析用于软件组成或法医分析,是可行的。

幕后,ExtractCode使用了多个工具,例如

  • Python标准库,

  • 一个定制的ctypes绑定到libarchive,

  • 7zip命令行工具,

  • 以及在Linux上可选的libguestfs。

有了这些,它可以提取大量常见和不常见的存档和压缩文件类型。ExtractCode试图在所有支持的操作系统上以相同的方式提取内容,包括自动重命名在特定文件系统上或当给定存档中存在多个相同路径时(这在tar中是可能的)无法提取的无效文件名。

提取操作由一个考虑文件扩展名、文件名、文件类型和MIME类型的“投票”系统驱动(使用 ctypes 绑定到 libmagic)。它可以处理多级归档,如 tar.gz,并且可以递归地提取任何嵌套的归档。

访问https://aboutcode.orghttps://github.com/nexB/以获取支持和下载。

我们在

安装

要使用完整的安装包(其中安装了 7zip 和 libarchive 的二进制文件),请使用 full 额外选项

pip install extractcode[full]

如果您想使用操作系统提供的可能版本的二进制文件,请使用 minimal 选项

pip install extractcode

在这种情况下,您需要提供以下方式之一中安装和配置的、正常工作和兼容的 libarchive 和 7zip,以便 ExtractCode 可以找到它们

支持的二进制工具版本是

  • libarchive 3.5.x

  • 7zip 16.5.x

开发

为了设置开发环境

./configure --dev
source venv/bin/activate

为了运行单元测试

pytest -vvs -n 2

为了清理开发环境

./configure --clean

为了在激活的环境中运行命令行工具

./extractcode -h

使用环境变量进行配置

如果设置了,ExtractCode 将使用以下环境变量

  • EXTRACTCODE_LIBARCHIVE_PATH:指向支持某些归档格式的 libarchive.so libarchive 共享库的路径。如果没有提供,ExtractCode 将尝试使用标准 DLL 加载技术在其路径中查找插件提供的 libarchive 库路径。有关此类插件的示例,请参阅https://github.com/nexB/scancode-plugins/tree/main/builtins。如果没有插件提供 libarchive,则尝试使用标准 DLL 加载技术在路径中查找它。

  • EXTRACTCODE_7Z_PATH:用于支持某些归档格式的7zip可执行文件路径。如果未提供,ExtractCode将寻找插件提供的7z可执行文件路径。有关此类插件,请参阅https://github.com/nexB/scancode-plugins/tree/main/builtins。如果没有插件提供7z,则最后尝试在PATH中查找。

  • EXTRACTCODE_GUESTFISH_PATH:用于从libguestfs提取VM镜像的guestfish工具路径。如果未提供,ExtractCode将在PATH中查找已安装的guestfish可执行文件。

添加对VM镜像提取的支持

添加对VM镜像的支持需要手动安装libguestfs-tools系统包。这仅在Linux上受支持。在Debian和Ubuntu上,您可以使用以下命令:

sudo apt-get install libguestfs-tools

在Ubuntu上,还需要一个额外的手动步骤,因为内核可执行文件不能由libguestfish要求的用户读取。

运行此命令作为临时和即时的修复

sudo chmod 0644 /boot/vmlinuz-*
for k in /boot/vmlinuz-*
    do sudo dpkg-statoverride --add --update root root 0644 /boot/vmlinuz-$k
done

您可能希望同时进行这个临时修复和一个更持久的修复;否则,每次内核更新都会恢复到默认权限,并且ExtractCode将停止为VM镜像提取工作。

因此,请按照以下说明操作:

1. 以sudo权限创建文件/etc/kernel/postinst.d/statoverride,内容如下,由Kees Cook (@kees) 在https://bugs.launchpad.net/ubuntu/+source/linux/+bug/759725/comments/3中设计

#!/bin/sh
version="$1"
# passing the kernel version is required
[ -z "${version}" ] && exit 0
dpkg-statoverride --update --add root root 0644 /boot/vmlinuz-${version}
  1. 设置可执行权限

    sudo chmod +x /etc/kernel/postinst.d/statoverride

另请参阅以下链接以获取完整讨论

替代方案

这些其他工具与此相关,并在创建ExtractCode之前考虑过

这些工具提供内置、原始的提取功能

这些工具是其他提取工具的命令行工具包装,与ExtractCode类似,但目标不同

支持的归档格式列表

ExtractCode可以提取以下归档格式

归档格式类型:文档

名称:办公文档
  • 扩展名:.docx、.dotx、.docm、.xlsx、.xltx、.xlsm、.xltm、.pptx、.ppsx、.potx、.pptm、.potm、.ppsm、.odt、.odf、.sxw、.stw、.ods、.ots、.sxc、.stc、.odp、.otp、.odg、.otg、.sxi、.sti、.sxd、.sxg、.std、.sdc、.sda、.sdd、.smf、.sdw、.sxm、.stw、.oxt、.sldx、.epub

  • 文件类型:zip归档、Microsoft Word 2007+、Microsoft Excel 2007+、Microsoft PowerPoint 2007+

  • MIME类型:application/zip,application/vnd.openxmlformats

名称:Dia图表文档
  • 扩展名:.dia

  • 文件类型:gzip压缩

  • MIME类型:application/gzip

名称:Graffle图表文档
  • 扩展名:.graffle

  • 文件类型:gzip压缩

  • MIME类型:application/gzip

名称:SVG压缩文档
  • 扩展名:.svgz

  • 文件类型:gzip压缩

  • MIME类型:application/gzip

归档格式类型:常规

名称:Tar
  • 扩展名:.tar

  • 文件类型:.tar、tar归档

  • MIME类型:application/x-tar

名称:Zip
  • 扩展名:.zip、.zipx

  • 文件类型:zip归档

  • MIME类型:application/zip

名称:Java归档
  • 扩展名:.war、.sar、.ear

  • 文件类型:zip归档

  • MIME类型:application/zip,application/java-archive

名称:xz
  • 扩展名:.xz

  • 文件类型:xz压缩

  • 类型:application/x-xz

名称:lzma
  • 扩展名:.lzma

  • 文件类型:lzma压缩

  • 类型:application/x-xz

名称:Gzip
  • 扩展名:.gz, .gzip, .wmz, .arz

  • 文件类型:gzip压缩,gzip压缩数据

  • MIME类型:application/gzip

名称:bzip2
  • 扩展名:.bz, .bz2, bzip2

  • 文件类型:bzip2压缩

  • 类型:application/x-bzip2

名称:lzip
  • 扩展名:.lzip

  • 文件类型:lzip压缩

  • 类型:application/x-lzip

名称:RAR
  • 扩展名:.rar

  • 文件类型:rar存档

  • 类型:application/x-rar

名称:ar存档
  • 扩展名:.ar

  • 文件类型:当前ar存档

  • 类型:application/x-archive

名称:7zip
  • 扩展名:.7z

  • 文件类型:7-zip存档

  • 类型:application/x-7z-compressed

名称:cpio
  • 扩展名:.cpio

  • 文件类型:cpio存档

  • 类型:application/x-cpio

名称:Z
  • 扩展名:.z

  • 文件类型:压缩数据

  • 类型:application/x-compress

存档格式类型:常规嵌套

名称:Tar xz
  • 扩展名:.tar.xz, .txz, .tarxz

  • 文件类型:xz压缩

  • 类型:application/x-xz

名称:Tar lzma
  • 扩展名:tar.lzma, .tlz, .tarlz, .tarlzma

  • 文件类型:lzma压缩

  • 类型:application/x-lzma

名称:Tar gzip
  • 扩展名:.tgz, .tar.gz, .tar.gzip, .targz, .targzip, .tgzip

  • 文件类型:gzip压缩

  • MIME类型:application/gzip

名称:Tar lzip
  • 扩展名:.tar.lz, .tar.lzip

  • 文件类型:lzip压缩

  • 类型:application/x-lzip

名称:Tar lz4
  • 扩展名:.tar.lz4

  • 文件类型:lz4压缩

  • 类型:application/x-lz4

名称:Tar zstd
  • 扩展名:.tar.zst, .tar.zstd

  • 文件类型:zstandard压缩

  • 类型:application/x-zstd

名称:Tar bzip2
  • 扩展名:.tar.bz2, .tar.bz, .tar.bzip, .tar.bzip2, .tbz, .tbz2, .tb2, .tarbz2

  • 文件类型:bzip2压缩

  • 类型:application/x-bzip2

名称:lz4
  • 扩展名:.lz4

  • 文件类型:lz4压缩

  • 类型:application/x-lz4

名称:zstd
  • 扩展名:.zst, .zstd

  • 文件类型:zstandard压缩

  • 类型:application/x-zstd

名称:Tar 7zip
  • 扩展名:.tar.7z, .tar.7zip, .t7z

  • 文件类型:7-zip存档

  • 类型:application/x-7z-compressed

名称:Tar Z
  • 扩展名:.tz, .tar.z, .tarz

  • 文件类型:压缩数据

  • 类型:application/x-compress

存档格式类型:包

名称:Ruby Gem包
  • 扩展名:.gem

  • 文件类型:.tar、tar归档

  • MIME类型:application/x-tar

名称:Android应用
  • 扩展名:.apk

  • 文件类型:zip归档

  • MIME类型:application/zip

名称:Android库
  • 扩展名:.aar

  • 文件类型:zip归档

  • MIME类型:application/zip

名称:Mozilla扩展
  • 扩展名:.xpi

  • 文件类型:zip归档

  • MIME类型:application/zip

名称:iOS应用
  • 扩展名:.ipa

  • 文件类型:zip归档

  • MIME类型:application/zip

名称:Springboot Java Jar包
  • 扩展名:.jar

  • 文件类型:Bourne-again shell脚本可执行文件(二进制数据)

  • 类型:text/x-shellscript

名称:Java Jar包
  • 扩展名:.jar, .zip

  • 文件类型:Java存档

  • 类型:application/java-archive

名称:Java Jar包
  • 扩展名:.jar

  • 文件类型:zip归档

  • MIME类型:application/zip

名称:Python包
  • 扩展名:.egg, .whl, .pyz, .pex

  • 文件类型:zip归档

  • MIME类型:application/zip

名称:Microsoft cab
  • 扩展名:.cab

  • 文件类型:microsoft cabinet

  • 类型:application/vnd.ms-cab-compressed

名称:Microsoft MSI安装程序
  • 扩展名:.msi

  • 文件类型:msi安装程序

  • 类型:application/x-msi

名称:Apple pkg或mpkg包安装程序
  • 扩展名:.pkg, .mpkg

  • 文件类型:xar存档

  • 类型:application/octet-stream

名称:Xar存档 v1
  • 扩展名:.xar

  • 文件类型:xar存档

  • 类型:application/octet-stream, application/x-xar

名称:Nuget
  • 扩展名:.nupkg

  • 文件类型:zip存档,microsoft ooxml

  • 类型:application/zip, application/octet-stream

名称:静态库
  • 扩展名:.a, .lib, .out, .ka

  • 文件类型:当前ar存档,当前ar存档随机库

  • 类型:application/x-archive

名称:Debian包
  • 扩展名:.deb, .udeb

  • 文件类型:Debian二进制包

  • 类型:application/vnd.debian.binary-package, application/x-archive

名称:RPM包
  • 扩展名:.rpm, .srpm, .mvl, .vip

  • 文件类型:rpm

  • 类型:application/x-rpm

名称:Apple dmg
  • 扩展名:.dmg, .sparseimage

  • 文件类型:zlib压缩

  • 类型:application/zlib

存档格式类型:文件系统

名称:ISO CD镜像
  • 扩展名:.iso, .udf, .img

  • 文件类型:iso 9660 CD-ROM,High Sierra CD-ROM

  • MIME类型:application/x-iso9660-image

名称:SquashFS 磁盘镜像
  • 扩展名

  • 文件类型:squashfs

  • MIME类型

名称:QEMU QCOW2 磁盘镜像
  • 扩展名:.qcow2, .qcow, .qcow2c, .img

  • 文件类型:qemu qcow2 镜像,qemu qcow 镜像

  • 类型:application/octet-stream

名称:VMDK 磁盘镜像
  • 扩展名:.vmdk

  • 文件类型:vmware4 磁盘镜像

  • 类型:application/octet-stream

名称:VirtualBox 磁盘镜像
  • 扩展名:.vdi

  • 文件类型:virtualbox 磁盘镜像

  • 类型:application/octet-stream

存档格式类型:补丁

名称:补丁
  • 扩展名:.diff, .patch

  • 文件类型:diff,patch

  • MIME类型:text/x-diff

存档格式类型:特殊包

名称:InstallShield 安装程序
  • 扩展名:.exe

  • 文件类型:installshield

  • MIME类型:application/x-dosexec

名称:Nullsoft 安装程序
  • 扩展名:.exe

  • 文件类型:nullsoft installer

  • MIME类型:application/x-dosexec

项目详情


下载文件

下载适合您平台的文件。如果您不确定该选择哪一个,请了解更多关于安装包的信息。

源分布

extractcode-31.0.0.tar.gz (11.3 MB 查看哈希值)

上传时间:

构建分布

extractcode-31.0.0-py3-none-any.whl (56.7 kB 查看哈希值)

上传时间: Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面