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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
patching — IDA Pro용 대화형 바이너리 패치 플러그인 | Kitploit
도구/GitHubGitHub/gaasedelen/patching
Static AnalysisDynamic Code Analysis (DAST)ExploitationReverse EngineeringShellcodeDebuggersMalware AnalysisBinary AnalysisLearning & EducationPayload DevelopmentBinary Exploitation
1.3k14991년 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
GitHub
gaasedelen/patching

patching

IDA Pro용 대화형 바이너리 패치 플러그인

저장소 보기

Patching - IDA Pro를 위한 대화형 바이너리 패칭

Patching Plugin

개요

기존 프로그램의 동작을 변경하기 위해 어셈블리 코드를 패칭하는 것은 악성코드 분석, 소프트웨어 리버스 엔지니어링 및 보안 연구의 더 넓은 영역에서 드문 일이 아닙니다. 이 프로젝트는 인기 있는 IDA Pro 디스어셈블러를 확장하여 빠른 반복을 위해 설계된 보다 강력한 대화형 바이너리 패칭 워크플로우를 만듭니다.

이 프로젝트는 현재 널리 사용되는 Keystone Engine의 작은 포크를 기반으로 하며, x86/x64 및 Arm/Arm64 패칭을 지원하고 향후 릴리스에서 나머지 Keystone 아키텍처를 활성화할 계획입니다.

이 플러그인 개발을 지원해 주신 Hex-Rays에 특별히 감사드립니다.

릴리스

  • v0.2 -- 중요한 버그 수정, IDA 9 호환성
  • v0.1 -- 초기 릴리스

설치

이 플러그인은 IDA 7.6과 Python 3이 필요합니다. Windows, Linux, macOS를 지원합니다.

이전 버전의 IDA(8.2 이하)는 Python 3.11 이상과 호환되지 않습니다 .

간편 설치

IDA 콘솔에서 다음 줄을 실행하여 플러그인을 자동으로 설치하세요:

Windows / Linux

root@kitploit:~
import urllib.request as r; exec(r.urlopen('https://github.com/gaasedelen/patching/raw/main/install.py').read())

macOS

root@kitploit:~
import urllib.request as r; exec(r.urlopen('https://github.com/gaasedelen/patching/raw/main/install.py', cafile='/etc/ssl/cert.pem').read())

수동 설치

또는 릴리스 페이지에서 해당 플랫폼용 배포 가능한 플러그인 패키지를 다운로드하고 플러그인 폴더에 압축을 풀어 수동으로 설치할 수 있습니다.

이 플러그인을 IDA의 사용자 플러그인 디렉토리에 설치하는 것을 강력히 권장합니다:

root@kitploit:~
import ida_diskio, os; print(os.path.join(ida_diskio.get_user_idadir(), "plugins"))

사용법

패칭 플러그인은 지원되는 아키텍처(x86/x64/Arm/Arm64)에 대해 자동으로 로드되며, IDA 디스어셈블리 뷰의 오른쪽 클릭 컨텍스트 메뉴에 관련 패칭 작업을 삽입합니다:

Patching plugin right click context menu

컨텍스트별 패칭 작업의 전체 목록은 다음 섹션에서 설명합니다.

어셈블

오른쪽 클릭 컨텍스트 메뉴의 'Assemble' 작업을 통해 기본 패칭 대화 상자를 열 수 있습니다. 이 대화 상자는 기본 IDA 디스어셈블리 뷰를 시뮬레이션하여 여러 명령어를 빠르게 연속해서 편집하는 데 사용할 수 있습니다.

The interactive patching dialog

어셈블리 라인은 실시간으로 명령어를 수정하는 데 사용할 수 있는 편집 가능한 필드입니다. Enter 키를 누르면 입력된 명령어가 커밋(패치)되어 데이터베이스에 저장됩니다.

현재 위치(즉, 커서)는 항상 녹색으로 강조 표시됩니다. 패치/편집 결과 덮어쓰여질 명령어는 패치를 커밋하기 전에 빨간색으로 강조 표시됩니다.

Additional instructions that will be clobbered by a patch show up as red

마지막으로, 편집 가능한 어셈블리 텍스트 필드에 포커스가 있는 상태에서 UP 및 DOWN 화살표 키를 사용하여 마우스를 사용하지 않고도 디스어셈블리 뷰에서 커서를 빠르게 위아래로 이동할 수 있습니다.

NOP

가장 일반적인 패칭 작업은 하나 이상의 명령어를 NOP 처리하는 것입니다. 이러한 이유로 NOP 작업은 빠른 액세스를 위해 항상 오른쪽 클릭 메뉴에 표시됩니다.

Right click NOP instruction

개별 명령어뿐만 아니라 선택한 범위의 명령어도 NOP 처리할 수 있습니다.

조건부 점프 강제 실행

조건부 점프가 항상 '좋은' 경로를 실행하도록 강제하는 것도 또 다른 일반적인 패칭 작업입니다. 플러그인은 조건부 점프 명령어를 오른쪽 클릭할 때만 이 작업을 표시합니다.

Forcing a conditional jump

조건부 점프를 절대 수행하지 않게 하려면 대신 NOP 처리하면 됩니다!

저장 및 빠른 적용

패치는 언제든지 패칭 서브메뉴를 통해 선택한 실행 파일에 저장(적용)할 수 있습니다. 빠른 적용 작업은 동일한 설정을 사용하여 후속 패치를 훨씬 더 빠르게 저장할 수 있도록 합니다.

Applying patches to the original executable

플러그인은 또한 저장할 때마다 현재 데이터베이스 패치 세트를 '깔끔하게' 적용하는 데 사용하는 원본 실행 파일의 백업(.bak)을 적극적으로 유지합니다.

패치 되돌리기

마지막으로, 패치가 마음에 들지 않으면 패치된(노란색) 명령어 블록을 오른쪽 클릭하여 원래 값으로 되돌릴 수 있습니다.

Reverting patches

바이트를 원래 값으로 되돌리는 것은 '쉽지만', 분석을 이전 상태로 복원하는 것은 '어려울' 수 있습니다. 패치를 되돌리면 때때로 추가적인 수동 수정이 필요할 수 있습니다.

알려진 버그

  • ARM / ARM64 / THUMB 정확성 추가 개선
  • cpp::like::symbols(...) / IDB에 대한 '더 나은' 동작 정의(현재 매우 불안정함)
  • 재배치 항목 추가 / 업데이트 / 수정 / 표시 / 경고 처리?
  • 이름이 변경된 레지스터(dwarf 주석이 있는 idb 등) 처리?
  • 많은 새로운 명령어(2017년 이후)는 Keystone에서 지원되지 않음
  • Keystone의 몇 가지 문제가 있는 명령어 인코딩

향후 작업

시간과 동기가 허락된다면, 향후 작업에는 다음이 포함될 수 있습니다:

  • Keystone이 지원하는 나머지 주요 아키텍처 활성화:
    • PPC32 / PPC64 / MIPS32 / MIPS64 / SPARC / SystemZ
  • 다중 명령어 어셈블리 (예: xor eax, eax; ret;)
  • 여러 줄 어셈블리 (예: 셸코드 / asm 레이블)
  • 대화형 바이트 / 데이터 / 문자열 편집
  • 기호 힌트 / 자동 완성 / 퍼지 매칭
  • 편집 가능한 어셈블리 라인의 구문 강조
  • 오류, 구문 문제 등에 대한 더 나은 힌트
  • Hex-Rays 뷰에서 NOP / 점프 강제 실행 (쉬워 보이지만 아마 꽤 어려울 것입니다!)
  • '예쁜 출력' 모드와 '원시' 모드 간의 라디오 버튼 토글? 아니면 둘 다 표시?
    root@kitploit:~
    Pretty:  mov     [rsp+48h+dwCreationDisposition], 3
       Raw:  mov     [rsp+20h], 3
    

외부 기여, 이슈 및 기능 요청을 환영합니다. 풀 리퀘스트는 향후 릴리스에서 고려되길 원하신다면 이 저장소의 develop 브랜치로 보내주시기 바랍니다.

저자

  • Markus Gaasedelen (@gaasedelen)
도구 다운로드