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, 域名收集, 数据预处理, 无后门, 机器学习, 特征工程, 误配置预防, 逆向工具