Appsealing 이전에 분석했던 기록
앱씔링이란?
https://www.appsealing.com/kr/
apk를 보호하기 위한 보안 솔루션 입니다.
이전에 인간 혹은 뱀파이어 게임이 Mod가 한창 유행일때 특정버전. 1.4.0 버전이 업데이트 되었을때 Mod apk 배포가 중단된 적이 있습니다.
바로 앱씔링 때문인데요. 저도 이 게임을 하고 있었던지라 한번 분석을 했었습니다.
해당 게임은 Unity 기반 게임 이었으며 Appsealing에 의해 Assembly-CSharp.dll, Assembly-CSharp-firstpass.dll, Assembly-UnityScript.dll 3개의 파일이 통째로 암호화가 되어 있었습니다. 그리고 리패킹징된 apk, 메모리 탐지, 메소드 단위 암호화, 치트apk 탐지, 디버깅 방지 등 다양한 기능이 적용되어 있었습니다.
앱실링이 적용된 후 Appsealing 폴더가 생성되어 있었으며 1~7 까지의 이상한 파일이 생성되어 있었습니다. 이 파일들은 메소드 단위의 암호화를 복호화 할때 사용되는 파일입니다.
Assembly-CSharp.dll 파일의 첫번째 복호화가 진행된 모습입니다. 메소드들은 암호화가 되어있습니다.
메소드 주소 또한 아작나 있으며 우리가 복구해야할 과제입니다.
앱실링에 보호되는 apk는 lib 내부에 libcovault-appsec.so 라는 파일이 존재합니다. 해당파일에서 암호화, 복호화, 안티치트기능을 수행합니다.
게임이 실행되야되는데 메소드단위로 암호화되있는걸 어떻게 푸느냐?
방법은 이러합니다.
1. Unity 모듈 메소드가 호출되기 전에 메소드단위의 암호화를 복호화 시키는 함수를 호출하게 됩니다.
2. 메소드 전체를 복호화 하지 않습니다. 호출된 메소드에 대해서만 동적 메모리에 복호화 시킵니다.
3. 동적으로 복호화된 IL 어셈블리들을 실행시킵니다.
메소드 단위의 암호화를 복호화시키는 함수 부분입니다.
메소드의 주소와 메소드의 사이즈를 저장해 놓았습니다. 8Byte 당 셋트 하나씩입니다.
암호화된 메소드들이 너무 많으니 해당 메모리들을 덤프하여 프로그래밍으로 변조된 Unity 모듈들을 Fix 해주어야 합니다.
아흑.. 너무 옛날이라 뭔갈 더 써볼려고해도 기억이 안나는군요,.
이외에도 smali에서 키입력 관련된 부분을 hooking 하는것도 있는듯했습니다.
혹시 Appsealing을 분석해보실 의향이 있으신분들은 txt파일과 dif(ida patch file) 올려놓겠습니다. 해당 주소들 참조해 가시면서 분석 해보세용.
txt 파일이 매우 더럽습니다. 기록용으로 만들어 둔탓에.. libcovault-appsec.so_baseaddress + 0x 식으로 접근해 보시면 됩니다.
저는 x86 안드로이드 환경에서 분석했습니다. (arm 이 뭐죠? 먹는건가요?)
앱실링은 함수가 실행되기전에는 암호화가되어있습니다.
Prologue(복호화) -> 복호화된 코드 실행 -> epilogue(재암호화)
왠만해서는 동적으로 분석하셔야 편하실 껍니다.