6. 랑그릿사2 텍스트 데이터 (2)

이번에는 랑그릿사2의 실행파일(langpc2.exe) 안에 있는 텍스트를 찾아봅시다. 이를 위해서 2번 글에서 찾아낸 Memory map이 필요합니다.

Name
Memory Address
Raw Data
Start
End
Start
End
.text
00_40_10_00
00_43_EE_B4
00_00_04_00
00_03_E2_B4
.rdata
00_43_F0_00
00_43_F9_7F
00_03_E4_00
00_03_ED_7F
.data
00_44_00_00
00_44_B3_FF
00_03_EE_00
00_04_A1_FF
.idata
00_48_10_00
00_48_1A_B7
00_04_A2_00
00_04_AC_B7
.rsrc
00_48_20_00
00_48_23_BB
00_04_AE_00
00_04_B1_BB


실행파일에서 게임 관련 텍스트가 들어갈 수 있는 곳은 .rdata와 .data 섹션입니다. 따라서 실행파일의 00_03_E4_00 부터 00_04_A1_FF 까지 살펴보면 됩니다.

그리고 한글을 볼 수 있는 헥스에디터가 필요합니다. (저는 CrystalTile2 을 사용하였습니다.)헥스에디터로 langpc2.exe 파일을 열어서 살펴본 결과, 00_03_F1_78 부터 00_03_F7_5F 까지 클래스 이름이 있으며, 00_03_FB 60 부터 00_03_FE_77 까지 캐릭터 이름이 있습니다.

위의 Memory map을 이용하여 메모리 주소로 변환하면 다음과 같습니다.

Name
Memory Address
Raw Data
Start
End
Start
End
클래스 이름
00_44_03_78
00_44_09_5F
00_03_F1_78
00_03_F7_5F
캐릭터 이름
00_44_0D_60
00_44_10_77
00_03_FB_60
00_03_FE_77
 

Ghidra를 실행해서 langpc2.exe를 살펴봅시다. 위에서 알아낸 메모리 주소인 00_44_03_78로 이동해서(Navigation > Go to..., 단축키 : g) 해당 Label 이름을 "class_name_1"으로 바꿔놓습니다. (우클릭 > Edit Label..., 단축키 : l) 그리고 Label을 참조하는 곳을 검색합니다. (우클릭 > References > Show References to class_name_1, 단축키 : Ctrl+Shift+f) 참조하고 있는 곳은 3군데이며, 그 근처에 클래스 이름에 대한 참조들이 많이 있는 것을 알 수 있습니다.

이를 분석해본 결과는 이렇습니다. 00_03_F1_78 부터 00_03_F7_5F 까지 클래스/용병 이름의 실제 문자열 데이터가 저장돼있고, 00_03_F7_60‬ 부터 00_03_FB_5B 까지에 해당되는 배열에 문자열 데이터의 주소값들이 저장돼있습니다. 즉, 00_03_F7_60‬ 부터 00_03_FB_5B 까지는 (C언어의) 문자열 포인터 배열에 해당되며 다음과 나타낼 수 있습니다.

Offset(h)
00440964 : => 00440378 ("파이터")
00440968 : => 00440378 ("파이터")
0044096C : => 00440378 ("파이터")
00440970 : => 00440380 ("글래디에이터")
00440974 : => 00440390 ("뱀파이어")
00440978 : => 004403A0 ("나이트")
0044097C : => 004403A0 ("나이트")
00440980 : => 004403A8 ("파이어러트")
00440984 : => 004403B8 ("호크나이트")
...


이를 이용하면, 01번부터 FE번까지의 클래스 이름을 알아낼 수 있습니다.

번호
이름
번호
이름
00
N/A
10
겔갸자
01
파이터
11
고스트
02
파이터
12
스큐라
03
파이터
13
04
글래디에이터
14
로드
05
뱀파이어
15
로드
06
나이트
16
로드
07
나이트
17
어세신
08
파이어러트
18
어세신
09
호크나이트
19
실버나이트
0A
호크나이트
1A
실버나이트
0B
시스터
1B
실버나이트
0C
셔먼
1C
캡틴
0D
워록
1D
캡틴
0E
워록
1E
호크로드
0F
워울프
1F
호크로드

마찬가지 방식으로 캐릭터 이름도 알아낼 수 있습니다.
 
번호
이름
번호
이름
00
N/A
10
에그베르트
01
엘윈
11
에스트
02
리아나
12
오스트
03
라나
13
레아드
04
쉐리
14
제시카
05
헤인
15
다크프린세스
06
스콧트
16
베른하르트
07
키스
17
보젤
08
아론
18
수수께끼기사
09
레스터
19
발드
0A
라나
1A
조름
0B
로우가
1B
모건
0C
소니아
1C
기남
0D
레온
1D
크레이머
0E
발가스
1E
세이갈
0F
이멜다
1F
폴가


다음 글에서는 클래스 데이터를 살펴보겠습니다.

댓글

  1. Hex는 완전 초짜라 활용을 절대 못할거라생각했는데 덕분에 전직, 아이템 능력, 클래스 능력, 초기능력치를 제 맛에 맞게 고칠수있었습니다 정말 감사드립니다
    물론 글을 전부 이해한건 아닙니다만 올려주신 데이타만으로도 그덕에 성공했습니다!!

    답글삭제

댓글 쓰기

글 목록