티스토리 뷰
Obfuscator 적용 후 il2cpp 리패키징하기
이번에는 앞서 살펴본 il2cpp로 컴파일된 Apk를 난독화 적용 후 어떤 식으로 바뀌었는지 살펴보려한다.
먼저 Unity -> Player setting -> il2cpp로 컴파일 환경을 변경한 뒤 빌드해주면 Apk파일이 생성된다. 해당 파일을 APK Easy Tool을 이용하여 디컴파일 해주면 된다. Unity Obfuscator #2에서 살펴봤듯이 단순히 libil2cpp.so 파일을 살펴보아도 코드를 파악하기 어렵고, 더군다나 난독화까지 적용하여 더 파악하기 어렵게 되었다. 그렇기 때문에 il2cppdumper를 통해 함수 정보를 재정의하여 분석해야 한다.
il2cppdumper를 실행하고 생성된 DLL파일을 확인하면 함수 주소를 알수 있지만 난독화가 적용되었으므로 어떤 함수가 어떤 역할을 하는지는 알아보기 힘들다. 전과 같이 IDA에 Script.py를 적용하여 살펴본다.
Script.py를 적용하고 난 뒤 위 사진과 같이 코드를 살펴보면 원하는 함수 이름을 발견하였지만 해당 함수는 난독화 되어 여러 함수로 분리되있다. 함수를 하나하나 살펴보던 중 난독화 적용 전 코드와 유사한 부분을 발견하고 "이렇게 금방 찾을 수 있나?"하며 다른 함수들을 살펴보니 해당 함수는 fake함수, 즉 난독화가 적용되면서 비슷한 형식의 fake함수들이 생성되는 것을 확인 할 수 있었다. 하지만 fake함수 자체도 Getkey함수에서 받는 값을 제외하고는 실제 동작하는 함수와 코드가 비슷하여 함수에 대한 여러 정보를 얻을 수 있었다.
하지만 어떤 이유에서인지 Update함수는 난독화되지 않고 이름이 그대로였다. Unity에서는 게임이 동작하는 동안 특정 시점에서 유저가 정의한 함수가 동작할 수 있게 하는데 이를 매직함수라한다. Update 내에 함수가 정의되면 매 프레임마다 호출을 하게되는데 예제 코드처럼 키보드 입력 값을 받을 때마다 동작할 수 있게 한다.
난독화 적용 전 코드에서 Getkey로 전달하는 값이 일치한다. 확실하게 확인해보기 위해서 해당 코드를 수정 후 리패키징 하여 게임을 실행해보았다. 처음에는 IDA에서 code patch가 적용이 안되서 헥스 뷰를 이용하여 바꿀 값의 주소를 찾아 직접 수정하고 다시 실행해보니 코드가 패치된 것을 확인할 수 있었다.
'Project > Unity_Obfuscator' 카테고리의 다른 글
Unity Obfuscator #6 (0) | 2019.07.19 |
---|---|
Unity Obfuscator #5 (0) | 2019.07.05 |
Unity Obfuscator #4 - code Analysis (0) | 2019.06.28 |
Unity Obfuscator #2 - il2cpp (0) | 2019.06.07 |
Unity Obfuscator 들여다보기 (0) | 2019.05.27 |