유니티 게임은 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 생성 후 덤프를 뜬 모습이다.
데이터가 알기 쉽게 덤프떠졌으므로, 수정이 가능해졌다.
필요한 툴: 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로 바꾼 후 적절하게 써먹으면 된다.
'한글패치 관련 짧은 글들' 카테고리의 다른 글
멜론로더 포함하여 배포시 유의점 (il2cpp 게임) (2) | 2021.12.19 |
---|---|
XUnity.AutoTranslator spam prevention 최소화 (0) | 2021.12.08 |
CrystalTile2의 이미지패턴 기능 <ObjH-1234 / ObjV-1324> (0) | 2021.11.01 |
유니티 게임 한글화 - SDF 폰트 교체 (AtlasPopulationMode=1인 경우) (0) | 2021.10.11 |
인코딩 / 전-반각 관련 사이트 (0) | 2021.08.24 |