티스토리 뷰

Obfuscator 적용 후 il2cpp 리패키징하기


이번에는 앞서 살펴본 il2cpp로 컴파일된 Apk를 난독화 적용 후 어떤 식으로 바뀌었는지 살펴보려한다.

먼저 Unity -> Player setting -> il2cpp로 컴파일 환경을 변경한 뒤 빌드해주면 Apk파일이 생성된다. 해당 파일을 APK Easy Tool을 이용하여 디컴파일 해주면 된다. Unity Obfuscator #2에서 살펴봤듯이 단순히 libil2cpp.so 파일을 살펴보아도 코드를 파악하기 어렵고, 더군다나 난독화까지 적용하여 더 파악하기 어렵게 되었다. 그렇기 때문에 il2cppdumper를 통해 함수 정보를 재정의하여 분석해야 한다.

난독화 적용 후 il2cppdumper

il2cppdumper를 실행하고 생성된 DLL파일을 확인하면 함수 주소를 알수 있지만 난독화가 적용되었으므로 어떤 함수가 어떤 역할을 하는지는 알아보기 힘들다. 전과 같이 IDA에 Script.py를 적용하여 살펴본다.

난독화 적용 후 libil2cpp.so

Script.py를 적용하고 난 뒤 위 사진과 같이 코드를 살펴보면 원하는 함수 이름을 발견하였지만 해당 함수는 난독화 되어 여러 함수로 분리되있다. 함수를 하나하나 살펴보던 중 난독화 적용 전 코드와 유사한 부분을 발견하고 "이렇게 금방 찾을 수 있나?"하며 다른 함수들을 살펴보니 해당 함수는 fake함수, 즉 난독화가 적용되면서 비슷한 형식의 fake함수들이 생성되는 것을 확인 할 수 있었다. 하지만 fake함수 자체도 Getkey함수에서 받는 값을 제외하고는 실제 동작하는 함수와 코드가 비슷하여 함수에 대한 여러 정보를 얻을 수 있었다.

fake함수 속 real함수

하지만 어떤 이유에서인지 Update함수는 난독화되지 않고 이름이 그대로였다. Unity에서는 게임이 동작하는 동안 특정 시점에서 유저가 정의한 함수가 동작할 수 있게 하는데 이를 매직함수라한다. Update 내에 함수가 정의되면 매 프레임마다 호출을 하게되는데 예제 코드처럼 키보드 입력 값을 받을 때마다 동작할 수 있게 한다. 

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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함