entropystrip
___________ __ _________ __ .__
\_ _____/ _____/ |________ ____ ______ ___.__./ _____// |________|__|_____
| __)_ / \ __\_ __ \/ _ \\____ < | |\_____ \\ __\_ __ \ \____ \
| \ | \ | | | \( <_> ) |_> >___ |/ \| | | | \/ | |_> >
/_______ /___| /__| |__| \____/| __// ____/_______ /|__| |__| |__| __/
\/ \/ |__| \/ \/ |__|
What it does
Most modern malware hides behind packers (like UPX, VMProtect, or Themida) or stashes encrypted payloads in PE resource directories or trailing file overlays. Rather than relying on static byte signatures, entropystrip evaluates:
- Section Entropy: Calculates block-level Shannon entropy across every PE section to locate encrypted or compressed buffers ($H > 7.20$).
- Memory Permissions: Identifies sections marked simultaneously as Writable and Executable (
IMAGE_SCN_MEM_WRITEandIMAGE_SCN_MEM_EXECUTE), which indicates self-modifying code or runtime unpackers. - PE Overlays: Measures trailing bytes appended past the end of the last mapped section.
- Import Table Size & Composition: Flags binaries with unusually small IATs (e.g. only importing
LoadLibrary/GetProcAddress) or sensitive process injection primitives (VirtualAlloc,WriteProcessMemory,QueueUserAPC). - .NET Classification: Inspects the COM descriptor directory to separate managed CLR assemblies from native binaries, avoiding false positives on standard C# applications.
- Payload Carving: Extracts identified high-entropy sections or overlays straight to raw binary files on disk for further analysis.
- Directory Triage: Walks directories or drives and ranks all found binaries by threat score.
Installation
Requirements: Python 3.8+ on Windows, Linux, or macOS.
pip install entropystrip
Or install directly from source:
git clone https://github.com/dwexi/entropystrip.git
cd entropystrip
pip install -e .
Usage
usage: entropystrip [-h] [-r] [--dump] [--deep] [--html HTML] [--json JSON] target
EntropyStrip: PE De-obfuscator & Triage Engine
positional arguments:
target Path to Windows executable (.exe / .dll) or directory to scan
options:
-h, --help show this help message and exit
-r, --recursive
recursively scan subdirectories if target is a folder
--dump carve and write high-entropy payloads to extracted_payloads/
--deep deep forensic triage: MITRE ATT&CK mapping, entry point disassembly, hashes
--html HTML write minimalist HTML report to specified path
--json JSON write machine-readable JSON telemetry to specified path
Examples
Analyze a single binary:
python main.py target.exe
Deep forensic triage with MITRE ATT&CK mapping & disassembly:
python main.py suspicious.exe --deep
Analyze and extract hidden payload buffers:
python main.py suspicious.exe --dump
Carved payloads are written to extracted_payloads/<target>_<section>.bin.
Export a standalone HTML report:
python main.py sample.exe --html report.html
Triage an entire directory of unknown files:
python main.py "C:\IncidentTriage" -r
Entropy Scale Reference
Shannon entropy measures information density from 0.00 to 8.00 bits per byte:
$$H(X) = -\sum_{i=0}^{255} P(x_i) \log_2 P(x_i)$$
| Entropy Range | Expected Content | Notes |
|---|---|---|
0.00 - 2.00 |
Zero-padding, sparse tables | Common in uninitialized data or alignment padding |
2.00 - 5.50 |
Standard ASCII, configurations | Normal application metadata, strings |
5.50 - 6.60 |
Native compiled machine code | Standard x86/x64 instructions (.text) |
6.60 - 7.30 |
Compressed assets | Bitmaps, icons, zlib/deflate streams |
7.40 - 8.00 |
Cryptographic ciphertext | AES/RC4 encrypted payloads or tightly packed shellcode |
License
MIT License. See LICENSE for details.
Metadata
Release files for entropystrip 1.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| entropystrip-1.2.0.tar.gz | 21.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| entropystrip-1.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 41.4 kB
Release files / entropystrip-1.2.0.tar.gz
| Download URL | entropystrip-1.2.0.tar.gz |
|---|---|
| Size | 21.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4dfadaeb7038622e3bd8cf27e78243a9bd3208db5f77602e8589f59d50b9309f
|
|
BLAKE2b-256 checksum How to use checksums |
51af31f291595d812156703c93614f1c2606220a69e6592e935ff638960d2d95
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.2
|
Release files / entropystrip-1.2.0-py3-none-any.whl
| Download URL | entropystrip-1.2.0-py3-none-any.whl |
|---|---|
| Size | 19.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1ce84f0576d48917679ded637d102127b2e271bcdf5152e34b45048f598154b0
|
|
BLAKE2b-256 checksum How to use checksums |
6b96add24e176c7ab3c32ba8b9194d6ca5cef8b74f4cf91d9ba16b60c193e92b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.2
|