한글패치 관련 짧은 글들

유니티 게임 한글화 - IL2CPP 게임에서 DLL 생성 (윈도우, 안드로이드)

Snowyegret 2021. 11. 28. 17:31

유니티 게임은 mono방식으로 빌드할 수도, il2cpp방식으로 빌드할 수도 있다.
mono방식은 {게임이름}_data\Managed 폴더 안에 dll파일들이 들어 있으며
il2cpp방식은 {게임이름}_data\ 폴더 내부에 il2cpp_data 폴더가 존재한다는 것으로 구분할 수 있다.

.assets 파일에 들어있는 MonoBehaviour 작업 시, dll파일들이 있어야 정상적으로 작업할 수 있다.

만약 dll파일들이 없다면 MonoBehaviour 파일을 정상적으로 deserialize할 수 없으므로,

일부 기본적인 정보들만 출력되게 된다. 그러므로, 당연히 내용 수정을 할 수 없다.


il2cpp 방식은 dll이 따로 없기에, 아래 작업을 하여 dll파일을 생성한 후 MonoBehaviour 파일을 덤프떠야 정상적으로 보거나 dump export/import가 가능하게 된다.

아래는 dll이 없는 상황에서의 비정상적인 출력과, dll 생성 후 정상적인 출력을 한 예시이다.

 

<dll이 없이 덤프 뜬 모습>

- dll 없이 그대로 덤프 뜬 모습이다. 기본적인 정보들밖에 없다.

 

 

<dll 생성 후 덤프 뜬 모습>

- dll 생성 후 덤프를 뜬 모습이다.

데이터가 알기 쉽게 덤프떠졌으므로, 수정이 가능해졌다.

 

 


 

 

필요한 툴: Il2CppDumper (https://github.com/Perfare/Il2CppDumper)
 

1. PC

(예시 - 늑대와 향신료 VR 2)
 

게임 exe 파일이 있는 곳에 GameAssembly.dll이 있다.
이게 il2cpp binary file이다.
 
{게임이름}_data\ 폴더 내부에 il2cpp_data가 존재하며,
il2cpp_data\Metadata에 global-metadata.dat 파일이 있다.
이게 global metadata 파일이다.
 
다운받은 Il2CppDumper.exe를 실행한 후,
첫번째로 il2cpp binary file(GameAssembly.dll)를 선택한 다음,
두번째로 global-metadata(global-metadata.dat)를 선택하면
 

여러 과정이 지나간 후 Done!이 뜨면서 정상적으로 DummyDll 폴더가 생성된다.
 

물론 dll파일도 정상적으로 들어 있는 것을 볼 수 있다.
 

이제 DummyDll 폴더의 이름을 Managed로 바꾼 후 {게임이름}_data\ 폴더에 넣은 후,
UABE나 UAAE나 UABEA같은 툴로 MB파일을 덤프뜨면 정상적으로 내용이 나올 것이다.
 
 
 

2. 안드로이드

(예시 - OPUS The Day We Found Earth)
 

apk파일과 Android\obb\{게임패키지명}\obb파일이 있다.
apk 파일의 압축을 푼 후, 파일 검색을 하거나 직접 경로로 들어가 보자.
 
 

lib\arm64-v8a 폴더에 들어가니 libil2cpp.so 파일이 보인다. 
이것이 il2cpp binary file이다.

assets\bin\Data\Managed\Metadata를 들어가니 global-metadata.dat 파일이 보인다.
이것이 global metadata 파일이다.
 
마찬가지로 Il2CppDumper.exe 실행 후
첫번째 파일로 libil2cpp.so 파일을 선택해주고
두번째 파일로 global-metadata.dat 파일을 선택해준다.
 

역시 정상적으로 생성되는 것을 확인할 수 있다.
이것도 마찬가지로 생성된 DummyDll 폴더를 Managed로 바꾼 후 적절하게 써먹으면 된다.