티스토리 뷰

Reversing

How to reversing Il2cpp

RCE_Mania 2019. 3. 5. 15:00

How to reversing Il2cpp

Unity에서 Il2cpp로 빌드된 바이너리를 분석할때 디버그 정보를 포함시킬 수 있다면 분석에 큰 도움이 될 것이다.

해당 문서에서는 이런 분석을 도와주는 Il2CppDumper의 사용법을 소개한다.



Il2cpp

C#으로 작성된 Unity 게임은 공식적으로 보안성 향상과 iOS 64bit 지원을 명목으로 Il2cpp로 빌드하는 것을 권장한다. 실용성에 대한 이야기는 잠시 접어두고 쉽게 생각하면 바이너리를 C# → IL → C++로 컴파일된 것으로 변경한 것이다.


IL2CPP Build Process



Il2CppDumper

C++로 컴파일된 Il2cpp에 디버그 정보를 포함시키는 방법으로는 GitHub에 공개된 Il2CppDumper를 이용하면 쉽게 가능하다.


지원하는 기능은 아래와 같다.


  • ELF, ELF64, Mach-O, PE format 지원
  • global-metadata 16, 19-24 버전 지원
  • .NET Metadata에 포함된 types, fields, properties, methods, attributes 추출 가능
  • IDA 스크립트 자동 생성
  • Dummy DLL을 생성하여 .NET 디컴파일러로 확인 가능


Il2CppDumper Usage

Il2CppDumper release page에서 최신 버전의 Il2CppDumper.exe를 다운받아 실행할 수 있다. Il2CppDumper.exe를 실행하면 2개의 파일 입력을 받는다.


첫 번째로는 il2cpp 실행파일을 선택한다. il2cpp 실행파일은 ELF나 Mach-O, PE 포맷으로 존재할 수 있으니 분석 대상 앱(APK or IPA)따라 대상을 선택하면 된다.


두 뻔재로는 global-metadata.dat 파일을 선택한다. 보통 Data/Managed/Metadata 등의 경로에 존재한다.


파일 선택을 마치면 CMD창에서 추출 모드를 선택해야 한다. 권장하는 모드는 '4.Auto(Plus)'이다. 나머지 모드에서는 Android에 의존적이거나 몇 가지 수작업이 필요하다. 자세한 내용은 Extraction Modes에서 확인 가능하다.


Extraction Modes


추출 작업이 완료되면 아래와 같은 output file이 생성된다.

  • dump.cs : C# pseudocode로 텍스트 편집기로 볼 수 있다.
  • script.py : IDA와 IDA Pyhon을 이용해 IDA에서 로딩할 수 있다.
  • DummyDll : .NET 디컴파일러로 메타데이터 정보를 확인할 수 있다. 코드는 포함되어 있지 않다.


Load to IDA with script

il2cpp 파일을 IDA통해 분석을 시작한다. 분석이 완료 되면 File - Script file - Script.py 선택하여 디버그 정보를 로딩할 수 있다.


Script Execution Log

댓글