UABEA 에셋이 제대로 로드되지 않을 때

이 글은 읽는데 약 2분이 걸립니다.

문제 발생

유니티 게임 한글 패치를 위해서 에셋 파일을 언팩한 다음 문자열이 들어있는 level파일을 UABEA에 로드시킨 후, 문자열이 위치한 에셋을 찾았다.

Path ID 328번 TextMeshProUGUI가 편집하고자 하는 문자열이 들어있는 에셋이다.
먼저 확인을 위해 View Data를 눌렀더니…

에셋이 완전히 역직렬화(deserialized)되지 않았다는 경고와 보여지는 데이터는 별 내용이 없는 것뿐이었다.

왜이럴까?
검색을 해 본 결과 이런 게시글을 발견했다

UABE로 MonoBehaviour 파일 export dump - 한글화 미니 갤러리
UABE로 MonoBehaviour 파일 export dump 하는데 제대로 추출이 안되고 1kb만 추출하고 마는데 이거 혹시 왜 그런지 아는 사람 있어?0 MonoBehaviour Base 0 PPtr<

나와 같은 문제를 겪고 있는 사람이었고, 댓글의 답변에 의하면 이유는 이렇다:

monobehaviour 구조 특정이 안되서 그렇다

il2cpp로 개발된 게임에서 나타나는 문제라고 한다. 그렇다면 이제 해결을 해보자

해결

Release Il2CppDumper v6.7.40 · Perfare/Il2CppDumper
Unity il2cpp reverse engineer. Contribute to Perfare/Il2CppDumper development by creating an account on GitHub.

먼저 위의 링크에서 최신 버전의 Ill2CppDumper를 받아준다.
압축을 풀고 Il2CppDumper.exe파일을 실행해보자.

처음 파일 선택하는 창이 뜨는데, 여기서 il2Cpp 바이너리 파일을 선택한다. 플랫폼에 따라서 안드로이드는 libil2cpp.so일것이고, WebGL이라면 wasm파일을 선택하면 되겠다.

두번째 파일 선택하는 창에서는 global-metadata.dat파일을 선택해주면 덤핑을 시작한다.

덤핑이 완료되면 Il2CppDumper.exe가 있던 폴더에 DummyDll이라는 폴더가 생길 것이다.
이 폴더를 로드하려던 에셋이 있는 폴더로 옮긴 후, 폴더의 이름을 Managed로 변경한다.

이런식으로 될 것이다.

이제 다시 level파일을 UABEA로 로드하여 View Data를 누르면…

아까와는 다르게 더 많은 정보가 나오며, 내가 찾는 문자열 부분도 정상적으로 보임을 알 수 있다.
이제 Edit Data로 문자열을 편집한 후 다시 팩킹을 하면 수정이 가능하다.

댓글