tanzirmehedi/empiDySec

GitHub: tanzirmehedi/empiDySec

该项目是一个基于深度学习的 PyPI 恶意软件包动态行为检测实证研究复现包,旨在系统评估特征选择、模型架构和可解释性对检测性能的影响。

Stars: 3 | Forks: 0

## 深度学习在 PyPI 生态恶意软件包动态行为检测中的实证研究 **复现包 - empiDySec (Empirical Dynamic Security)** Python Focus Analysis Stability XAI ## 1. 研究概述 本仓库包含我们关于基于深度学习 (DL) 的 **PyPI 生态恶意软件包动态行为检测**实证研究的完整复现包。本研究系统地调查了在从高维、稀疏且异构的动态行为数据中检测恶意软件包时,特征选择策略、DL 架构、trace 类别、模型稳定性和可解释性是如何相互作用的。 本研究通过 **empiDySec** 进行实施——这是一种高效、稳定且可解释的、基于 DL 的实证动态分析方法,并在 **QUT-DV25** 数据集上进行了评估。如图 1 所示,本实证研究分为四个连续阶段: 1. **数据准备** - 数据集刻画与可视化 2. **特征选择** - 五种选择策略的比较评估 3. **模型选择与评估** - 十种 DL 架构的基准测试 4. **稳定性与可解释性分析** - 统计稳健性检验与 XAI 解释

empiDySec Study Workflow

Figure 1: Workflow of the empiDySec empirical study for detecting malicious PyPI packages.

## 2. 研究问题 本实证研究围绕以下研究问题展开: ``` - RQ1: Which feature sets lead to the best performance? - RQ2: How do DL models compare to ML models? - RQ3: Can DL models detect evasive attacks? - RQ4: How do DL models ensure stability? - RQ5: Can XAI provide meaningful interpretations? ``` ## 3. 目标数据集:QUT-DV25 所有实验均在 **QUT-DV25** 上进行,这是一个为 **PyPI 生态**中恶意软件包检测而构建的动态行为数据集。

Dataset Overview

Figure 2: Overview of the QUT-DV25 dataset: (a) statistics; (b) class distribution.

| 属性 | 值 | | --- | --- | | **数据集名称** | QUT-DV25 | | **目标任务** | 二分类(良性 vs. 恶意 Python 软件包) | | **生态系统** | PyPI | | **软件包总数** | 14,271(7,127 个恶意) | | **分析类型** | 动态行为分析 | | **执行阶段** | 安装时与安装后 | | **Trace 类别** | Filetop, Opensnoop, Install, TCP, SysCall, Pattern | | **特征表示** | 单个 trace 特征与组合特征空间 | | **输出类别** | 良性 / 恶意 | | **数据集 DOI** | https://doi.org/10.7910/DVN/LBMXJY | ### 3.1 Trace 类别(自变量) 本研究分析了六个核心 trace 类别以及一个组合表示: | Trace 类型 | 描述 | | --- | --- | | **Filetop** | 文件活动摘要与文件交互行为 | | **Opensnoop** | 文件打开操作及相关访问模式 | | **Install** | 安装阶段活动与软件包设置行为 | | **TCP** | 网络通信行为 | | **SysCall** | 系统调用级别的 runtime 交互 | | **Pattern** | 从执行产物中提取的行为模式表示 | | **Combined** | 由所有 trace 类别构建的联合表示 | ## 4. 研究设计 ### 4.1 实验因素 实证评估构成了三个因素的全因子设计: - **特征选择方法(5 个水平):** ANOVA, CORR, FLAML, PSO, WOA - **Trace 类别(7 个水平):** Filetop, Opensnoop, Install, TCP, SysCall, Pattern, Combined - **DL 架构(10 个水平):** MLP, NN, CNN, LeNet, MDCNN, RNN, LSTM, Transformer, BERT, DistilGPT2 这构成了在阶段 执行的完整实验网格,每个配置都会生成混淆矩阵、ROC 曲线、学习曲线、评估摘要和训练日志。 ### 4.2 评估与统计分析 - **阶段** 对数据集进行刻画(类别分布、trace 来源),并使用 **t-SNE** 跨动态、元数据和静态视图可视化类别可分性。 - **阶段** 生成按方法和按 trace 的特征子集,汇总在按 trace 划分的结果工作簿中。 - **阶段** 在每个选定的特征子集上训练并评估每种 DL 架构。 - **阶段** 执行比较 **稳定性分析**(均值-标准差-排名摘要、性能热力图、按类别比较、**Friedman 和 Nemenyi 临界差分图**以及 p 值矩阵),并使用 **SHAP**(全局重要性、摘要图和瀑布图)与 **LIME**(仪表板和实例级局部解释)对最佳配置进行 **可解释性分析**。 ## 5. 实验环境 对于 GitHub Codespaces(开发环境),默认配置足以复现输出结果,但由于硬件资源有限,与以下本地设置相比,性能可能会有所波动或下降。以下受控环境用于全规模的模型开发、训练和评估,并在此报告以保证可复现性。 ### 5.1 硬件与操作系统 - **处理器:** 13th Gen Intel Core i9-13900K - **内存:** 128 GB RAM - **GPU:** NVIDIA RTX A6000 with 48 GB memory - **操作系统:** Ubuntu 22.04 LTS (64-bit) ### 5.2 Python 环境 - **Python 版本:** 3.10.20 - **编译器:** GCC 14.3.0 ### 5.3 核心库版本 - **NumPy:** 1.23.5 - **Pandas:** 1.5.3 - **Matplotlib:** 3.7.1 - **scikit-posthocs:** 0.12.0 - **Seaborn:** 0.12.2 - **SciPy:** 1.9.3 - **Scikit-learn:** 1.2.2 - **TensorFlow:** 2.11.0 - **Transformers:** 4.38.2 - **Joblib:** 1.3.2 ### 5.4 深度学习后端 - **Keras (`tf.keras`):** 2.11.0 ### 5.5 GPU 配置 - **TensorFlow Built with CUDA:** Yes - **GPU Available:** Yes ## 6. 仓库结构 该仓库反映了研究的四个阶段: ``` { "empiDySec": { "Phase (i) Data Preparation": { "QUT-DV25 Dataset": { "QUT-DV25_Filetop_Traces": {}, "QUT-DV25_Install_Traces": {}, "QUT-DV25_Opensnoop_Traces": {}, "QUT-DV25_Pattern_Traces": {}, "QUT-DV25_SysCall_Traces": {}, "QUT-DV25_TCP_Traces": {} }, "Dataset Overview.ipynb": null, "dataset_overview.png": null, "qutdv25_trace_sources.png": null, "t-SNE Implementation.ipynb": null, "tsne_Dynamic.png": null, "tsne_Metadata.png": null, "tsne_Static.png": null }, "Phase (ii) Feature Selection": { "Feature Selection Methods": { "ANOVA": { "Feature_Selection_Combined_ANOVA.ipynb": null, "Feature_Selection_Filetop_ANOVA.ipynb": null, "Feature_Selection_Install_ANOVA.ipynb": null, "Feature_Selection_Opensnoop_ANOVA.ipynb": null, "Feature_Selection_Pattern_ANOVA.ipynb": null, "Feature_Selection_SysCall_ANOVA.ipynb": null, "Feature_Selection_TCP_ANOVA.ipynb": null }, "CORR": "...", "FLAML": "...", "PSO": "...", "WOA": "..." }, "Feature Selection Result": { "Combined.xlsx": null, "Filetop.xlsx": null, "Install.xlsx": null, "Opensnoop.xlsx": null, "Pattern.xlsx": null, "SysCall.xlsx": null, "TCP.xlsx": null }, "Feature Selection Overview.csv": null, "Features Selection Overview.ipynb": null, "feature_selection.png": null, "six_feature_selection.png": null }, "Phase (iii) DL Model Selection & Evaluation": { "ANOVA": "...", "CORR": "...", "FLAML": { "Combined": "...", "Filetop": "...", "Install": "...", "Opensnoop": "...", "Pattern": { "Evaluation_Outputs_Pattern_FLAML_Attention_BERT": {}, "Evaluation_Outputs_Pattern_FLAML_Attention_DistilGPT2": {}, "Evaluation_Outputs_Pattern_FLAML_Attention_Transformer": {}, "Evaluation_Outputs_Pattern_FLAML_Classical_CNN": {}, "Evaluation_Outputs_Pattern_FLAML_Classical_LeNet": {}, "Evaluation_Outputs_Pattern_FLAML_Classical_MDCNN": {}, "Evaluation_Outputs_Pattern_FLAML_Classical_MLP": {}, "Evaluation_Outputs_Pattern_FLAML_Classical_NN": {}, "Evaluation_Outputs_Pattern_FLAML_Pre_Attention_LSTM": {}, "Evaluation_Outputs_Pattern_FLAML_Pre_Attention_RNN": {}, "Pattern_FLAML_BERT.ipynb": null, "Pattern_FLAML_CNN.ipynb": null, "Pattern_FLAML_DistilGPT2.ipynb": null, "Pattern_FLAML_LeNet.ipynb": null, "Pattern_FLAML_LSTM.ipynb": null, "Pattern_FLAML_MDCNN.ipynb": null, "Pattern_FLAML_MLP.ipynb": null, "Pattern_FLAML_NN.ipynb": null, "Pattern_FLAML_RNN.ipynb": null, "Pattern_FLAML_Transformer.ipynb": null }, "SysCall": "...", "TCP": "..." }, "PSO": "...", "WOA": "..." }, "Phase (iv) Stability & Explainability": { "Explainability Analysis": { "LIME Outputs": {}, "SHAP Outputs": {}, "FLAML DL MLP Combined XAI.ipynb": null }, "Stability Analysis": { "Stability Analysis Outputs": {}, "Stability Analysis.ipynb": null } }, "Related Works": {}, "Images": {}, "LICENSE": null, "README.md": null, "SECURITY.md": null, "empidysec_runner.py": null, "requirements.txt": null } } ``` ## 7. 在 GitHub 开发环境中复现研究 本仓库包含 `empidysec_runner.py`,这是一个 Python 实用程序,用于 **检查项目结构**、**设置环境**,并按正确的研究顺序 **运行所有文件夹和子文件夹中的 Jupyter notebook (`.ipynb`)**。 要在 **GitHub Codespaces / GitHub Dev** 中运行此项目,请通过将 URL 中的 `.com` 替换为 `.dev` 在 GitHub Dev 中打开仓库:https://github.dev/****/empiDySec/ 环境打开后,启动终端并运行下面提供的必要设置和执行命令。 ### 重要提示 在执行 pipeline 之前,请确保所有 **数据集路径和位置**均根据您的环境进行了正确配置。不正确的数据集路径可能会导致 runtime 错误或数据丢失问题。 ### 7.1 Runner 的功能 - 验证仓库结构 - 检查关键文件夹和文件是否存在 - 从 `requirements.txt` 安装依赖项 - 递归发现子文件夹内的 notebook - 按预期的研究工作流程顺序运行 notebook - 从其自身目录执行每个 notebook,以确保相对路径继续有效 - 可选择将执行后的 notebook 保存到单独的输出目录 - 编写执行摘要报告 - 即使某些 notebook 失败也能继续运行 ### 7.2 主要命令 (Ubuntu) #### 1. 安装系统依赖 ``` sudo apt update sudo apt install -y make build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev curl git \ libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev \ libffi-dev liblzma-dev ``` #### 2. 安装 pyenv ``` curl https://pyenv.run | bash ``` 将 pyenv 添加到您的 shell: ``` echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc echo 'eval "$(pyenv init - bash)"' >> ~/.bashrc ``` 应用更改: ``` source ~/.bashrc ``` #### 3. 安装 Python 3.10.20 ``` pyenv install 3.10.20 ``` #### 4. 设置项目 Python 版本 ``` cd /workspaces/empiDySec pyenv local 3.10.20 python --version # should show Python 3.10.20 ``` #### 5. 创建虚拟环境 ``` python -m venv empiDySec ``` 激活它: ``` source /workspaces/empiDySec/empiDySec/bin/activate ``` 验证: ``` python --version ``` #### 6. 安装所需的 Python 包 ``` python -m pip install --upgrade pip python -m pip install nbformat nbclient jupyter ipykernel ``` #### 7. 检查仓库结构 首先使用此命令来验证预期的文件夹和文件是否存在。 ``` python empidysec_runner.py check ``` #### 8. 设置环境 这将从 `requirements.txt` 安装所需的 Python 包。 ``` python empidysec_runner.py setup ``` #### 9. 仅列出将要运行的内容 这将进行一次预演,而不实际执行 notebook。 ``` python empidysec_runner.py run --dry-run ``` #### 10. 仅运行阶段 2 中的特定脚本 ``` python empidysec_runner.py run --phase 2 --method PSO --trace SysCall ``` #### 11. 运行完整的研究工作流(387 个 notebook) 仅运行阶段 2: ``` python empidysec_runner.py run --phase 2 ``` 运行所有阶段的所有 notebook: ``` python empidysec_runner.py run --phase all --continue-on-error ``` ### 7.3 实用示例 仅运行 FLAML notebook: ``` python empidysec_runner.py run --phase all --method FLAML ``` 仅运行 FLAML Pattern notebook: ``` python empidysec_runner.py run --phase 3 --method FLAML --trace Pattern ``` 仅运行 FLAML SysCall CNN notebook: ``` python empidysec_runner.py run --phase 3 --method FLAML --trace SysCall "SysCall_FLAML_CNN.ipynb" ``` 覆盖原始 notebook(默认情况下,执行后的 notebook 会单独保存): ``` python empidysec_runner.py run --in-place --continue-on-error ``` ### 7.4 默认输出 默认情况下,脚本将执行后的 notebook 保存到: ``` executed_notebooks/ ``` 它还会写入执行摘要文件: ``` execution_summary.json ``` ### 7.5 推荐执行顺序 为了完整地端到端复现该研究,请按以下顺序运行命令: ``` python empidysec_runner.py check python empidysec_runner.py setup python empidysec_runner.py run --phase all --continue-on-error ``` ### 7.6 基于阶段的执行 由于本研究遵循多阶段设计,因此可以独立复现各个阶段: ``` python empidysec_runner.py run --phase 1 python empidysec_runner.py run --phase 2 python empidysec_runner.py run --phase 3 python empidysec_runner.py run --phase 4 ``` 阶段选择也可以与方法和 trace 筛选结合使用: ``` python empidysec_runner.py run --phase 3 --method FLAML --trace Pattern ``` ### 7.7 注意事项 - 脚本从每个 notebook 的 **自身文件夹** 执行它。 - 这对于使用 **相对路径** 的 notebook 非常重要。 - 该脚本适用于具有 **文件夹和子文件夹** 的项目。 - 当 notebook 依赖于固定的仓库布局时,它尤其有用。 ### 7.8 预期数据集位置 notebook 依赖于存储在其原始仓库位置的数据集: ``` Phase (i) Data Preparation/QUT-DV25 Dataset/ ``` 除非您同时更新 notebook 路径,否则请勿移动数据集文件。 ### 7.9 故障排除 1. **找不到 `requirements.txt`** - 确保您是从仓库根目录运行脚本的。 2. **Notebook 路径错误** - 这通常发生在数据集文件夹或相对路径丢失或更改时。 3. **某些 notebook 失败但希望其他继续运行** - 使用 `python empidysec_runner.py run --phase all --continue-on-error`。 4. **您只想预览执行计划** - 使用 `python empidysec_runner.py run --dry-run`。 ### 7.10 示例工作流 ``` # 步骤 1:验证 repository 结构 python empidysec_runner.py check # 步骤 2:安装 dependencies python empidysec_runner.py setup # 步骤 3:预览将要运行的 notebooks python empidysec_runner.py run --dry-run # 步骤 4:执行所有内容 python empidysec_runner.py run --phase all --continue-on-error ``` ### 7.11 输出摘要 执行后,检查: - `executed_notebooks/` 查看已执行的 notebook 副本 - `execution_summary.json` 查看运行状态和摘要信息 ## 8. 在本地 PC 上复现研究 ### 8.1 选项 1:pip ``` git clone https://github.com/****/empiDySec.git cd empiDySec python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate pip install -r requirements.txt ``` ### 8.2 选项 2:conda ``` conda create -n empidysec python=3.10 -y conda activate empidysec pip install -r requirements.txt ``` ### 8.3 所需的 Python 包 整个研究中使用的典型包包括: ``` `pandas==1.5.3`, `scikit-learn==1.2.2`, `openpyxl`, `numpy==1.23.5`, `scipy==1.9.3`, `tensorflow==2.11.0`, `matplotlib==3.7.1`, `seaborn==0.12.2`, `joblib==1.3.2`, `shap==0.41.0`, `lime`, `flaml[automl]==2.5.0`, `notebook==6.5.6`, `pywinpty==2.0.10` (Only for Windows) `threadpoolctl==3.1.0` (for Ubuntu) `terminado==0.17.1`, `transformers==4.49.0`, `scikit-posthocs==0.12.0`. ``` 使用这些版本是为了确保 **一致且可复现的实验结果**。 ### 8.4 Jupyter Notebook 启动 Jupyter Notebook: ``` pip install notebook jupyter notebook ``` ### 8.5 数据集可用性 本研究要求 **QUT-DV25 数据集**及其 trace 类别文件夹存在于以下位置: ``` Phase (i) Data Preparation/QUT-DV25 Dataset/ ``` 在运行 notebook 之前,请确保数据集文件保留在原始仓库结构中。 ## 9. 分阶段复现协议 该仓库遵循四阶段执行工作流。为了确保可复现性并与报告的结果保持一致,请按以下顺序运行 notebook。 ### 阶段 1:数据准备 (RQ1) 此阶段刻画数据集结构并可视化底层数据分布。 运行以下 notebook: ``` Phase (i) Data Preparation/Dataset Overview.ipynb Phase (i) Data Preparation/t-SNE Implementation.ipynb ``` 此阶段生成: - 数据集概览输出 - trace 来源可视化 - 动态、元数据和静态视角的 t-SNE 可视化 ### 阶段 2:特征选择 (RQ2) 此阶段应用研究中比较的五种特征选择方法。 转到: ``` Phase (ii) Feature Selection/Feature Selection Methods/ ``` 评估的方法为: - **ANOVA** - **CORR** - **FLAML** - **PSO** - **WOA** 对于每种方法运行与所需 trace 类别对应的 notebook。示例 (ANOVA): ``` Phase (ii) Feature Selection/Feature Selection Methods/ANOVA/Feature_Selection_Combined_ANOVA.ipynb Phase (ii) Feature Selection/Feature Selection Methods/ANOVA/Feature_Selection_Filetop_ANOVA.ipynb Phase (ii) Feature Selection/Feature Selection Methods/ANOVA/Feature_Selection_Install_ANOVA.ipynb Phase (ii) Feature Selection/Feature Selection Methods/ANOVA/Feature_Selection_Opensnoop_ANOVA.ipynb Phase (ii) Feature Selection/Feature Selection Methods/ANOVA/Feature_Selection_Pattern_ANOVA.ipynb Phase (ii) Feature Selection/Feature Selection Methods/ANOVA/Feature_Selection_SysCall_ANOVA.ipynb Phase (ii) Feature Selection/Feature Selection Methods/ANOVA/Feature_Selection_TCP_ANOVA.ipynb ``` 以同样的方式运行 CORR、FLAML、PSO 和 WOA 的相应 notebook。 生成并汇总的特征选择输出可在以下位置找到: ``` Phase (ii) Feature Selection/Feature Selection Result/ ``` ### 阶段 3:模型选择与评估 (RQ3) 此阶段在选定的特征子集上训练并评估深度学习模型。 转到: ``` Phase (iii) DL Model Selection & Evaluation/ ``` 选择所需的特征选择方法目录,例如: ``` ANOVA/ CORR/ FLAML/ ├── Combined/ ├── Filetop/ ├── Install/ ├── Opensnoop/ ├── Pattern/ ├── SysCall/ └── TCP/ PSO/ WOA/ ``` 然后打开所需的 trace 类别文件夹并运行相应的 notebook。例如,在 `FLAML/Pattern/` 下: ``` Phase (iii) DL Model Selection & Evaluation/FLAML/Pattern/Pattern_FLAML_BERT.ipynb Phase (iii) DL Model Selection & Evaluation/FLAML/Pattern/Pattern_FLAML_CNN.ipynb Phase (iii) DL Model Selection & Evaluation/FLAML/Pattern/Pattern_FLAML_DistilGPT2.ipynb Phase (iii) DL Model Selection & Evaluation/FLAML/Pattern/Pattern_FLAML_LeNet.ipynb Phase (iii) DL Model Selection & Evaluation/FLAML/Pattern/Pattern_FLAML_LSTM.ipynb Phase (iii) DL Model Selection & Evaluation/FLAML/Pattern/Pattern_FLAML_MDCNN.ipynb Phase (iii) DL Model Selection & Evaluation/FLAML/Pattern/Pattern_FLAML_MLP.ipynb Phase (iii) DL Model Selection & Evaluation/FLAML/Pattern/Pattern_FLAML_NN.ipynb Phase (iii) DL Model Selection & Evaluation/FLAML/Pattern/Pattern_FLAML_RNN.ipynb Phase (iii) DL Model Selection & Evaluation/FLAML/Pattern/Pattern_FLAML_Transformer.ipynb ``` 每个 notebook 在其对应的输出目录内生成评估输出,包括: ``` confusion matrices ROC curves learning curves evaluation summary files training logs ``` 对于其他特征选择方法(`ANOVA`、`CORR`、`PSO` 和 `WOA`),应遵循相同的流程:导航到相应的方法目录,打开所需的 trace 类别文件夹,并按照相同的命名规范运行相应的 notebook。 ### 阶段 4:稳定性与可解释性分析 (RQ4–RQ5) 此阶段执行跨模型和特征选择方法的比较稳定性分析,并为性能最佳的配置提供可解释性分析。 对于 **稳定性分析** (RQ4),运行: ``` Phase (iv) Stability & Explainability/Stability Analysis/Stability Analysis.ipynb ``` 此 notebook 在以下位置生成输出: ``` Phase (iv) Stability & Explainability/Stability Analysis/Stability Analysis Outputs/ ``` 典型输出包括: - 均值-标准差-排名摘要 - 模型性能热力图 - 按类别比较图 - 使用 Friedman 和 Nemenyi 分析的临界差分图 - p 值比较矩阵 - 性能最佳模型的紧凑摘要 对于 **可解释性分析** (RQ5),运行: ``` Phase (iv) Stability & Explainability/Explainability Analysis/FLAML DL MLP Combined XAI.ipynb ``` 此 notebook 在以下位置生成输出: ``` Phase (iv) Stability & Explainability/Explainability Analysis/LIME Outputs/ Phase (iv) Stability & Explainability/Explainability Analysis/SHAP Outputs/ ``` 典型输出包括: - SHAP 全局特征重要性图 - SHAP 摘要图 - SHAP 瀑布图 - LIME 仪表板 - 良性和恶意样本的局部解释 - HTML 和 PNG 格式的实例级解释文件 ## 10. 推荐的端到端执行顺序 为了完整复现该研究,请按以下顺序运行仓库: 1. `Dataset Overview.ipynb` 2. `t-SNE Implementation.ipynb` 3. 所选方法的特征选择 notebook 4. 选定特征的深度学习评估 notebook 5. `FLAML DL MLP Combined XAI.ipynb` 6. `Stability Analysis.ipynb` ## 11. 研究产物与输出 复现研究会生成以下产物: - 数据集概览图表 - trace 来源图表 - t-SNE 可视化 - 选定特征摘要 - 混淆矩阵 - ROC 曲线 - 学习曲线 - 评估摘要文件 - 训练日志 - SHAP 解释 - LIME 仪表板和局部解释 - 稳定性分析图表和统计报告 ## 12. 关键发现:报告的最佳配置 实证研究中观察到的最强配置为: - **Combined traces** - **FLAML 特征选择** - **MLP 模型** 此配置也是可解释性阶段 (RQ5) 的研究对象。 ## 13. 有效性威胁与可复现性说明 由于硬件差异(例如 GPU 型号、CUDA 版本、CPU 架构、库),脚本输出在不同系统间可能会有微小差异。 观察到的差异通常很小(最多在 **0 ~ 1.25** 差异内),不会影响研究的整体结论。 出现这些差异是预期的,原因在于: - 浮点精度差异 - 非确定性 GPU 操作 - 后端/库实现差异 为了获得最佳的可复现性,请确保匹配以下内容: - Python 版本 - CUDA/cuDNN 版本 - 库依赖项(参见 `requirements.txt`) ## 14. 关于模型命名一致性的说明 在本仓库及相关论文中,正确的模型名称是 **MDCNN**(多维卷积神经网络)。由于拼写不一致,在部分分析代码和中间结果中可能会出现 **MCDCNN** 这个名称。 请注意 MCDCNN 是一个拼写错误,指代的是整个研究中使用的同一个 MDCNN 模型。所有标记为 MCDCNN 的结果都应解释为 MDCNN。 ## 15. 引用 如果您在研究中使用此复现包、数据集或结果,请引用: ``` @article{empidysec, title = {An Empirical Study of Deep Learning for Dynamic Behavioral Detection of Malicious Software Packages in the PyPI Ecosystem}, author = {Will be added}, year = {will be added} } ``` ## 16. 许可证 本项目根据 `LICENSE` 文件中指定的条款进行分发。
标签:CISA项目, Python, 动态行为分析, 可解释AI, 域名收集, 实证研究, 无后门, 深度学习, 系统调用监控, 逆向工具, 配置审计