유니티 게임 코드 찾기
3번 강좌에서 VPN 일반 앱을 복호화하여 코드를 찾는 것을 확인하였습니다.
그렇다면 게임코드는 어떻게 찾아야 될까요?
코코스나 언리얼의 경우 히든 함수가 아닐 경우 심볼이 그대로 보입니다.
하지만 iOS 유니티의 경우 il2cpp로 빌드하므로 심볼 정보를 메타데이터에 저장을 하며
안드로이드에 린님이 il2cpp dumper를 소개시켜주셨을 겁니다.
이제부터 iOS에서 유니티 게임 코드를 찾는 방법을 알려드리겠습니다.
사전에 아래 3개의 파일이 필요합니다.
1. il2cppdumer
https://github.com/Perfare/Il2CppDumper/releases << 여기에서 다운로드 받으시면 됩니다.
2. 복호화된 게임 앱 파일
3번 강좌에서 처럼 게임 앱을 복호화를 합니다.
3. 유니티 메타데이터를 가져옵니다.
메타데이터(global-metadata.dat)는 /var/containers/Bundle/Application/(bundle id)/(app name)/Data/Managed/Metadata 경로에 있습니다.
복호화된 앱과 메타데이터가 확보되면 il2cppdumper를 사용합니다.
첫번째는 복호화된 파일 선택합니다.
두번째는 메타데이터(global-metadata.dat) 파일을 선택합니다.
그리고 유니티 버전을 지정을 합니다.
여기서 유니티 버전을 모르실 수 있습니다.
메타데이터를 hex 에디터로 열어보면 0x4에 메타데이터 버전이 나와있습니다.
해당 값으로 유니티 버전이 확인 가능합니다.
그런데 .. 여기서 ... 저 0x18 값으로 유니티 버전을 확인하기 어렵습니다.
그럴경우 /var/containers/Bundle/Application/(bundle id)/(app name)/Data 경로에 level0 파일을 hex 에디터로 보면 유니티 버전이 나와있습니다.
일단 iOS에서는 il2cppdmper 사용시 2.Auto 모드를 사용합니다.
Dumping 작업이 완료되면 il2cppdumper 경로에 dump.cs 파일이 생성됩니다.
dump.cs 파일을 열어보면 아래와 같이 게임 코드를 확인할 수 있습니다.
예시로 CheckSignatrue 함수를 보겠습니다.
CheckSignature 함수의 위치는 0x1024B1F7C 입니다.
복호화된 앱을 IDA로 열고 0x1024B1F7C로 jump해보면 CheckSignatrue 코드를 확인할 수 있습니다.
게임 코드를 찾는것은 이게 끝입니다.