Parser, builder, and CLI for the Fritz!Box EVA kernel image format
Project description
eva-image-tool
Parser, builder, and CLI for the Fritz!Box EVA kernel image format — the
TI record container used by AVM's EVA bootloader to hold LZMA-compressed
Linux kernels. Pure Python standard library, zero runtime dependencies.
See docs/format-spec.md for the full format
specification and docs/format-quickref.md for a
one-page summary.
Install
pipx install eva-kernel-image # recommended for CLI-only use
pip install eva-kernel-image # for library use
No external binaries required — everything runs on Python's stdlib lzma,
zlib, struct, and argparse.
CLI quickstart
# Inspect an image
eva-image info kernel.image
# Verify checksums (exit 0 if valid, non-zero otherwise)
eva-image verify kernel.image
# Extract kernels + metadata.json to a directory
eva-image extract kernel.image -o extracted/
# Rebuild an image, optionally replacing kernel(s)
eva-image repack kernel.image -o new.image
eva-image repack kernel.image -o new.image \
--kernel1 patched-primary.bin
# Pack an image from raw kernel binaries
eva-image pack -o new.image \
--kernel1 kernel1.bin --load1 0x80500000 --entry1 0x80C8B500 \
--kernel2 kernel2.bin --load2 0x8DFFFFFC --entry2 0x8E691770
Library quickstart
from pathlib import Path
from eva_kernel_image import parse_image, build_image
image = parse_image(Path("kernel.image").read_bytes())
print(f"dual-kernel: {image.dual_header is not None}")
print(f"primary entry: 0x{image.primary.entry_addr:08X}")
print(f"primary uncompressed size: {image.primary.lzma.uncompressed_len}")
# Validate checksums (parser itself does not auto-validate)
for issue in image.validate():
print(f"warning: {issue}")
# Decompress a kernel
Path("kernel1.bin").write_bytes(image.primary.decompress())
# Replace a kernel and rebuild
image.primary.replace_kernel(Path("patched.bin").read_bytes())
Path("patched.kernel.image").write_bytes(build_image(image))
Supported models
Verified against 18 reference images spanning six product lines:
| Model | Firmware versions tested |
|---|---|
| 7530 | 08.02 |
| 7560 | 07.00, 07.12, 07.27, 07.29, 07.30 |
| 7580 | 06.92, 07.27, 07.30 |
| 7583 | 08.03 |
| 7590 | 08.03, 08.10 |
| 7590 AX | 08.02 |
Both single-kernel (FEED1281) and dual-kernel (FEED9112) variants are
handled, including the legacy inner-signature quirk found on older
Fritz!Box 7560 and 7580 builds.
License
see LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file eva_kernel_image-0.1.2.tar.gz.
File metadata
- Download URL: eva_kernel_image-0.1.2.tar.gz
- Upload date:
- Size: 56.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ee27736b7a273238fcfc112b30ef1ee1b76ace8627ea80c9b96a25e0e477ff08
|
|
| MD5 |
2fcc8eda0d941ed1a0e27b2d6da26ac4
|
|
| BLAKE2b-256 |
1f1016f51b0e29e30aec541f3448e704d85a155f1f2295c95ec58a2a9af4a786
|
Provenance
The following attestation bundles were made for eva_kernel_image-0.1.2.tar.gz:
Publisher:
publish.yml on grische/eva-kernel-image
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
eva_kernel_image-0.1.2.tar.gz -
Subject digest:
ee27736b7a273238fcfc112b30ef1ee1b76ace8627ea80c9b96a25e0e477ff08 - Sigstore transparency entry: 1280191543
- Sigstore integration time:
-
Permalink:
grische/eva-kernel-image@102fa3d69bfebcde280c84b3374768b737c77d91 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/grische
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@102fa3d69bfebcde280c84b3374768b737c77d91 -
Trigger Event:
release
-
Statement type:
File details
Details for the file eva_kernel_image-0.1.2-py3-none-any.whl.
File metadata
- Download URL: eva_kernel_image-0.1.2-py3-none-any.whl
- Upload date:
- Size: 46.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b5b2a09605c121429ac5c1800aa31ce5b512c8dc9bd43a0f96ea5b163265c6e1
|
|
| MD5 |
003b934a50be2dc0bcd9f022a43ed07d
|
|
| BLAKE2b-256 |
fb816cc2469d7df574d4ea5705473b3324bac527c724390ef828e5f637e3d458
|
Provenance
The following attestation bundles were made for eva_kernel_image-0.1.2-py3-none-any.whl:
Publisher:
publish.yml on grische/eva-kernel-image
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
eva_kernel_image-0.1.2-py3-none-any.whl -
Subject digest:
b5b2a09605c121429ac5c1800aa31ce5b512c8dc9bd43a0f96ea5b163265c6e1 - Sigstore transparency entry: 1280191551
- Sigstore integration time:
-
Permalink:
grische/eva-kernel-image@102fa3d69bfebcde280c84b3374768b737c77d91 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/grische
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@102fa3d69bfebcde280c84b3374768b737c77d91 -
Trigger Event:
release
-
Statement type: