98limgbo/manifest-featurizer
GitHub: 98limgbo/manifest-featurizer
将 npm/PyPI/RubyGems 的 manifest 元数据预处理为机器学习就绪的特征矩阵,用于恶意包与垃圾包检测模型的训练。
Stars: 0 | Forks: 0
# manifest-featurizer
将 npm/PyPI/RubyGems 的 manifest 元数据预处理为适用于恶意和垃圾包检测的机器学习特征(ML-ready features)。
## 安装说明
需要 Python 3.10+。依赖项使用 [uv](https://github.com/astral-sh/uv) 管理。
```
uv venv
uv pip install -e .
```
## 快速开始
**使用提供的示例数据:**
```
# 在包含的示例数据上运行 pipeline
python -m src.pipeline
```
示例 manifest 位于 `data/sample/` 目录下(每个 registry 和标签各一个包)。将它们复制到 `data/00_manifest/` 中,即可在无需准备自己的数据集的情况下尝试 pipeline:
```
# Windows
xcopy /E /I data\sample data\00_manifest
# macOS / Linux
cp -r data/sample/. data/00_manifest/
```
这会生成 `data/05_preprocessed/preprocessed.csv` —— 即准备好用于模型训练的最终特征矩阵。
## Pipeline
```
00_manifest → [parse] → 01_parsed → [cleanse] → 02_cleansed
→ [normalize] → 03_normalized → [merge + featurize] → 04_features
→ [preprocess] → 05_preprocessed
```
| 步骤 | 输出 | 描述 |
|---|---|---|
| 解析 (Parse) | `01_parsed/` | 从 manifest 中提取原始字段 |
| 清洗 (Cleanse) | `02_cleansed/` | 移除占位符,去除重复项 |
| 标准化 (Normalize) | `03_normalized/` | 统一不同 registry 间的字段名称 |
| 特征化 (Featurize) | `04_features/features.csv` | 二进制、计数、长度、版本、许可证、依赖项特征 |
| 预处理 (Preprocess) | `05_preprocessed/preprocessed.csv` | 对偏态数值特征应用 log1p |
## 数据结构
将 manifest 文件放置在以下位置:
```
data/00_manifest/{source}/{registry}/{label}/{name}##{version}/
```
- `source`:`old`(2025 年之前收集)/ `new`(2025 年之后收集)
- `registry`:`npm` / `pypi` / `rubygems`
- `label`:`malicious` / `benign` / `spam` / `disputed`
**包 ID 格式**(根据文件夹路径自动生成):
```
source::registry::label::name::version
```
`data/sample/` 下提供了具有相同结构的示例数据。
## 脚本
### 从外部归档目录导入包
从压缩归档(npm 的 `.tgz`)中提取 manifest,并将它们放入 `data/00_manifest/`。
```
python -m scripts.ingest_packages
标签:Apex, Python, 域名收集, 数据预处理, 无后门, 机器学习, 特征工程, 误配置预防, 逆向工具