Measuring section entropy to detect packing
Skill meltedinhex/analyst-ai-pack/skills/measuring-section-entropy-to-detect-packing
Detects packing and encryption by measuring Shannon entropy across a binary's sections and regions: flagging high-entropy executable sections, entropy spikes, and size/raw-vs-virtual anomalies that indicate compression or encryption. Activates for requests to measure entropy, detect packing, or assess whether a sample is compressed/encrypted.From its SKILL.md
npx -y skills add meltedinhex/analyst-ai-pack --skill measuring-section-entropy-to-detect-packingAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 21 stars21 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as Apache-2.0. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
3.1 KB, 491 tokens by cl100k_base, as published. Nobody here has run it
Measuring Section Entropy to Detect Packing
When to Use
- You want a quick statistical signal of whether a sample is packed or encrypted.
- You are triaging a PE and need to flag suspicious high-entropy executable sections.
- You are deciding whether to route a sample to an unpacking workflow.
Do not use entropy as a verdict — legitimate compressed resources and installers also show high entropy; combine with imports, section names, and raw/virtual size anomalies.
Prerequisites
- Python (
mathstdlib); optionallypefilefor per-section analysis.
Safety & Handling
- Compute entropy on the inert file; never execute the sample.
- Keep the sample password-protected at rest and reference it by hash.
Workflow
Step 1: Compute whole-file and sliding-window entropy
Calculate Shannon entropy (0–8 bits/byte). Sliding-window entropy reveals localized high-entropy regions even when the overall value is moderate.
python scripts/analyst.py entropy sample.exe
Step 2: Compute per-section entropy (PE)
For each PE section, compute entropy and compare raw vs. virtual size. Executable sections with entropy > ~7.0 are a packing indicator.
Step 3: Correlate structural anomalies
Flag classic packer signs: high-entropy .text, unusual/renamed sections (UPX0, random
names), tiny raw size but large virtual size, and an entry point outside .text.
Step 4: Decide routing
If indicators stack (high entropy + thin IAT + odd sections), route to unpacking; otherwise proceed with normal static analysis.
Validation
- High-entropy executable sections are corroborated by other packing signs before concluding.
- Benign high-entropy cases (compressed resources) are not misclassified as packers.
- The routing decision (unpack vs. proceed) is justified by combined indicators.
Pitfalls
- Calling any high-entropy file "packed" without structural corroboration.
- Ignoring sliding-window entropy and missing a localized encrypted blob.
- Overlooking raw-vs-virtual size mismatch, a strong unpacking-at-runtime hint.
References
- See
references/api-reference.mdfor the entropy tool. - Shannon entropy and the PE/COFF spec (linked in frontmatter).
What ships with it: 3 files
4.7 KB alongside SKILL.md, 1 of them executable
references/
- api-reference.md1.3 KB
scripts/
- analyst.pyruns3.0 KB
- LICENSE340 B