Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
grap — Capstone 기반 디스어셈블러를 사용하여 사용자 정의 그래프 패턴을 정의하고 바이너리 제어 흐름 그래프와 매칭합니다. CLI, Python 바인딩 및 IDA 플러그인을 지원합니다. | Kitploit
도구/GitHubGitHub/quosecgmbh/grap
Static AnalysisReverse EngineeringDebuggersMalware AnalysisBinary Analysis
GitHubquosecgmbh/grap

grap

Capstone 기반 디스어셈블러를 사용하여 사용자 정의 그래프 패턴을 정의하고 바이너리 제어 흐름 그래프와 매칭합니다. CLI, Python 바인딩 및 IDA 플러그인을 지원합니다.

저장소 보기
155114년 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

grap: 바이너리 내에서 그래프 패턴을 정의하고 매칭하는 도구

https://github.com/QuoSecGmbH/grap

grap는 패턴과 바이너리 파일을 입력받아, Casptone 기반 디스어셈블러를 사용하여 바이너리에서 제어 흐름 그래프를 얻은 후, 패턴을 이에 매칭합니다.

패턴은 사용자 정의 그래프로, 명령어 조건("opcode is xor and arg1 is eax")과 반복 조건(3개의 동일한 명령어, 기본 블록 등)으로 구성됩니다.

grap는 디스어셈블러와 Python 바인딩을 갖춘 독립 실행형 도구, 그리고 IDA 및 리버서가 수행한 디스어셈블리를 활용하는 IDA 플러그인으로 사용할 수 있습니다.

지원:

  • 파일: PE, ELF 및 원시 바이너리 디스어셈블, 추가 파일은 IDA 내에서 작동해야 함
  • 아키텍처: x86 및 x86_64

빠른 패턴 매치:

빠른 패턴 매치

전체 패턴 매치:

전체 패턴 매치

여러 파일에 대한 매치:

여러 파일에 대한 매치

IDA에서 대화형으로 패턴 생성:

IDA에서 직접 패턴 생성 및 매치

설치

이 문서는 Linux 배포판에서 grap를 빌드하고 설치하는 방법을 설명합니다.

다음 문서도 참조하세요:

  • WINDOWS.md: Windows에 grap 설치
  • IDA.md: IDA 플러그인의 설치 및 사용법

요구 사항

컴파일러(build-essential) 외에도 다음 의존성이 설치되어야 합니다:

  • cmake
  • bison
  • flex
  • libboost-regex-dev
  • libboost-system-dev
  • libboost-filesystem-dev
  • libseccomp-dev
  • python3-dev
  • python3-pefile
  • python3-pyelftools
  • python3-capstone
  • swig (버전 3 이상 필수)

따라서 Ubuntu/Debian에서는 다음 명령이 작동합니다:

root@kitploit:~
sudo apt-get install build-essential cmake bison flex libboost-regex-dev libboost-system-dev libboost-filesystem-dev libseccomp-dev python3-dev python3-pefile python3-pyelftools python3-capstone swig

해당 패키지는 최신 Ubuntu LTS (18.04.3)에서 테스트되었습니다. 패키지는 배포판에 따라 다를 수 있습니다.

빌드 및 설치

다음 명령으로 프로젝트를 빌드하고 설치합니다:

  • mkdir build; cd build/ - 전용 디렉토리에서 프로젝트를 빌드하는 것을 권장합니다.
  • cmake ../src/; make - cmake와 make로 빌드합니다.
  • sudo make install - grap를 /usr/local/bin/에 설치합니다.

SWIG가 python3을 찾지 못하는 경우 기본 Python 버전이 python2라면, python3을 기본으로 전환하여 해결할 수 있습니다. 예를 들어 Ubuntu에서는:

root@kitploit:~
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10

사용법

다음 명령을 사용하여 도구를 실행할 수 있습니다:

$ grap [options] pattern test_paths

지원되는 옵션의 몇 가지 예는 다음과 같습니다:

  • grap -h: 지원되는 옵션을 설명합니다.

grap가 문자열에서 패턴을 추론하도록 할 수 있습니다. 소수의 옵션만 지원되지만 프로토타이핑에 유용합니다:

  • grap "opcode is xor and arg1 contains '['" (test.exe): 메모리 쓰기가 있는 xor를 찾습니다.
  • grap -v "sub->xor->sub" (test.exe): -v는 추론된 패턴의 경로를 출력합니다.

바이너리 디스어셈블 방법 선택:

  • grap -od (pattern.grapp) samples/*: samples/ 폴더의 파일을 매칭 시도 없이 디스어셈블합니다.
  • grap -f (pattern.grapp) (test.exe): 바이너리를 강제로 다시 디스어셈블한 후 pattern.grapp와 매칭합니다.
  • grap --raw (pattern.grapp) (test.bin): 원시 파일 디스어셈블 (64비트 바이너리는 --raw-64 사용)

출력의 상세 수준 제어:

  • grap -q -sa (pattern.grapp) (samples/*.grapcfg): 디스어셈블된 파일을 매칭하고, 매칭 및 비매칭 파일을 한 줄에 하나씩 표시합니다.
  • grap -m (pattern.grapp) (test.grapcfg): 모든 매칭된 노드를 표시합니다.

디스어셈블된 파일(.grapcfg)이 저장될 위치를 선택하고, 여러 파일을 여러 패턴에 대해 매칭합니다:

  • grap patterns/basic_block_loop.grapp -o ls.grapcfg /bin/ls: ls를 ls.grapcfg로 디스어셈블하고 기본 블록 루프를 찾습니다.
  • grap (pattern1.grapp) -p (pattern2.grapp) (test.exe): 여러 패턴 파일에 대해 매칭합니다.
  • grap -r -q patterns/ /bin/ -o /tmp/: /bin/의 모든 파일을 /tmp/로 디스어셈블하고 patterns/의 모든 .grapp 패턴과 매칭합니다 (재귀 옵션 -r은 패턴이 아닌 /bin/에 적용됩니다).

패턴 예제

다음 패턴은 Backspace 샘플에서 발견된 xor 다음 sub로 구성된 복호화 루프를 감지합니다:

root@kitploit:~
digraph decryption_md5_4ee00c46da143ba70f7e6270960823be {
A [cond=true, repeat=3]
B [cond="opcode is xor and arg2 is 0x11"]
C [cond="opcode is sub and arg2 is 0x25"]
D [cond=true, repeat=3]
E [cond="opcode beginswith j and nchildren == 2"]

A -> B
B -> C
C -> D
D -> E
E -> A [childnumber=2]
}

패턴 파일에는 여러 패턴 그래프가 포함될 수 있습니다.

두 디렉토리에서 추가 패턴 예제를 찾을 수 있습니다:

  • patterns/에는 짧은 루프를 감지하거나 기본 블록 루프를 감지하는 패턴 등 모든 바이너리에 유용할 수 있는 몇 가지 패턴이 포함되어 있습니다.
  • examples/에는 Backspace 악성코드에 사용된 패턴이 포함되어 있습니다 (바이너리 샘플을 얻으려면 examples/backspace_samples.md를 참조하세요).

튜토리얼 및 추가 예제

악성코드 샘플에 대해:

  • grap로 악성코드 샘플 탐색 (CLI, IDA): https://yaps8.github.io/blog/grap_qakbot_navigation
  • 함수 파싱 및 복호화 자동화 (Python 바인딩): https://yaps8.github.io/blog/grap_qakbot_strings

Python 바인딩 사용법:

  • Backspace 샘플 분석을 위해 바인딩을 사용하는 방법을 보여주는 Python 파일: examples/analyze_backspace.py
  • IDApython 스크립팅 예제는 IDA 플러그인에 통합되어 있으며, 여기서 확인할 수 있습니다: https://yaps8.github.io/grap/html/scripting_css.html

문서

doc/ 폴더에서 더 많은 문서를 찾을 수 있습니다:

  • doc/COMPILE_OPTIONS.md
  • doc/DEBUG.md
  • doc/TESTS.md
  • doc/syntax_highlighting.md

패턴 및 테스트 그래프의 구문은 릴리스 섹션의 grap_graphs.pdf 파일에 자세히 설명되어 있습니다.

라이선스

grap는 MIT 라이선스에 따라 라이선스가 부여됩니다. 전체 라이선스 텍스트는 LICENSE에서 확인할 수 있습니다.

도구 다운로드