
الكود الرسمي لورقة ISSTA 2026: هل "معرفة أنه ضار" كافية؟ تقييم LLMs للتدقيق الدقيق لسلوك البرمجيات الخبيثة
مقال: هل «معرفة أنه خبيث» كافٍ؟ تقييم نماذج اللغات الكبيرة للتدقيق الدقيق في سلوك البرمجيات الخبيثة
DOI المقال: 10.1145/3832187
MalEval هو إطار عمل لتقييم تقارير سلوك البرمجيات الخبيثة لنظام أندرويد المُولَّدة بواسطة نماذج اللغات الكبيرة. ينفّذ الكود الموجود في هذا المستودع مسارين للتنفيذ:
تستضاف مجموعة البيانات المنشورة بشكل منفصل في مستودع بيانات MalEval على Hugging Face.
يحتوي المعيار على 255 تطبيق أندرويد: 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/
استخدم بايثون 3.10 أو أحدث. نوصي بإنشاء بيئة افتراضية جديدة:
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install --upgrade pip
python3 -m pip install -r requirements.txt
قم بتكوين موفري النماذج في 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، و، و.
يسلك هذا المسار بدءًا من ملفات APK الموجودة تحت artifacts/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 لتشغيل التقسيم بالكامل.
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