Ghidra 기본 사용법

shrew·2024년 10월 2일
post-thumbnail

Ghidra

Concept

기드라는 미국 국가 안보국(NSA)의 연구 부서에서 사이버 보안 임무를 지원하기 위해 개발한 소프트웨어 리버스 엔지니어링 프레임워크의 모음이다.

기능

File upload

기드라를 처음 실행하면 아마 위와 같은 화면이 나올 것이다. 기본 인터페이스를 알아보기 위해 먼저 파일을 업로드 해보자.
File -> New Project를 클릭하면 위와 같은 화면이 뜰 것이다. 기드라는 공유 프로젝트를 지원하기 때문인데 딱히 공유할 필요는 없으므로 Non-Shared Project를 선택해 준다.

Shared Project

기드라는 협업을 위한 공유 프로젝트를 지원한다. 여러 사용자가 동시에 같은 바이너리 파일을 분석하면서 변경 사항을 실시간으로 공유할 수 있으며, 팀 채팅 기능, 히스토리 기록, 사용자 별 권한 설정 등의 기능을 포함한다.
공유 프로젝트는 기드라 서버를 기반으로 실행된다.

다음으로 나오는 창에서는 기드라 프로젝트 폴더의 저장 위치와 이름을 설정할 수 있다. 참고로 나중에 프로젝트 폴더를 삭제하고 싶다면 프로젝트 비활성화 후 해당 경로에 가서 '<파일명>.rep'와 '<파일명>.gpr' 파일을 삭제해 주면 된다.
이름과 경로를 설정하고 Finish 버튼을 누르면 위 이미지 처럼 프로젝트 파일이 생성되었을 것이다. 이제 분석을 원하는 파일을 화면에 드래그 해주면 된다.
그러면 위와 같은 창이 뜨게 될 텐데 해당 파일의 간략한 정보와 포맷당 파일의 간략한 정보와 포맷 설정, 파일 이름 설정을 도와준다.
모든 설정이 끝났으면 마지막으로 위와 같은 창이 나오게 될 것이다. 대충 읽어보면 알겠지만 주소 공간 사이즈나 심볼 수, 파일 형식 등 바이너리 정보를 간단하게 알려주고 있다. 여기서 OK 버튼을 누르면 비로소 파일 업로드가 완료된 것이다.

기본 인터페이스

Code browser

Program tree

파일을 업로드할 때 파일 이름을 'test'로 변경했으나 기드라에서 파일을 불러오는 과정에서 해당 파일의 메타 데이터나 헤더 정보를 사용하여 이름을 표시하기 때문에 원래 파일명인 'my_flag'가 파일명으로 뜨게 된다.

Symbol tree

프로그램의 함수, 변수, 자열, 클래스 등 모든 심볼 정보를 계층 구조로 보여준다. 심볼을 클릭하면 해당 위치로 이동할 수 있으며, 심볼 이름을 바꾸거나 레퍼런스 창 등을 통해 상세 정보도 확인할 수 있다.

Data type manager

이름대로 데이터 타입을 관리하고 정의하는 데 사용되는 도구이다. 데이터 타입을 검색하거나 특정 메모리 주소나 변수에서 정의된 데이터 타입을 변경할 수 있다.

Listing window

리스팅 창은 어셈블리 명령어와 주소, 바이트 코드 등의 상세한 정보를 보여준다. IDA의 Disassembly View와 비슷한 기능을 한다. 디컴파일 창과 연동되어 있다는 특징이 있다.

Console

콘솔 창에서는 파이썬이나 자바로 작성된 코드를 실행할 수 있다. 그 외에도 go addressdecompile 등 다양한 내장 명령어를 사용할 수 있다. 좀 더 자세히 하고 싶으나 무슨 이유인 지 콘솔 창에 글이 안 적혀서 이 문제를 먼저 해결해야 할 것 같다.

Decompiler window

디컴파일러 창은 기본적으로 인터페이스의 우측에서 확인할 수 있다.
디컴파일러 창은 함수를 선택하면 해당 함수를 C언어 코드로 변환하여 창에 표시해주며, 위에서 살펴봤던 리스팅 창이나 함수 그래프와 연동되어 있다.

Function graph

함수 그래프는 기드라의 주요 기능 중 하나이다. 함수를 분할하여 보여주는 코드 블록과 블록과 블록 사이를 연결하는 엣지로 이루어져 있다. 코드 블록을 클릭하면 해당 코드로 이동할 수 있으며 엣지 클릭 시 해당 엣지의 화살표 방향으로 이동한다.

Edge color
함수 그래프의 엣지는 색상에 따라 의미가 정해져 있다.

초록색 : 무조건적으로 점프하는 구간을 의미한다. ex)JMP
빨간색 : 조건문이 참일 때 점프하는 구간을 의미한다. ex)JE, JNE
파란색 : 조건문이 거짓일 때 점프하는 구간을 의미한다.
검은색 : 함수의 기본적인 흐름을 의미한다. ex) 특정한 조건이 없는 경우

이 기능은 IDA의 Control Flow Graph와 비슷한 기능이라고 보면 된다.

Code patch

기드라는 디컴파일 된 코드를 바로 수정하거나 주석을 추가할 수 있다.
예를 들어, 위 이미지의 코드를 변경하고 싶다면 해당 코드 부분에서 우클릭 -> Patch instruction을 클릭한 후 바꿔주면 된다.
그러면 이런식으로 코드를 패치할 수 있다. 또한 변수 이름이나 함수 이름을 바꿀 경우, 기드라는 코드 전체에서 변경 사항을 반영해 수정한다.

Ghidra debugger

기드라는 2021년 6월 부터 기드라 디버거 라는 기능을 지원하고 있다. 기드라 디컴파일러가 정적 분석을 위한 도구라면 기드라 디버거는 동적 분석을 위한 도구이다. 실행해 보고 싶었으나 창은 뜨는데 작동이 제대로 안돼서 방법을 찾아보고 있는 중이다.

profile
보안 공부 로그

0개의 댓글