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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
exrop — x86-64 바이너리를 위한 심볼릭 실행 기반 자동 ROP 체인 생성기. 지원: 레지스터/메모리 쓰기, 함수 호출, 시스템 콜, 배드캐릭터 회피, 스택 피봇팅, 및 retpoline 재작성을 통한 커널 모드. | Kitploit
도구/GitHubGitHub/d4em0n/exrop
Exploit FrameworksPayload GenerationReverse EngineeringCTFBinary Exploitation
GitHubd4em0n/exrop

exrop

x86-64 바이너리를 위한 심볼릭 실행 기반 자동 ROP 체인 생성기. 지원: 레지스터/메모리 쓰기, 함수 호출, 시스템 콜, 배드캐릭터 회피, 스택 피봇팅, 및 retpoline 재작성을 통한 커널 모드.

저장소 보기
309225개월 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Exrop

Triton 기호 실행을 기반으로 한 x86-64 바이너리용 자동 ROP 체인 생성기입니다.

특징

  • 레지스터를 상수나 다른 레지스터로 설정 (rdi=0x41414141, rdi=rax)
  • 메모리에 쓰기 (상수 및 레지스터 기반 주소/값)
  • 문자열/바이트를 메모리에 쓰기
  • 혼합된 상수/레지스터/문자열 인수를 사용한 함수 호출 (open("/etc/passwd", 0))
  • 시스템 콜 체인
  • Badchar 회피
  • Non-return 가젯 지원 (jmp reg, call reg)
  • 커널 익스플로잇을 위한 JOP 체인 검색을 통한 스택 피봇팅
  • 자동 retpoline thunk 재작성을 사용한 커널 모드
  • 위험한 부작용 메모리 쓰기가 있는 가젯을 걸러내는 clean-only 모드
  • 접미사 기반 구성: 이미 분석된 접미사로부터 구축된 다중 명령어 가젯
  • 진행 표시줄이 있는 다중 프로세스 가젯 분석
  • 빠른 재사용을 위한 가젯 캐싱 (pickle)

설치

pip (권장)

root@kitploit:~
pip install git+https://github.com/d4em0n/exrop.git

이 명령은 exrop와 그 Python 의존성(pyelftools, ROPGadget, triton-library)을 설치합니다.

참고: triton-library pip 패키지는 모든 플랫폼에서 작동하지 않을 수 있습니다. 설치가 실패하면 Triton을 소스에서 빌드하고 Triton 의존성 없이 exrop를 설치하세요:

root@kitploit:~
pip install --no-deps git+https://github.com/d4em0n/exrop.git
pip install pyelftools ROPGadget

개발용 (테스트 의존성을 포함한 편집 가능 설치):

root@kitploit:~
git clone https://github.com/d4em0n/exrop.git
cd exrop
pip install -e ".[dev]"

수동 설치

  1. Python 3.6+ 설치
  2. Triton 설치
  3. ROPGadget 설치
  4. 선택 사항: Keystone 설치 (테스트에만 필요)
  5. 이 저장소를 클론하고 Python 경로에 추가:
    root@kitploit:~
    git clone https://github.com/d4em0n/exrop.git
    export PYTHONPATH=/path/to/exrop:$PYTHONPATH
    

빠른 시작

root@kitploit:~
from Exrop import Exrop

rop = Exrop("/bin/ls")
rop.find_gadgets(cache=True)

# 레지스터 설정
chain = rop.set_regs({'rdi': 0x41414141, 'rsi': 0x42424242, 'rdx': 0x43434343})
chain.dump()

# 메모리에 쓰기
chain = rop.set_writes({0x41414141: 0xdeadbeefff, 0x43434343: 0x00110011})
chain.dump()

# 문자열을 메모리에 쓰기
chain = rop.set_string({0x41414141: "Hello world!\n"})
chain.dump()

# 함수 호출
chain = rop.func_call(0x41414141, (0x20, 0x30, "Hello"), 0x7fffff00)
chain.dump()

출력:

root@kitploit:~
$RSP+0x0000 : 0x00000000000060d0 # pop rbx; ret
$RSP+0x0008 : 0x0000000044444444
$RSP+0x0010 : 0x0000000000014852 # mov rax, rbx; pop rbx; ret
$RSP+0x0018 : 0x0000000000000000
$RSP+0x0020 : 0x0000000000004ce5 # pop rdi; ret
$RSP+0x0028 : 0x0000000041414141
$RSP+0x0030 : 0x000000000000629c # pop rsi; ret
$RSP+0x0038 : 0x0000000042424242
$RSP+0x0040 : 0x0000000000003a62 # pop rdx; ret
$RSP+0x0048 : 0x0000000043434343
$RSP+0x0050 : 0x00000000000060d0 # pop rbx; ret
$RSP+0x0058 : 0x0000000045454545

커널 모드

retpoline 완화가 적용된 Linux 커널의 경우, kernel_mode=True는 썽크 심볼을 자동으로 감지하고 가젯을 재작성하며 .text 섹션으로 제한합니다:

root@kitploit:~
from Exrop import Exrop

rop = Exrop("/path/to/vmlinux")
rop.find_gadgets(cache=True, kernel_mode=True)
rop.clean_only = True  # 위험한 부작용 쓰기가 있는 가젯 제외

# 레지스터 설정
chain = rop.set_regs({'rdi': 0x41414141, 'rsi': 0})
chain.dump()

# 피벗 가젯 찾기 (직접, JOP 체인, 간접)
pivots = rop.stack_pivot_reg('rdi')
for p in pivots[:5]:
    p.dump()

# 피벗을 위한 페이로드 구축
payload = pivots[0].build_payload(chain)

exkrop CLI

exkrop 명령은 피벗 선택 및 C 코드 출력을 포함한 커널 ROP 체인 생성을 위한 대화형 워크플로우를 제공합니다:

root@kitploit:~
exkrop <vmlinux>
# 또는: python3 -m exkrop <vmlinux>

특징: 익스플로잇 템플릿 (권한 상승, core_pattern 덮어쓰기), KASLR 상대적 출력, 피벗 가젯 브라우저, 예약된 오프셋 처리, C 코드 생성. 자세한 내용은 exkrop/README.md를 참조하세요.

사용자 공간 예제: open-read-write

root@kitploit:~
from pwn import *
from Exrop import Exrop

libc = ELF("/lib/x86_64-linux-gnu/libc.so.6", checksec=False)
rop = Exrop(libc.path)
rop.find_gadgets(cache=True)

bss = libc.bss()

chain = rop.func_call(libc.symbols['open'], ("/etc/passwd", 0), bss)
chain.set_base_addr(0x00007ffff79e4000)
chain.dump()

chain = rop.func_call(libc.symbols['read'], ('rax', bss, 0x100))
chain.set_base_addr(0x00007ffff79e4000)
chain.dump()

chain = rop.func_call(libc.symbols['write'], (1, bss, 0x100))
chain.set_base_addr(0x00007ffff79e4000)
chain.dump()

더 많은 예제는 examples/ 디렉토리에서 확인할 수 있습니다.

도구 다운로드