원래는 Il2CppInspector로 해보려 했지만 에러를 고칠 수 없어서 결국 다시 돌아온 Il2CppDumper로 분석을 하기로 했다.
처음엔 나와있는대로 빌드해서 분석을 해보려했지만 Could not process IL2CPP image 라면서 에러가 나와 빌드를 포기하고 1.0버전으로 실행해봤더니 또다른 에러가 나왔다.
지원되는 버전이 아니라는데 최신 버전은 지원을 안 해서 그렇다고 들었다.
결국 간단한 프로젝트를 만들어서 Il2CppDumper로 실행해봤다. 이번엔 에러없이 잘 돌아감
Il2CppDumper는 libil2cpp.so, global-metadata.dat(assets/bin/Data/Managed/Metadata) 파일을 받아서 분석을 해주는 아주 좋은 친구다.
지원해주는 기능은 다음과 같다. 중요 기능으로는 .NET Metadata에 포함된 types, fields, properties, methods, attributes를 추출, IDA 스크립트 생성 정도가 있다.
실행을 하면 dump.cs, script.py, DummyDll이 생성된다.
dump.cs : C# pseudocode. 텍스트 에디터로 볼 수 있다.
script.py : IDA에서 로딩 가능하다. 분석 결과를 IDA에 적용해서 함수 이름 등을 보기 쉽게 해준다.
DummyDll : .NET 디컴파일러로 볼 수 있다. 바이너리에서 추출한 메타데이터가 포함되어 있다. Assembly-CSharp.dll 생성
dump.cs 파일을 열어보면 함수의 이름, 오프셋을 보여준다.
libil2cpp.so를 열어서 Move() 함수를 찾아가보면
상당히 알아보기 힘들게 되어있다.
원본 코드와 비교해서 봐도 알아보기 힘들다. 이때 script.py를 사용한다.
script.py를 사용해보면 input.GetKey, transform.Translate 같은 함수명들이 써져있어 코드를 보기 쉬워진다.
아무런 난독화도 되어있지 않고 il2cpp로만 빌드했을 때는 Il2CppDumper같은 툴을 이용해 코드를 분석하기 쉽다는걸 알 수 있다.
Obfuscator를 적용 후 비교해보면 다음과 같다.
Fake Code와 Rename Method가 적용된 채로 보인다. Update()의 오프셋도 Fake Code 때문에 많이 달라진 걸 확인할 수 있다.
IDA로 so 파일을 열어봤을 때 함수 리스트에서는 Fake Code가 모두 정상적으로 생성되어 있다.
il2cpp로 빌드해도 Obfuscator 적용 후 모습은 mono와 비슷하다.
그런데 저번에 Obfuscator를 적용했던 다른 프로젝트와 비교해 봤을 때 생성된 Fake Code들이 다 비슷비슷하다. 빈 코드거나 Input.GetKey로 키를 입력받는 함수 위주인데 역시 원본 코드 기반으로 생성되는 느낌을 지울 수 없다....
'Unity' 카테고리의 다른 글
Unity Obfuscator #5 (0) | 2019.07.04 |
---|---|
Unity Obfuscator #4 (0) | 2019.06.27 |
Unity 특수 폴더들 (0) | 2019.06.27 |
Unity Obfuscator #2 (0) | 2019.06.07 |
Unity Obfuscator #1 (3) | 2019.05.31 |