ZhengXR930/MalEval
GitHub: ZhengXR930/MalEval
MalEval 是一个评估框架,用于系统衡量大型语言模型在 Android 恶意软件细粒度行为审计任务上的表现。
Stars: 5 | Forks: 1
# MalEval
MalEval 是一个用于评估由大型语言模型生成的 Android 恶意软件行为报告的框架。
此代码仓库中的代码实现了两种执行路径:
1. **从 APK**:对 APK 文件运行静态分析,以生成入口点、调用链、函数体和可达函数。
2. **从 artifact**:从预计算的静态分析输出开始,生成函数摘要、上下文中间表示、行为报告和评估指标。
已发布的数据集单独托管在 `https://huggingface.co/datasets/Xinzxr/MalEval`。
## 仓库布局
```
info/ Sample metadata for the benign, MalRadar, and new malware splits.
model_registry.yaml Model/provider configuration for LLM-based stages.
src/ Static analysis, summarization, behavior generation, and metrics code.
```
应对数据集进行解压,以便仓库具有以下布局:
```
MalEval/
|-- info/
|-- src/
`-- artifacts/
|-- apk/
|-- call_chain/
|-- entrypoints/
|-- functions/
|-- meta_info/
|-- reachable_func/
`-- reports/
```
## 环境
使用 Python 3.10 或更高版本。核心脚本需要用于 Android 静态分析和 LLM 调用的常用 Python 包,包括 `androguard`、`openai`、`pyyaml`、`tqdm`、`pandas` 和 `scikit-learn`。
在运行基于 LLM 的阶段之前,请在 `model_registry.yaml` 中配置模型提供商。每个模型条目可以存储字面值(例如 `api_key` 和 `base_url`),或环境变量引用(例如 `api_key_env` 和 `base_url_env`)。
示例:
```
models:
gpt:
provider: openai
model: gpt-5
api_key:
base_url: https://api.openai.com/v1
```
默认注册表包含 `gpt`、`gpt-5`、`qwen`、`deepseek`、`llama`、`coder`、`claude` 和 `gemini` 的条目。如果您倾向于使用环境变量,请设置 `model_registry.yaml` 引用的变量,例如 `OPENAI_API_KEY`、`DEEPSEEK_API_KEY`、`QWEN3_API_KEY`、`HUGGINGFACE_API_KEY`、`ANTHROPIC_API_KEY`、`GEMINI_API_KEY`、`GEMINI_PROJECT` 和 `GEMINI_LOCATION`。
## 从 APK
此路径从 `artifacts/apk//` 下的 APK 文件开始,并重新生成静态分析 artifact。split 必须是 `malradar`、`new` 或 `benign` 之一。
运行单个 APK:
```
sha=
python3 src/preparation/run_static_analysis.py \
--folder malradar \
--apk "$sha" \
--output-root results/static_analysis
```
运行一个小的抽样批次:
```
python3 src/preparation/run_static_analysis.py \
--folder malradar \
--sample-size 5 \
--seed 42 \
--output-root results/static_analysis
```
生成的文件将写入:
```
results/static_analysis/entrypoints/
results/static_analysis/call_chain/
results/static_analysis/functions/
results/static_analysis/reachable_func/
```
## 从 Artifact
此路径从已发布的 `artifacts/` 目录开始。它使用预计算的 `functions`、`call_chain`、`entrypoints`、`reachable_func` 和 `meta_info` 文件。
### 函数摘要
```
model=gpt
split=malradar
sha=
python3 src/preparation/get_functionality_summary.py --model "$model" --folder "$split" --apk "$sha"
```
省略 `--apk` 以运行整个 split。
### 上下文与无上下文摘要
```
python3 src/preparation/get_context_summary.py --model "$model" --folder "$split" --apk "$sha"
python3 src/preparation/get_no_context_summary.py --model "$model" --folder "$split" --apk "$sha"
```
### 行为报告
```
python3 src/generate_behavior/get_behavior.py --model "$model" --folder "$split" --flag context --apk "$sha"
python3 src/generate_behavior/get_behavior.py --model "$model" --folder "$split" --flag no_context --apk "$sha"
python3 src/generate_behavior/get_meta_behavior.py --model "$model" --folder "$split" --apk "$sha"
```
输出将写入 `results/summary/`、`results/context_summary/`、`results/no_context_summary/`、`results/behavior/`、`results/no_context_behavior/` 和 `results/meta_behavior/` 下。
## 指标
在生成摘要和行为报告之后,使用以下命令计算指标:
```
python3 src/metrics/run_metrics.py --model "$model" --flag context
python3 src/metrics/run_metrics.py --model "$model" --flag no_context
python3 src/metrics/run_metrics.py --model "$model" --flag meta
```
要跳过 judge 模型调用:
```
python3 src/metrics/run_metrics.py --model "$model" --flag context --skip-eas
```
还提供了单独的指标脚本:
```
python3 src/metrics/aec_b_f1.py --model "$model" --flag context
python3 src/metrics/fpcr_tpmr_f1c.py --model "$model" --flag context
python3 src/metrics/eas.py --model "$model" --flag context --split malradar --judge-model gpt-5
```
标签:AI安全, Android静态分析, Chat Copilot, DLL 劫持, LLM评测, Petitpotam, TruffleHog, 大语言模型, 学术论文, 恶意代码分类, 恶意软件评估, 逆向工具