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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
GhidraEmu — Native Pcode emulator | Kitploit
도구/GitHubGitHub/nalen98/ghidraemu
Dynamic Code Analysis (DAST)Reverse EngineeringDebuggersBinary Analysis
GitHubnalen98/ghidraemu

GhidraEmu

Native Pcode emulator

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

GhidraEmu



이 실험적인 Ghidra 플러그인을 사용하면 네이티브 pcode 에뮬레이션을 쉽게 처리할 수 있습니다. 더 이상 스크립트가 필요하지 않으며 Ghidra에서 직접 사용하면 됩니다. 특히 일반적인 에뮬레이터에서 지원되지 않는 다양한 이국적인 프로세서를 다룰 때 유용할 수 있습니다.

프로세서/VM이 리버스 엔지니어링용으로 Ghidra에서 지원된다면 에뮬레이션할 수 있습니다! 예를 들어, 아래에서 eBPF 명령어 에뮬레이션을 확인할 수 있습니다:

GhidraEmu

할 수 있는 일

본질적으로 이 플러그인은 ghidra.app.emulator 패키지 내부의 클래스들을 확장한 래퍼입니다. 구현된 기능은 다음과 같습니다:

  • Ghidra가 지원하는 모든 아키텍처에서 작동하므로 이국적인 프로세서를 추가하고 에뮬레이션할 수 있습니다
  • CPU 컨텍스트, 스택 및 힙 에뮬레이션
  • Ghidra GUI를 통해 패치된 바이트를 적용하여 에뮬레이션 흐름을 변경
  • 에뮬레이션 프로세스를 제어하는 중단점
  • 에뮬레이션 중 변경된 바이트를 ByteViewer에 표시
  • 일부 libc 함수 후킹 (아직 빈약하지만)

PCode 에뮬레이션이 이상적으로는 통합을 의미하지만, 대부분의 프로세서는 각자 고유한 접근 방식이 필요합니다. 발생하는 모든 문제를 자유롭게 보고해 주세요. 모든 프로세서를 테스트하고 싶지만 현실적으로 어렵습니다.

할 수 없는 일

  • 외부 라이브러리 함수 내부로 스테핑 (EmulatorHelper 제한)
  • 시스템 콜 에뮬레이션

모든 플러그인 창 모음

GhidraEmu

기능

메뉴 창

모든 플러그인 창을 포함합니다: 스택 뷰, 레지스터, 중단점 뷰, 메인 창.

GhidraEmu 메뉴

팝업 창

에뮬레이션 시작 및 종료 설정, 중단점 설정, 변경된 바이트를 에뮬레이터 상태에 적용하는 단축키가 포함되어 있습니다.

레지스터 뷰

원하는 대로 레지스터를 변경하세요. 링크 레지스터(녹색 화살표)를 설정하면 에뮬레이터가 어떤 레지스터에 반환 주소가 있는지 이해하는 데 도움이 됩니다. 이 플러그인은 스택, lr 레지스터, AARCH64 및 MIPS 레지스터를 통해 작동하는 방식을 알고 있습니다. 이국적인 레지스터를 사용한다면 링크 레지스터를 선택하고 버튼을 누르세요.

스택 뷰

CodeBrowser에서 프로그램을 열면 GhidraEmu가 스택 공간을 자동으로 매핑합니다. 스택 포인터는 스택 범위의 중간에 설정됩니다. 이를 통해 스택 프레임의 상단이나 하단에 값을 설정할 수 있습니다. 업데이트나 리셋 중 멈춤 현상이 발생하면 스크롤하세요. 에뮬레이션 과정에서 프로그램이 더 많은 스택 공간을 필요로 하면 플러그인이 자동으로 할당합니다.

중단점 뷰

RAM 뷰

에뮬레이션 중 바이트가 변경되면 클래식 ByteViewer에서 확인할 수 있습니다. 걱정하지 마세요. "Reset" 버튼을 누르면 원래 값으로 복원됩니다.

패치된 바이트 적용

변경 사항이 있다면 에뮬레이터에 변경된 바이트를 알려주세요 (스택은 자동으로 업데이트되므로 필요 없습니다). 변경한 후 해당 바이트를 선택하고(녹색으로 표시됨) 이 옵션을 누르거나(또는 "M" 단축키 사용) 적용하세요.

GhidraEmu 패치된 바이트 적용

콘솔

여기에 플러그인이 출력 정보를 표시합니다. 예를 들어, 다음과 같은 에뮬레이션 오류 메시지가 표시됩니다:

GhidraEmu 콘솔

새로운 기능 - Jump Over

"Jump Over" 기능을 사용하면 어떤 이유로든 현재 명령어를 에뮬레이션하고 싶지 않을 때 한 명령어 앞으로 건너뛸 수 있습니다. 초기화되지 않은 메모리를 읽으려는 시도가 감지되면 에뮬레이션 프로세스가 중단되므로, 이 기능을 사용하면 그 문제를 우회할 수 있습니다. 예를 하나 보겠습니다. 많은 x86_64 프로그램의 첫 번째 명령어 중 하나인 카나리아 스택 저장입니다:

MOV RAX, qword ptr FS:[0x28]

PC 값을 증가시켜 이 명령어를 살짝 건너뛰는 방법을 시도해 보겠습니다. 이렇게 하려면 에뮬레이션하고 싶지 않은 명령어에서 멈춘 다음 J 단축키를 누르세요. 그렇지 않으면 계속 스테핑할 때 초기화되지 않은 메모리 읽기 오류가 발생합니다.

Jump Over

새로운 기능 - Step Over

서브루틴(내부 호출)으로 이어지는 명령어에서 멈췄고 다음 명령어까지 모든 것을 에뮬레이션하려는 경우(클래식 "step over"), F6 단축키를 누르면 확실히 실행됩니다:

Step Over

시작하기 전에

고려해야 할 몇 가지 중요한 사항:

  • Ghidra에서 프로그램을 분석하는 것을 잊지 마세요. 에뮬레이터가 이에 의존합니다.
  • 이미 언급했듯이 이국적인 프로세서/VM을 사용하는 경우 링크 레지스터를 설정하세요.
  • 바이너리의 프로세서가 사양에 따라 특정 메모리 세그먼트를 필요로 한다면 Ghidra MemoryMap 창에서 해당 세그먼트를 만들고 0으로 초기화하는 것을 잊지 마세요. 그렇지 않으면 에뮬레이터가 읽기/쓰기 작업 중 알 수 없는 메모리 공간에 대해 오류를 표시하고 에뮬레이션 프로세스를 중지합니다. 메모리 블록이 존재하지만 0으로 초기화되지 않았고 에뮬레이터가 필요로 하는 경우, 플러그인은 에뮬레이션이 계속되도록 초기화하려고 시도합니다.
  • ByteViewer를 통해 바이트를 변경한 경우, 플러그인은 에뮬레이션 상태를 리셋할 때 해당 바이트를 원래 값으로 복원하지 않습니다.
  • Ghidra에서 프로젝트를 닫기 전에 "Reset" 버튼을 누르고 마지막 에뮬레이션 상태를 아직 리셋하지 않았다면 리셋해야 합니다. 닫는 순간 Listing에서 추적된 명령어를 다시 그리는 트랜잭션과 에뮬레이션 후 프로그램 바이트를 복원하는 트랜잭션이 실행되지 않기 때문에 이는 중요합니다. 이로 인해 가장 가벼운 문제인 "오래된 노란 앵무새"가 보일 뿐만 아니라, 수정된 바이트가 원래 값으로 돌아가지 않고 그대로 남을 수도 있습니다 (물론 Ghidra에서 프로젝트를 롤백하지 않는 한).

설치

  1. gradle을 사용하여 확장 프로그램을 빌드하세요: GHIDRA_INSTALL_DIR=${GHIDRA_HOME} gradle 그런 다음 Ghidra를 사용하여 설치하세요: File → Install Extensions...

  2. CodeBrowser에서 File → Configure → Miscellaneous로 이동하여 GhidraEmu 플러그인 확인란을 선택하세요.

피드백

플러그인을 사용하면서 버그를 발견했거나 개선 아이디어가 있으신가요? 주저하지 말고 새 이슈를 열어 주세요. 확인해 보겠습니다.

향후 작업

EmulatorHelper 제한으로 인해 프로그램 공간을 다른 공간에서 사용할 수 없습니다. 예를 들어 외부 공유 라이브러리는 프로그램 메모리 공간에 대해 알 수 없으며 그 반대의 경우도 마찬가지입니다. 따라서 하나의 메모리 공간을 가진 하나의 프로세스로 에뮬레이션할 수 없습니다. 제가 놓치고 있는 부분이 있다면 알려주세요.

도구 다운로드