nemo

Nemo is a command line tool for hiding, finding, and removing hidden data on NTFS, APFS, and ext4. It is written in Go and runs on Linux, macOS, and Windows. Live writes on Windows are not supported yet.

It has two modes:

Modes lists what each platform supports. To try nemo, grab a test image below.

Install

On Linux or macOS:

curl -fsSL https://raw.githubusercontent.com/sahithyandev/nemo/main/scripts/install.sh | sh

On Windows (PowerShell):

powershell -c "irm https://raw.githubusercontent.com/sahithyandev/nemo/main/scripts/install.ps1 | iex"

Each script downloads the latest release for your OS and architecture from the releases page. If you’d rather not pipe a script into your shell, read it first.

A quick example

No disk image of your own? Download apfs-bare and unpack it:

curl -fsSLO https://raw.githubusercontent.com/sahithyandev/nemo/main/testdata/apfs-bare.img.gz
gunzip apfs-bare.img.gz

The file xattr.txt on that image already has data hidden in it. Find it:

nemo detect xattr.txt \
  --image apfs-bare.img
TECHNIQUE      TARGET       LOCATION         SIZE
named-stream   xattr.txt    user.nemo.test   4

Now hide something of your own in hello.txt:

nemo hide hello.txt \
  --technique named-stream \
  --data secret.bin \
  --stream-name notes \
  --image apfs-bare.img

Read it back out:

nemo extract hello.txt \
  --technique named-stream \
  --stream-name notes \
  --image apfs-bare.img

Remove it, which puts hello.txt back the way it was:

nemo clear hello.txt \
  --technique named-stream \
  --stream-name notes \
  --image apfs-bare.img

To see which filesystem and technique pairs nemo supports:

nemo features

Every command and flag is in the CLI reference.

Test images

These are small, disposable APFS images. They live in the repo and nemo’s own tests use them. Each one is gzipped, so run gunzip <file>.gz after downloading.

All but apfs-encrypted hold the same files:

So every example above works on any of them.

ImageWhat's different about it
apfs-bareno partition map, the plainest containerDownload
apfs-gptGPT-wrapped, the default macOS layoutDownload
apfs-casesensitivecase-sensitive volumeDownload
apfs-16k16 KiB blocks instead of the usual 4 KiBDownload
apfs-manyfiles2000+ files, forces a multi-level B-treeDownload
apfs-multivoltwo volumes in one containerDownload
apfs-encryptedencrypted and empty, nemo should refuse itDownload

To download from the command line, put the image name in this command:

curl -fsSLO https://raw.githubusercontent.com/sahithyandev/nemo/main/testdata/<image>.img.gz

Scope

In scope

Out of scope

Some of these may come later, but none are planned.

Several anti-forensic techniques close to nemo’s three are also out of scope, from unallocated-space hiding to snapshot stashing. Adjacent techniques explains what they are and why nemo skips them.

Where to go next