Ghidra Download비공식 다운로드 및 설치 가이드
한국어
GHIDRA 스크립팅

Ghidra Script Manager: Java, Python, 안전한 자동화

Ghidra Script Manager는 Ghidra 프로젝트 안에서 작은 자동화 작업을 찾고 편집하고 실행하는 가장 빠른 방법입니다. 이 가이드에서는 내장 실행 흐름, 현재 Python의 경계, 유용한 API 패턴, Script Manager와 PyGhidra를 통한 네이티브 CPython 자동화의 차이를 설명합니다.

Ghidra 공식 스크립팅 문서 열기
주요 의도Script Manager
현재 릴리스Ghidra 12.1.3
적합한 작업작고 반복 가능한 작업
Python 경계CPython에는 PyGhidra
빠른 답변

Ghidra Script Manager란 무엇을 하는가

Script Manager는 Ghidra에 내장된 스크립트 검색 및 실행 작업 공간입니다. 여러 프로젝트에서 같은 검사나 정리 작업을 반복할 때 유용합니다. 패턴에 맞는 함수 목록 만들기, 심볼 이름 통일, 선택한 데이터 내보내기, 주석 추가, 보고서용 근거 수집 등이 예입니다. 결과는 일반적인 Ghidra 분석 작업이므로 CodeBrowser, Listing 또는 Decompiler에서 확인해야 합니다.

스크립트가 바이너리 이해를 대신하지는 않습니다. 대상 프로젝트를 정하고, 가장 작은 변경만 수행하고, 쓰기 작업이라면 복사본을 만들고, 무엇이 바뀌었는지 기록하는 검토 가능한 실험으로 다루세요. 정적 분석 흐름은 Ghidra 초보자 튜토리얼에서 다루며, 이 페이지는 그 흐름 안의 자동화에 집중합니다.

범위와 권한

조사 권한이 있는 파일과 시스템만 분석하세요. Script Manager는 프로젝트를 빠르게 바꿀 수 있으므로 먼저 복사본에서 테스트합니다.

  • Ghidra에 포함되었거나 스크립트 디렉터리에 저장된 스크립트를 찾습니다.
  • 스크립트를 열고 언어와 import를 확인한 뒤 활성 프로그램에서 실행합니다.
  • 프로그램 모델과 콘솔을 사용해 작고 반복 가능한 변경을 수행합니다.
  • Script Manager 자동화와 PyGhidra를 통한 네이티브 CPython 자동화를 구분합니다.
1단계

Script Manager를 열고 스크립트 찾기

프로젝트를 열고 Ghidra 도구 메뉴에서 Script Manager를 시작합니다. 정확한 메뉴 위치는 도구와 릴리스에 따라 약간 다를 수 있지만 스크립트 목록, 검색 또는 필터, 편집기, 실행 및 새로 고침 작업을 제공합니다. 방금 복사한 스크립트가 보이지 않으면 코드를 조사하기 전에 목록을 새로 고치세요.

처음에는 읽기 전용 또는 보고서용 스크립트를 사용하세요. Run을 누르기 전에 헤더 주석과 import를 읽고 열린 프로그램, 선택 영역, 현재 함수, 프로세서 같은 전제 조건을 확인합니다.

  1. 1

    연습 프로젝트 열기

    비공유 프로젝트를 만들고 분석 권한이 있는 바이너리만 가져옵니다. 원본과 프로젝트 복사본을 변경하지 않고 보관합니다.

    File > New Project > Non-Shared Project
  2. 2

    Script Manager 시작

    도구 메뉴에서 스크립팅 작업 공간을 열고 검색 또는 필터로 목록을 좁힙니다.

    Window > Script Manager
  3. 3

    실행 전에 검토

    언어, 필요한 컨텍스트, import, 출력 위치, 심볼·주석·데이터 형식·메모리 변경 여부를 확인합니다.

    헤더와 import 먼저 읽기
  4. 4

    실행하고 확인

    작은 대상에서 한 번 실행하고 콘솔을 읽은 뒤 Listing 또는 Decompiler에서 프로그램 상태를 확인합니다.

    Run > Run Script
Script Manager를 열기 전에 사용하는 Ghidra 공식 프로젝트 창
자동화를 실행하기 전에 프로젝트를 만들고 백업하세요. Ghidra 공식 프로젝트 창 캡처입니다.
2단계

중단 지점이 분명한 작은 첫 스크립트 작성

첫 스크립트는 하나의 질문에만 답해야 합니다. 함수 개수 세기, 특정 접두사가 있는 이름 출력, 정의된 문자열 목록 만들기, 현재 선택 영역 보고 등이 예입니다. 첫 시도부터 분석·이름 변경·내보내기·정리를 결합하지 마세요. 범위가 작은 스크립트일수록 검토와 재실행이 쉽습니다.

보이는 UI를 긁어오는 대신 Ghidra가 스크립트에 제공하는 프로그램 모델을 사용하세요. 함수, 심볼, 참조, 명령어 또는 메모리 블록을 조회하고 짧은 결과를 콘솔에 출력합니다. 메서드 이름은 GhidraScript API 참고 문서에서 확인하고 오래된 포럼 예제를 그대로 믿지 마세요.

스크립트가 프로그램을 변경한다면 출력에서 그 변경을 추적할 수 있어야 합니다. 전후 개수, 주소 또는 심볼 이름을 출력하고 예상 밖의 상태에서는 조용히 계속하지 말고 중지합니다. 그러면 반복 실행도 감사하기 쉬워집니다.

첫 스크립트 체크리스트컨텍스트 읽기 -> 하나의 객체 검사 -> 결과 출력 -> 변경하지 않기 -> 반복
실행 기록 예시대상: practice.bin | 범위: 현재 프로그램 | 쓰기: 없음 | 결과: 12개 함수
Listing과 Decompiler에서 스크립트 결과를 확인하는 Ghidra 공식 CodeBrowser
콘솔 텍스트만 믿지 말고 표시된 분석 화면에서 출력을 확인하세요. Ghidra 공식 CodeBrowser 캡처입니다.
언어 선택

Java, Python, 그리고 Ghidra 12.1.3의 경계

검색 데이터에는 Ghidra scripting, Ghidra scripts, Ghidra용 Python이 섞여 있지만 항상 같은 런타임을 뜻하지는 않습니다. Script Manager는 애플리케이션 안의 진입점입니다. Ghidra Java API를 사용하는 재사용 가능한 자동화에는 Java 스크립트가 가장 명확합니다. Python 사용 가능 여부는 Ghidra 프로세스를 시작한 방법과 설치된 통합 기능에 따라 달라집니다.

내장 스크립트 창 밖에서 네이티브 CPython 자동화를 실행하려면 PyGhidra 설치 가이드를 참고하세요. PyGhidra는 외부 CPython 프로세스를 Ghidra API에 연결하고, Script Manager 스크립트는 Ghidra 애플리케이션 컨텍스트에서 실행됩니다.

런타임 차이를 코드 재작성으로 오해하지 않기

먼저 Script Manager 내부, PyGhidra로 시작한 Ghidra 프로세스, 외부 CPython 프로세스 중 어디에서 실행되는지 확인합니다. 그다음 맞는 문서와 진단 절차를 선택하세요.

필요한 작업먼저 사용할 것이유
열린 프로젝트에서 작은 작업 하나Script Manager보이는 컨텍스트에서 빠르게 확인 가능
재사용 가능한 Java API 자동화Java 스크립트네이티브 API 모델에 맞음
네이티브 CPython 흐름PyGhidra외부 Python 프로세스용으로 설계됨
크고 반복 가능한 배치로그가 있는 스크립트입력·출력·실패를 검토할 수 있음
워크플로

실제 프로젝트에서 유용한 Script Manager 패턴

유용한 스크립트는 보통 컨텍스트 설정, 작은 객체 집합 선택, 하나의 작업 수행, 결과 보고의 네 부분으로 나뉩니다. 컨텍스트는 현재 프로그램, 위치, 선택 영역 또는 함수일 수 있습니다. 선택은 이름 필터, 주소 범위, 메모리 블록, 함수 속성, 참조 집합처럼 명시적으로 정의합니다.

두 번의 실행을 비교할 수 있도록 출력을 구조화하세요. 한 줄 요약도 도움이 되지만 주소나 심볼 이름이 포함된 항목별 한 줄이 디버깅에 더 좋습니다. 느린 스크립트라면 함수 하나나 메모리 블록 하나로 먼저 테스트하고 진행 표시를 출력합니다.

  • 전역 상태를 요청하기 전에 현재 프로그램과 위치를 읽습니다.
  • 범위 없는 스캔보다 제한된 반복자나 선택 영역을 사용합니다.
  • 주소, 심볼, 데이터 형식을 Listing에서 확인할 증거로 취급합니다.
  • 읽기 전용 탐색과 쓰기 작업을 분리합니다.
  • 대량 이름 변경, 형식 변경, 주석 생성 전에 프로젝트 복사본을 저장합니다.
반복 가능한 사고 모델컨텍스트 -> 선택 -> 작업 -> 근거 -> 되돌리기 계획
문제 해결

Ghidra 스크립팅의 일반적인 문제 해결

스크립트가 실패하면 먼저 정확한 오류 메시지와 런타임 컨텍스트를 기록합니다. Ghidra 버전, 운영체제, 스크립트 언어, 열린 프로그램, 선택 영역, 프로세스 시작 방법을 남기세요. 이렇게 하면 Script Manager 문제에 PyGhidra 해결책을 잘못 적용하는 일을 줄일 수 있습니다.

오류를 재현하는 가장 작은 사례도 확인합니다. 특정 프로세서, 손상된 함수 또는 빈 선택에서만 실패한다면 전체 재작성보다 경계 조건 검사가 필요합니다.

오류 근거 보관

전체 오류 텍스트, 최소 재현 파일이나 프로젝트 복사본, 스크립트 버전을 저장하세요. 알 수 없는 바이너리나 민감한 분석 데이터를 공개 이슈에 올리지 마세요.

증상먼저 확인안전한 다음 작업
스크립트가 목록에 없음새로 고침, 경로, 확장자, 스크립트 디렉터리목록을 다시 읽고 가능하면 파일을 직접 열기
Python을 사용할 수 없음Ghidra 시작 방법과 PyGhidra 설정Java를 사용하거나 PyGhidra 경계를 따르기
프로그램 또는 선택 영역이 없음활성 도구, 프로젝트, 프로그램, 선택 영역프로그램을 열고 함수 하나로 테스트
출력이 이상함아키텍처, 주소, Listing, 데이터 형식스크립트를 바꾸기 전에 CodeBrowser에서 가정 확인
체크리스트

안전하고 반복 가능한 스크립팅 루틴

일회성 작업은 짧은 루틴으로 충분합니다. 팀 작업이나 반복 조사라면 입력, 예상 결과, 스크립트 버전, Ghidra 버전, 프로젝트를 변경하는지 여부를 기록하세요. 결과 확인에는 Ghidra Decompiler 가이드가 도움이 되며 설치 가이드는 애플리케이션, JDK, 프로젝트, 백업을 분리하는 방법을 설명합니다.

읽기 전용 출력으로 시작해 Listing과 비교한 후에만 변경을 활성화합니다. 전후 개수와 되돌리기 계획 또는 프로젝트 복사본을 남깁니다. 외부 입력, 테스트, CPython 의존성이 있는 자동화 시스템이 된다면 PyGhidra나 전용 하니스를 검토하세요.

  1. 1

    준비

    Ghidra 버전을 고정하고 프로젝트 복사본을 열어 범위를 기록합니다.

    버전 + 입력 + 범위
  2. 2

    관찰

    읽기 전용 스크립트를 실행하고 주소가 포함된 작은 출력 샘플을 보관합니다.

    먼저 읽기 전용
  3. 3

    변경

    하나의 통제된 변경을 수행하고 개수를 출력한 뒤 분석 화면에서 확인합니다.

    한 작업 + 근거
  4. 4

    보존

    스크립트, 메모, 출력, 프로젝트 복사본을 저장해 실행을 비교하거나 되돌릴 수 있게 합니다.

    스크립트 + 로그 + 복사본
자주 묻는 질문

Ghidra Script Manager 질문

Ghidra Script Manager란 무엇인가요?

활성 프로젝트나 프로그램에서 스크립트를 찾고 편집하고 실행하는 Ghidra 내장 작업 공간입니다. 작고 검토 가능한 자동화에 적합하며 외부 CPython 프로세스와는 다릅니다.

Script Manager에서 Python을 사용할 수 있나요?

Python 사용 가능 여부는 런타임과 Ghidra 시작 설정에 달려 있습니다. Python을 사용할 수 없다고 표시되면 내장 자동화에는 Java를 사용하고 CPython 흐름에는 PyGhidra 가이드를 따르세요.

Ghidra scripting과 PyGhidra는 같은 것인가요?

아닙니다. Script Manager는 Ghidra 안에서 실행되고 PyGhidra는 네이티브 CPython 프로세스를 Ghidra API에 연결합니다. 설치와 문제 해결 방법도 다릅니다.

스크립트가 목록에 나타나지 않는 이유는 무엇인가요?

목록을 새로 고친 다음 파일 확장자, 스크립트 디렉터리, 언어 및 필터 설정을 확인합니다. 헤더와 import가 현재 Ghidra 릴리스에 맞는지도 확인하세요.

첫 스크립트가 프로젝트를 변경해야 하나요?

먼저 읽기 전용 보고서로 시작하는 것이 좋습니다. Listing이나 Decompiler에서 결과를 확인한 뒤 복사본에서 개수와 되돌리기 계획을 기록하고 통제된 변경을 테스트하세요.