dissect.target.container

Module Contents

Classes

Container

Base class that acts as a file-like object wrapper around anything that can behave like a "raw disk".

Functions

register

Register a container implementation to use when opening a container.

open

Open a Container from the given object.

Attributes

dissect.target.container.CONTAINERS: list[Type[Container]] = []
dissect.target.container.MODULE_PATH = 'dissect.target.containers'
dissect.target.container.RawContainer

A lazy import of dissect.target.containers.raw

dissect.target.container.log
class dissect.target.container.Container(fh: BinaryIO | pathlib.Path, size: int, vs: dissect.target.volume.VolumeSystem = None)

Bases: io.IOBase

Base class that acts as a file-like object wrapper around anything that can behave like a “raw disk”.

Containers are anything from raw disk images and virtual disks, to evidence containers and made-up binary formats. Consumers of the Container class only need to implement seek, tell and read. Override __init__ for any opening that you may need to do, but don’t forget to initialize the super class.

Parameters:
  • fh – The source file-like object of the container or a Path object to the file.

  • size – The size of the container.

  • vs – An optional shorthand to set the underlying volume system, usually set later.

__type__: str

A short string identifying the type of container.

__repr__() str

Return repr(self).

classmethod detect(item: list | BinaryIO | pathlib.Path) bool

Detect if this Container can handle this file format.

Parameters:

item – The object we want to see if it can be handled by this Container.

Returns:

True if this Container can be used, False otherwise.

classmethod detect_fh(fh: BinaryIO, original: list | BinaryIO) bool

Detect if this Container can be used to open the file-like object fh.

The function checks whether the raw data contains any magic information that corresponds to this specific container.

Parameters:
  • fh – A file-like object that we want to open a Container on.

  • original – The original argument passed to detect().

Returns:

True if this Container can be used for this file-like object, False otherwise.

abstract static detect_path(path: pathlib.Path, original: list | pathlib.Path) bool

Detect if this Container can be used to open path.

The function checks wether file inside path is formatted in such a way that this Container can be used to read it. For example, it validates against the file extension.

Parameters:
  • path – A location to a file.

  • original – The original argument passed to detect().

Returns:

True if this Container can be used for this path, False otherwise.

abstract read(length: int = -1) bytes

Read a length of bytes from this Container.

readinto(b: bytearray) int

Uses dissect.target.helpers.utils.readinto().

abstract seek(offset: int, whence: int = io.SEEK_SET) int

Change the stream position to offset.

whence determines where to seek from:

  • io.SEEK_SET (0):: absolute offset in the stream.

  • io.SEEK_CUR (1):: current position in the stream.

  • io.SEEK_END (2):: end of stream.

Parameters:
  • offset – The offset relative to the position indicated by whence.

  • whence – Where to start the seek from.

seekable() bool

Returns whether seek can be used by this Container. Always True.

abstract tell() int

Returns the current seek position of the Container.

abstract close() None

Close the container.

Override this if you need to clean-up anything.

dissect.target.container.register(module: str, class_name: str, internal: bool = True)

Register a container implementation to use when opening a container.

This function registers a container using module relative to the MODULE_PATH. It lazily imports the module, and retrieves the specific class from it.

Parameters:
  • module – The module where to find the container.

  • class_name – The class to load.

  • internal – Whether it is an internal module or not.

dissect.target.container.open(item: list | str | BinaryIO | pathlib.Path, *args, **kwargs)

Open a Container from the given object.

All currently supported containers are checked to find a compatible one. RawContainer must always be checked last since it always succeeds!

Parameters:

item – The object we want to open a :class`Container` from.

Raises:
  • ContainerError – When a compatible :class`Container` was found but it failed to open.

  • ContainerError – When no compatible :class`Container` implementations were found.