2. Raw Data와 메모리 주소의 Mapping
Ghidra를 설치하고 파일 불러오는 정도의 기본적인 기능은 이미 다른 곳에서 많이 다뤘으니 (예를 들어, https://go-madhat.github.io/Introduce-to-Ghidra/) 이에 대한 설명은 생략하고 단도직입적으로 CodeBrowser 화면을 살펴봅시다. (랑그릿사2의 실행파일인 langpc2.exe를 import 해서 analyze 한 결과입니다.) 작은 창이 여러 개 있는데, 어떤 창을 볼지는 [메뉴 > Window] 에서 선택할 수 있습니다. 참고로, 위 화면의 경우 Program Trees, Symbol Tree, Listing: langpc2.exe 을 선택한 것입니다. Program Trees 창에서 Headers를 클릭하면 Listing: langpc2.exe 창에 프로그램의 헤더 정보가 나타납니다. 이 중에서 중요한 정보는 PointerToRawData라고 나타난 부분이며 Raw Data의 위치를 다음과 같이 알 수 있습니다. Name PointerToRawData .text 00_00_04_00 .rdata 00_03_E4_00 .data 00_03_EE_00 .idata 00_04_A2_00 .rsrc 00_04_AE_00 여기서 16진수 숫자는 0x3E400 처럼 앞에 0x를 붙이거나 00_03_E4_00과 같이 _ 를 중간에 넣어서 10진수 숫자와 구분하도록 하겠습니다. 예를 들어 .rsrc의 크기는 0x400 (10진수로 1024) 입니다. 그리고 [메뉴 > Memory Map] 을 선택하면 다음과 같이 메모리 주소를 알 수 있습니다. Name Memory Address Raw Data Start End Start End .te...