Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
MalEval — ISSTA 2026 논문의 공식 코드: "악성임을 아는 것"으로 충분한가? 정밀한 악성코드 행동 감사를 위한 LLM 평가 | Kitploit
도구/GitHubGitHub/zhengxr930/maleval
Android SecurityStatic AnalysisCode AnalysisMalware AnalysisMachine LearningPapers & ResearchLearning & EducationAI Security
GitHubzhengxr930/maleval

MalEval

ISSTA 2026 논문의 공식 코드: "악성임을 아는 것"으로 충분한가? 정밀한 악성코드 행동 감사를 위한 LLM 평가

저장소 보기
51212개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

MalEval

기사: “악성 여부를 아는 것만으로 충분한가? 정밀한 악성코드 동작 감사를 위한 LLM 평가”

기사 DOI: 10.1145/3832187

MalEval은 대규모 언어 모델(LLM)이 생성한 Android 악성코드 동작 보고서를 평가하기 위한 프레임워크입니다. 이 저장소의 코드는 두 가지 실행 경로를 구현합니다:

  1. APK에서: APK 파일에 대해 정적 분석을 실행하여 진입점(entry points), 호출 체인(call chains), 함수 본문(function bodies), 도달 가능 함수(reachable functions)를 생성합니다.
  2. 아티팩트에서: 사전 계산된 정적 분석 출력에서 시작하여 함수 요약, 컨텍스트 중간 표현(context-intermediate representation), 동작 보고서, 평가 지표를 생성합니다.

릴리스된 데이터셋은 별도로 MalEval Hugging Face 데이터셋 저장소에 호스팅되어 있습니다.

벤치마크에는 255개의 Android 애플리케이션이 포함되어 있습니다: 보관된 악성코드 샘플 200개, 최신 악성코드 샘플 30개, 그리고 시뮬레이션된 오탐(false positive)으로 사용되는 정상 애플리케이션 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, GEMINI_PROJECT, GEMINI_LOCATION을 설정하세요.

APK에서

이 경로는 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"

전체 split을 실행하려면 --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

판정 모델(judge-model) 호출을 건너뛰려면:

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

재현 가능성 범위

  • 릴리스된 보고서에 대한 지표 계산은 로컬 모델 추론 하드웨어를 필요로 하지 않습니다.
  • LLM 출력을 재생성하려면 해당 API 자격 증명 또는 호환 가능한 자체 호스팅 엔드포인트가 필요합니다.
  • 정적 분석과 APK의 모든 처리는 격리된 연구 환경에서 수행해야 합니다. 개인용 또는 프로덕션 기기에서 릴리스된 샘플을 설치하거나 실행하지 마세요.
  • 정확한 수치 재현은 호스팅된 모델 엔드포인트의 변경에 영향을 받을 수 있습니다. 릴리스된 보고서는 논문에서 사용된 출력을 그대로 보존합니다.
도구 다운로드