poggymacello/malwaremorph
GitHub: poggymacello/malwaremorph
一个用于检测研究的教学项目,通过生成模拟多态风格的随机 token 并计算其 Shannon 熵,可视化展示熵特征如何被用于恶意软件混淆检测。
Stars: 0 | Forks: 0
# MalwareMorph
用于检测研究的多态概念研究与 Shannon 熵分析。
## 概述
熵在恶意软件检测中频繁出现的原因之一是,加壳、加密或其他混淆形式的代码在统计上通常与纯源码或纯文本看起来不同:其字节分布趋向于随机的平坦化。这个项目提供了一种小型且独立的方式来探索这一想法。它会生成一批简短的、随机的占位符 token,用于代替多态风格的代码片段,测量它们的 Shannon 熵,并将其字符分布的扩散情况可视化。
这是一个概念研究,不是可用的多态引擎,也不是恶意软件样本生成器。生成的 token 是包裹在调用形状文本中的随机字符串(例如 `exec(mal_aB3xY)` 之类),这里的任何内容都不会执行、不会混淆真实代码,也不会执行任何真实 payload 会做的操作。
## 方法
每个“样本”的构建方式是从字母和数字中选取一个随机的 4 到 8 个字符的 token,然后将其随机包裹在少数几种类似调用的格式中(`exec(mal_...)`、`eval(virus_...)`、`run(trojan_...)` 等)之一。这些格式旨在类似于真实的恶多态意软件讨论中出现的 loader/dropper 调用结构,但不包含任何可执行逻辑。
每个样本的 Shannon 熵直接根据经典公式 (Shannon, 1948) 计算:对于字符串中观察到的每个字符的频率,将所有字符的 `-p * log2(p)` 累加。熵越高,意味着字符分布越均匀、越不可预测,这正是防病毒和 EDR 工具用作标记加壳或混淆文件的输入信号之一(在众多信号之中)。
然后,所有样本的字符分布被渲染为 3D 曲面图:一个轴代表样本索引,一个轴代表 ASCII 码位,高度代表该码位在该样本中出现的频率。
## 结果

曲面图显示,在每个样本的 ASCII 字母和数字范围内,字符频率的分布相当均匀,没有单个字符占主导地位。这正是那种平坦的高熵特征,使得随机化或混淆的字符串在基于熵的检测器中能够从自然语言或结构化代码里脱颖而出。
## 开始使用
```
git clone https://github.com/poggymacello/malwaremorph.git
cd malwaremorph
python3 -m venv .venv
source .venv/bin/activate # on Windows: .venv\Scripts\activate
pip install -r requirements.txt
python3 src/malware.py
```
运行该脚本会生成占位符 token 样本,计算其 Shannon 熵,打印平均值,并写入 `assets/entropy_distribution.png`。
## 项目结构
```
malwaremorph/
├── src/malware.py # sample generation, entropy calculation, 3D visualization
├── assets/ # generated output (entropy distribution plot)
├── requirements.txt
├── LICENSE
└── README.md
```
## 许可证
MIT,见 [LICENSE](LICENSE)。
标签:概念验证, 统计分析, 逆向工具, 香农熵