文章: 「知道它是恶意的」就够了吗?评估 LLM 进行细粒度恶意软件行为审计
文章 DOI: 10.1145/3832187
MalEval 是一个用于评估由大型语言模型生成的 Android 恶意软件行为报告的框架。本仓库中的代码实现了两条执行路径:
发布的数据集单独托管在 MalEval Hugging Face 数据集仓库 中。
该基准包含 255 个 Android 应用:200 个已存档的恶意软件样本、30 个近期恶意软件样本,以及 25 个用作模拟误报的良性应用。有关发布的文件、来源、权利和安全处理说明,请参阅 DATA.md。
info/ Sample metadata for the benign, MalRadar, and new malware splits.
model_registry.yaml Model/provider configuration for LLM-based stages.
DATA.md Dataset composition, provenance, and access instructions.
LICENSE.txt License scope and third-party-material exclusions.
CITATION.cff Machine-readable citation metadata.
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 或更高版本。我们建议使用全新的虚拟环境:
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install --upgrade pip
python3 -m pip install -r requirements.txt
在运行基于 LLM 的阶段之前,请在 model_registry.yaml 中配置模型提供商。每个模型条目既可以存储字面值(如 api_key 和 base_url),也可以存储环境变量引用(如 api_key_env 和 base_url_env)。
示例:
models:
gpt:
provider: openai
model: gpt-5
api_key: <your_openai_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、 和 。
该路径从 artifacts/apk/<split>/ 下的 APK 文件开始,重新生成静态分析产物。split 必须是 malradar、new 或 benign 之一。
运行单个 APK:
sha=<apk_sha256>
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/
该路径从发布的 artifacts/ 目录开始,使用预先计算好的 functions、call_chain、entrypoints、reachable_func 和 meta_info 文件。
model=gpt
split=malradar
sha=<apk_sha256>
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
要跳过评判模型调用:
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
无需下载 APK 或配置模型凭据即可检查源代码树:
python3 -m compileall -q src
python3 - <<'PY'
import json
from pathlib import Path
expected = {
"archived_sample_info.json": 200,
"latest_sample_info.json": 30,
"benign_sample_info.json": 25,
}
for name, count in expected.items():
actual = len(json.loads((Path("info") / name).read_text()))
assert actual == count, (name, actual, count)
print("metadata check passed: 200 archived malware + 30 recent malware + 25 benign")
PY
GEMINI_PROJECTGEMINI_LOCATION