유니티 게임 한글화 - assetbundle crc체크 우회

2023. 4. 7. 14:53·한글패치 관련 짧은 글들

유니티 게임을 한글화하다 보면
StreamingAssets 폴더 안에 있는 번들파일을 수정했을때 게임이 이상해지는 경우가 있다.
게임이 크래시나거나, 시작화면에서 멈춰있거나, 이상해지거나, 텍스트가 아닌 key값이 출력되거나, 수정이 안되거나... 증상은 다양한 것 같다.
이는 에셋의 CRC를 체크해서, catalog.json에 있는 CRC값과 일치하지 않을 경우 로드하지 않기 때문이다.
 
보통 모드로더 기본 기능이나 UnityExplorer같은 모드를 통해 UnityLog를 보면 관련 내용이 출력되는데, 
개인적으론 그렇게 직접 알아보기보단 그냥 의심되면 바로 catalog.json을 수정해버리는게 낫다.

 

또한 catalog.json이 아닌 catalog.bundle을 사용하는 경우도 있는데, 

해당 방법은 catalog.json 수정법 설명 이후 추가적으로 설명하겠다.

 

 

catalog.json 수정법


https://github.com/nesrak1/AddressablesTools/releases

 

Releases · nesrak1/AddressablesTools

tools for your addressables. Contribute to nesrak1/AddressablesTools development by creating an account on GitHub.

github.com

CRC 체크 우회엔 여러가지 방법이 있는데, 제일 쉬운 게 UABEA 개발자 nesrak1이 만든 툴을 이용하는 것이다.
 
 

위 툴을 다운받아서 압축을 풀고, catalog.json을 Example.exe가 있는 위치에 두자.
* 보통 catalog.json은 {게임이름}_Data/StreamingAssets/aa에 있다.
 

그 다음 그 폴더에서 cmd창을 연 후, 아래 명령어를 친다.

# .json 파일의 경우
Example.exe patchcrc catalog.json

# .bin 파일의 경우
Example.exe patchcrc catalog.bin

 
그러면 패치가 진행된다.

오류가 뜨지 않았다면 catalog.json.old파일과 catalog.json 파일이 생성될 텐데,

catalog.json.old파일은 원본 (패치 전) 백업 파일이고

catalog.json 파일이 패치 된 파일이다. 이 파일을 사용하면 CRC 체크 우회가 된다.

 

 

 

catalog.bundle 수정법

만약 catalog.json/catalog.bin이 아닌 catalog.bundle이 있다면,

https://github.com/snowyegret23/AddressablesTools/releases/

 

Releases · snowyegret23/AddressablesTools

tools for your addressables. Contribute to snowyegret23/AddressablesTools development by creating an account on GitHub.

github.com

 

위 링크에서 Example-windows.zip을 내려받아 압축을 푼 후,
catalog.json을 수정하는 방법과 동일하게 진행을 하되 catalog.json 대신 catalog.bundle 파일을 옮기고,
아래 명령어를 입력하면 수정이 진행된다.

Example.exe patchcrc catalog.bundle

 

결과물 중 catalog.bundle.old가 원본 파일 백업이고,
catalog.bundle가 수정 완료된 파일이다.
그대로 덮어씌우면 CRC체크 우회가 된다.

 

 

 

위 툴이 실패하거나, catalog.hash가 있는 경우의 추가 수정법

- 위 툴이 실패한 경우

지원되지 않는 버전의 catalog 파일을 사용하고 있을 확률이 높다.

이 경우 2가지 케이스로 분리해볼 수 있다.

 

1. 게임이 너무 구버전의 Addressable System을 사용하는 경우

catalog.json을 텍스트 에디터로 열어서 

"m_ExtraDataString"의 Value부분을 공란 처리하면 된다.

ex) "m_ExtraDataString": "",

 

2. 게임이 너무 신버전의 Addressable System을 사용하는 경우

하단의 < 어셈블리를 수정하여 CRC체크 우회하기> 참고

 

 

- catalog.hash가 있는 경우

이 경우도 케이스가 2가지이다.

 

주로 유니티 6000 이상에서 사용되는 특정 키 추가 해싱의 경우와, 그렇지 않은 일반적인 케이스가 있다.

 

전자의 경우 어셈블리를 직접 수정해서 CRC 체크부분을 아예 무력화 시켜야 한다.

이 경우는 하단의 <어셈블리를 수정하여 CRC체크 우회하기> 참고.

 

후자(일반적인 케이스)의 경우

catalog.hash를 텍스트 에디터로 열었을 때 보이는 문자열이

원본 catalog.bin/catalog.json MD5와 일치하단 걸 확인할 수 있다.

catalog.bin/catalog.json 수정 후, 수정된 파일의 MD5를 재계산해서 catalog.hash 파일을 수정하면 된다.

 

 

 

어셈블리를 수정하여 CRC체크 우회하기

- Mono 런타임의 경우

DnSpy로 Unity.ResourceManager.dll 불러오기
UnityEngine.ResourceManagement.ResourceProviders 네임스페이스의 AssetBundleResource 클래스에 있는

LoadLocalBundle()이라는 메서드의
this.m_RequestOperation = AssetBundle.LoadFromFileAsync(this.m_TransformedInternalId, (this.m_Options == null) ? 0U : this.m_Options.Crc); 부분을
this.m_RequestOperation = AssetBundle.LoadFromFileAsync(this.m_TransformedInternalId, (this.m_Options == null) ? 0U : 0U);로 변경

> m_Options의 값이 null이던 아니던간에 crc값이 0이 되므로 검사 무효 처리가 됨.

 

- IL2CPP 런타임의 경우

이 경우 답이 없다. Ghidra나 IDA같은 리버스 엔지니어링 툴로 GameAssembly.dll을 직접 수정하시는 방법밖에 없다.

저작자표시 비영리 (새창열림)

'한글패치 관련 짧은 글들' 카테고리의 다른 글

UnityPy를 이용한 bundle파일 내 Monobehaviour 일괄수정  (0) 2023.08.29
게임메이커 게임 한글화 - 폰트 교체  (3) 2023.04.08
유니티 Textmesh 폰트 dump 대략적 분석  (0) 2023.04.06
구글 스프레드시트에 파파고 번역 함수 만들기  (8) 2023.03.01
언리얼 게임 한글화 - 모드 로드 방지 우회  (5) 2023.02.10
'한글패치 관련 짧은 글들' 카테고리의 다른 글
  • UnityPy를 이용한 bundle파일 내 Monobehaviour 일괄수정
  • 게임메이커 게임 한글화 - 폰트 교체
  • 유니티 Textmesh 폰트 dump 대략적 분석
  • 구글 스프레드시트에 파파고 번역 함수 만들기
Snowyegret
Snowyegret
기록용 블로그입니다.
  • Snowyegret
    Snowyegret
    Snowyegret
  • 공지사항

    • 문의: 디스코드 snowyegret12
    • 연락처(디스코드) 계정 변경 안내
    • 블로그 운영 재개 안내
  • 링크

    • 블로그 메인
    • 방명록/문의사항
    • Github Repositories
    • Github Gists
    • 분류 전체보기 (86) N
      • 늑대와 향신료 VR2 한글패치 (1)
      • 장난을 잘 치는 타카기양 VR 1학기 한글패치 (1)
      • Shephy 카드 설명 한국어 텍스쳐 모드 (1)
      • 한글패치 관련 짧은 글들 (37)
      • 한글패치 작업 내역 (11)
      • 한글화 분석 (작업X) (5)
      • python snippets (4)
      • 게임 (2)
      • 간단프로그램 (2)
      • IT (17) N
      • TODO (2)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.5
Snowyegret
유니티 게임 한글화 - assetbundle crc체크 우회
상단으로

티스토리툴바