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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
LCSAJdump — ROP 가젯 탐지를 위한 ML 기반 그래프 기반 다중 아키텍처 접근법 | Kitploit
도구/GitHubGitHub/chris1sflaggin/lcsajdump
Static AnalysisExploitationReverse EngineeringShellcodeBinary AnalysisMachine LearningPapers & ResearchLearning & EducationPayload Development
GitHubchris1sflaggin/lcsajdump

LCSAJdump

ROP 가젯 탐지를 위한 ML 기반 그래프 기반 다중 아키텍처 접근법

2721개월 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기
웹사이트

LCSAJdump 로고

LCSAJdump

PyPI Downloads

자동화된 가젯 발견을 위한 범용 그래프 기반 프레임워크

Status License: MIT



LCSAJdump는 ROP(Return-Oriented Programming) 및 JOP(Jump-Oriented Programming) 가젯을 발견하기 위해 설계된 정적 분석 프레임워크입니다. 기존 스캐너와 달리 LCSAJdump는 아키텍처에 구애받지 않으며 그래프 기반 접근 방식을 사용하여 일반적인 선형 도구로는 보이지 않는 취약점을 찾아냅니다.


왜 LCSAJdump인가?

일반적인 ROP 스캐너는 바이너리의 실행 가능한 바이트에 대해 선형 "슬라이딩 윈도우" 방식을 사용합니다. 이 방법은 무조건 점프나 조건부 분기로 연결된 비연속 메모리 블록을 횡단하는 실행 체인인 섀도 가젯(Shadow Gadgets) 을 체계적으로 식별하지 못합니다.

LCSAJdump는 LCSAJ(Linear Code Sequence and Jump) 분석을 통해 제어 흐름 그래프(CFG) 를 재구성하여 이 한계를 극복합니다. 바이너리를 기본 블록의 방향 그래프로 모델링함으로써 다음을 식별합니다:

  1. 연속 가젯(Contiguous Gadgets): 제어 흐름 전송으로 끝나는 표준 선형 시퀀스.
  2. 섀도 가젯(Shadow Gadgets, 비연속): 선형 스캐닝으로는 도달할 수 없는 명령어를 사용하여 "나쁜 바이트"(예: null 바이트)를 우회하는 복잡한 체인.

주요 기능

  • 다중 아키텍처 지원: RISC-V(64GC), x86-64, ARM64 네이티브 지원, 모듈식 프로필을 통해 다른 아키텍처로 쉽게 확장 가능.
  • 그래프 기반 분석: .text 섹션을 LCSAJ 기본 블록으로 분할하고, 커스텀 역방향 제어 흐름 그래프(경량 인접 표현, 무거운 그래프 의존성 없음)를 통해 흐름 관계를 재구성.
  • Rainbow BFS 알고리즘: 제어 흐름 싱크에서 시작하는 독점적인 역방향 너비 우선 탐색. 이제 O(1) 조기 제거 고유성 필터와 하드캡 명령어 제한을 탑재하여 상태 폭발을 방지하고 밀집된 CISC 바이너리에서도 초고속 분석을 보장.
  • 지연 그래프 구축(Lazy Graph Build): 그래프 구축 시 --depth 홉 내에서 가젯 테일에서 도달 가능한 노드만 유지하여 대형 바이너리(예: libc)에서 메모리와 빌드 시간을 크게 줄이면서도 동일한 결과를 생성.
  • 2단계 랭킹 엔진: Optuna로 베이지안 최적화된 초고속 휴리스틱 기준선과 구조적 및 의미론적 특징을 사용하여 가젯 품질을 개선하는 딥러닝 LightGBM ML 모델을 결합.
  • 제로 오버헤드 추론: ML 모델이 네이티브로 통합되어 기본적으로 실행되며, 수만 개의 노드를 수 초 내에 처리. 노이즈가 많은 점프를 효과적으로 필터링하고 깨끗하고 제어 가능한 가젯 체인을 반환하는 고효율 필터 역할을 함. Hugging Face에서 호스팅.
  • 가지치기 매개변수: "어둠(Darkness)" 계수를 구성 가능하게 하여 분석 깊이와 성능의 균형을 맞추고 순환 그래프에서 무한 루프를 방지.

지원 아키텍처

(벤치마크 참조).

LCSAJdump는 범용적으로 설계되었습니다. 현재 지원:

  • RISC-V 64비트(RV64GC): 압축 16비트 명령어 완전 지원.
  • x86-64: 가변 길이 중첩 명령어 처리. 밀집된 그래프를 메모리 폭발 없이 안전하게 탐색.
  • ARM64: 32비트 명령어 처리 및 엄격한 휴리스틱 페널티를 통해 비대한 가젯을 깊이 필터링.
  • 기타 아키텍처: config.py에서 새 프로필을 정의하여 쉽게 구현 가능.

설치

Pip 사용 (권장)

root@kitploit:~
pip install lcsajdump

소스에서 설치 (개발)

root@kitploit:~
git clone [https://github.com/Chris1sFlaggin/LCSAJdump.git](https://github.com/Chris1sFlaggin/LCSAJdump.git)
cd LCSAJdump
pip install -r requirements.txt


사용법

LCSAJdump는 정밀한 바이너리 분석을 위한 강력한 CLI를 제공합니다:

표준 분석 (기본 RISC-V):

root@kitploit:~
python LCSAJdump.py <path_to_binary>

고급 분석 (아키텍처 및 출력 파일 지정):

root@kitploit:~
lcsajdump -a riscv64 -d 15 -k 10 -l 20 -o gadgets.txt <path_to_binary>

나쁜 문자 필터와 함께 JSON으로 내보내기:

root@kitploit:~
lcsajdump -a x86_64 -d 20 -k 5 -b "000a0d" --json -o gadgets.json <path_to_binary>

참고: JSON을 파일로 저장하려면 --json 뒤에 -o를 사용하세요. --json이 없으면 -o는 일반 텍스트를 저장합니다.

일반 텍스트 출력 저장:

root@kitploit:~
lcsajdump -a riscv64 -d 15 -k 10 -l 20 -o gadgets.txt <path_to_binary>

모든 실행 가능 섹션 분석:

root@kitploit:~
lcsajdump --all-exec -d 25 -k 10 -l 30 <path_to_binary>

엄격히 알고리즘 랭킹 사용 (ML 우회):

root@kitploit:~
lcsajdump --algo <path_to_binary>

CLI 옵션



정확도 및 벤치마크

LCSAJdump는 benchmarkTests/ 디렉토리에 위치한 엄격하고 점진적으로 검증된 테스트 스위트로 뒷받침됩니다.

14번의 주요 의미론적 특성 엔지니어링 반복을 통해 하이브리드 모델은 순수 구문론적 휴리스틱이 아닌 실제 메모리 부작용(angr 기호 실행을 통해 추출)을 기반으로 가젯을 판별하는 방법을 학습했습니다.

그룹 인식 5겹 교차 검증(훈련 중 본 적 없는 테스트 바이너리)으로 평가된 랭커는 NDCG@1 = 0.914 ± 0.047 및 NDCG@10 = 0.922 ± 0.052를 달성하여, 가장 유용한 가젯이 출력 상단에 일관되게 배치됨을 의미합니다. 2단계 엔진은 깨끗한 스택 팝 시퀀스와 ret2csu 유형 호출을 성공적으로 우선시하면서, 기존 정적 스캐너를 속이는 충돌-prone 고정 오프셋 점프에는 높은 페널티를 부과합니다.


개발자 및 ML 가이드

리포지토리는 최종 사용자와 ML 연구자 모두를 지원하도록 구성되어 있습니다.

  • 프로덕션 엔진: 핵심 CLI는 Hugging Face에 호스팅된 모델을 사용하는 추론 엔진을 원활히 통합하므로 수동 모델 로딩이 필요하지 않습니다.
  • ML 파이프라인: lcsajdump/ml_study/ 디렉토리에는 모델 훈련에 사용된 전체 파이프라인이 포함되어 있습니다:
    • build_dataset.py: CTF 바이너리 모음에서 구조적 및 의미론적 특성을 추출합니다.
    • train_model.py: LightGBM LambdaRank 모델을 훈련하고 .pkl 모델을 출력합니다.
    • kfold_cv.py: K-겹 교차 검증을 사용하여 데이터셋을 검증합니다.

기여 (포크 환영!)

프레임워크는 새로운 구현에 열려 있습니다. 새 아키텍처를 추가하려면:

  1. 리포지토리를 포크 하세요.
  2. lcsajdump/core/config.py를 엽니다.
  3. ARCH_PROFILES 사전에 새 프로필을 추가하여, 원하는 아키텍처(예: x86_64)에 대한 점프 니모닉, 리턴 니모닉 및 레지스터를 정의합니다.
  4. 풀 리퀘스트를 제출하세요.

라이선스

이 프로젝트는 MIT 라이선스로 배포됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.


프로젝트 링크

프로젝트 웹 페이지 방문: LCSAJdump 웹 페이지


Chris1sflaggin이 자동화된 가젯 발견을 위한 연구 프로젝트로 제작했습니다.
도구 다운로드
플래그유형기본값설명
-a, --archTEXTauto대상 아키텍처 (auto, riscv64, x86_64, arm64). ELF 헤더에서 자동 감지.
-d, --depthINTEGER20LCSAJ 블록 내 최대 검색 깊이. 체인 길이 제어.
-k, --darknessINTEGER5가지치기 임계값 — 노드당 최대 방문 횟수. 높을수록 더 많은 가젯, 느린 스캔.
-l, --limitINTEGER10출력에 표시할 최대 가젯 수.
-s, --min-scoreINTEGER0결과에 나타나기 위한 최소 휴리스틱 점수.
-i, --instructionsINTEGER15단일 LCSAJ 노드에 포함된 최대 명령어 수.
-v, --verboseFLAG—상세 출력 활성화 (가젯별 세부 결과).
-o, --outputPATH—출력을 파일로 저장. 기본값은 일반 텍스트; JSON 출력을 위해 --json과 함께 사용.
-b, --bad-charsTEXT—가젯 주소에서 필터링할 16진수 바이트 (예: "000a0d").
--jsonFLAG—가젯을 구조화된 JSON으로 출력. -o와 결합하여 파일에 저장.
--all-execFLAG—.text뿐만 아니라 모든 실행 가능 섹션 분석.
-al, --algoFLAG—엄격히 알고리즘 랭킹 사용 (ML 우회).
--versionFLAG—설치된 버전 표시 후 종료.
--helpFLAG—도움말 메시지 표시 후 종료.