라벨이 리버싱인 게시물 표시

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...

1. 랑그릿사2 리버싱에 사용하는 도구

컴퓨터 프로그램을 만들 때는, 일반적으로 프로그래밍 언어(예를 들어, C 언어)로 작성된 소스 코드를 컴파일하여 기계어로 구성된 프로그램을 만들게 됩니다. 이렇게 만들어진 프로그램은 (소스 코드를 공개하지 않는 이상) 내부 구현(설계, 계산로직 등)을 알아내기 쉽지 않습니다.   리버싱(reversing) 혹은 리버스 엔지니어링(reverse engineering)이란, 컴퓨터 프로그램을 분석해서 내부 구현을 알아내는 과정 혹은 그러한 기법을 의미합니다. 랑그릿사2 PC판을 리버싱하기 위해 사용하는 도구는 다음과 같습니다. (물론 이들은 랑그릿사2 뿐만 아니라 다른 프로그램을 리버싱하기 위해서도 사용할 수 있는 범용 도구입니다.) 1. 디스어셈블러(disassembler) : 기계어로 만들어진 프로그램을 어셈블리어로 변환해주는 도구입니다. IDA Pro가 기능이 좋지만 비싸다는 단점이 있습니다. 무료 중에서는 Ghidra가 쓸만합니다. 따라서 Ghidra를 사용하겠습니다. (https://ghidra-sre.org/ 에서 받을 수 있습니다.) 2. 디버거(debugger) : 보통은 프로그래머가 디버깅(버그를 잡는 것)하기 위해서 디버거를 사용하는데, (목적이 좀 다르다보니) 리버싱에 사용하는 디버거는 따로 있는 것 같습니다. 전에는 OllyDbg를, 요즘에는 x64dbg를 많이 사용하는 것 같습니다. 하지만, 랑그릿사2는 윈도우즈 98에서 구동하는 거라서 디버거도 그에 맞게 옛날 디버거인 SoftICE 4.05 (windows 98)를 사용하겠습니다. 3. 헥스에디터(hex editor) : 프로그램을 수정하고 싶다면 헥스에디터로 수정할 수 있습니다. 아무 거나 써도 상관없지만, 그동안 써오던 HxD를 사용하겠습니다. (https://mh-nexus.de/en/hxd/ 에서 받을 수 있습니다.) 위 3가지가 필수 도구이고, 각각의 자세한 기능은 중간중간 설명하도록 하겠습니다.

글 목록