난독화된 global-metadata.dat 관련하여 질문이 있습니다.
뽀글머리
5
5614
2020.06.30 14:21
Unity와 IL2CPP로 빌드된 안드로이드 게임을 분석하기 위해 libil2cpp.so와 global-metadata.dat을 apk로부터 가져왔으나,
il2cppdumper 사용 시 올바르지 않은 metadata라는 오류가 발생하여 확인해보니 global-metadata의 헤더가 정상적인 파일과 다른것으로 보아 난독화된 상태로 유추됩니다.
따라서 난독화되지 않은 global-metadata.dat을 얻기 위해 게임가디언을 통해 메모리를 덤프한 후 맵 텍스트에서 검색을 시도했는데, libil2cpp.so는 확인이 가능했으나 global-metadata.dat은 존재하지 않았습니다.
관련 자료를 검색을 해본 결과 il2cpp::vm::MetadataLoader::LoadMetadataFile() 함수를 변경함으로써 난독화된 global-metadata.dat 파일을 읽어들일 수 있도록 하거나 아예 libil2cpp.so 자체에 내장시키는 방법도 있다는 것 같습니다.
초보이기에 자세한 방식은 모르겠지만, 아마 이러한 변경 과정을 통해 난독화된 global-metadata.dat을 불러들인 다음 필요한 작업이 수행된 다음에는 메모리상에서 언로드시키거나 모습(이름)을 바꿔서 숨겨놓는 게 아닐까 생각하고 있습니다.
그러므로 이제 libil2cpp.so의 vm::MetadataLoader::LoadMetadataFile() 함수를 분석을 해야만 난독화 방식이나 메모리상에서 숨기는 방법을 알 수 있을 것이라고 생각합니다만, 이 단계에서 감이 잡히지 않아 고전중입니다.
현재 Ghidra를 사용중이지만, 이러한 바이너리 분석에 대해서 잘 알지는 못하는 편입니다. 경험이라고는 과거 다른 게임들의 바이너리 내 문자열 덤프같은 간단한 작업이나 다른 분들께서 작성해놓은 스크립트를 사용해보았을 뿐입니다.
무턱대고 Ghidra에서 libil2cpp.so를 불러들이고 ARM64 v8a로 analyzing까지 시작은 했는데, 여기서 어떻게 해당 함수를 찾아야할지 잘 모르겠습니다. Analyzing이 끝나지 않은 탓인지, 아니면 심볼 등 정보가 없어서인지 모든 함수들이 FUN_메모리주소 이런식으로만 나타나고 있어 찾지 못하고 있습니다.
여기서 더 나아가려면 어떤 것을 알아야하고 어떻게 찾아야할지 고수님들의 도움을 받아볼 수 있을까 궁금하여 가입하고 글 짤막하게 남겨봅니다.
감사합니다.
il2cppdumper 사용 시 올바르지 않은 metadata라는 오류가 발생하여 확인해보니 global-metadata의 헤더가 정상적인 파일과 다른것으로 보아 난독화된 상태로 유추됩니다.
따라서 난독화되지 않은 global-metadata.dat을 얻기 위해 게임가디언을 통해 메모리를 덤프한 후 맵 텍스트에서 검색을 시도했는데, libil2cpp.so는 확인이 가능했으나 global-metadata.dat은 존재하지 않았습니다.
관련 자료를 검색을 해본 결과 il2cpp::vm::MetadataLoader::LoadMetadataFile() 함수를 변경함으로써 난독화된 global-metadata.dat 파일을 읽어들일 수 있도록 하거나 아예 libil2cpp.so 자체에 내장시키는 방법도 있다는 것 같습니다.
초보이기에 자세한 방식은 모르겠지만, 아마 이러한 변경 과정을 통해 난독화된 global-metadata.dat을 불러들인 다음 필요한 작업이 수행된 다음에는 메모리상에서 언로드시키거나 모습(이름)을 바꿔서 숨겨놓는 게 아닐까 생각하고 있습니다.
그러므로 이제 libil2cpp.so의 vm::MetadataLoader::LoadMetadataFile() 함수를 분석을 해야만 난독화 방식이나 메모리상에서 숨기는 방법을 알 수 있을 것이라고 생각합니다만, 이 단계에서 감이 잡히지 않아 고전중입니다.
현재 Ghidra를 사용중이지만, 이러한 바이너리 분석에 대해서 잘 알지는 못하는 편입니다. 경험이라고는 과거 다른 게임들의 바이너리 내 문자열 덤프같은 간단한 작업이나 다른 분들께서 작성해놓은 스크립트를 사용해보았을 뿐입니다.
무턱대고 Ghidra에서 libil2cpp.so를 불러들이고 ARM64 v8a로 analyzing까지 시작은 했는데, 여기서 어떻게 해당 함수를 찾아야할지 잘 모르겠습니다. Analyzing이 끝나지 않은 탓인지, 아니면 심볼 등 정보가 없어서인지 모든 함수들이 FUN_메모리주소 이런식으로만 나타나고 있어 찾지 못하고 있습니다.
여기서 더 나아가려면 어떤 것을 알아야하고 어떻게 찾아야할지 고수님들의 도움을 받아볼 수 있을까 궁금하여 가입하고 글 짤막하게 남겨봅니다.
감사합니다.