10. - Nexus 5, 6.0.1, 루팅됨
- Nexus 6, 7.0, 루팅됨
분석 환경
11. 1. 리소스를 설치 시에 받는 경우
ex) 패키지 명이 com.company.game 일 때
/data/app/com.company.game/base.apk/(assets)
/sdcard/Android/obb/com.company.game/
[main|patch].<expansion-version>.<package-name>.obb
but 개발자가 JOBB를 사용해 리소스를 압축한 경우 (100MB가 넘어가는 어플리케이션)
ex) main.293.com.company.game.obb
리소스는 어디에?
13. 대사 또는 메뉴 등 string 파일 (.xml)
Shared-Preferences (.xml)
캐릭터 이미지 파일 (.png .jpg .gif)
어플리케이션 아이콘 (.png)
Unity Assets (.assets .assetbundle)
Sqlite Database (.sqlite .db)
(암호화된) 독자 규약 파일 (.???)
라이브러리 (.so)
기타 (.txt .dat .xml 등)
리소스는 어디에?
리소스의 종류
14. .png .ogg .txt등 잘 알려진 확장자: root 탐색기에서 바로 확인이 가능
/data/app/com.company.game/base.apk/res/drawable-hdpi/character_01.png
/data/app/com.company.game/base.apk/assets/sounds/stage_clear.ogg
/data/data/com.company.game/files/Data.txt
그렇다면?
21. QuickBMS (http://aluigi.altervista.org/quickbms.htm)
- BMS라는 언어 사용
- 해시 알고리즘, 압축 알고리즘, 500가지 이상의 압축 알고리즘, 및 기타 알고리즘 지원
- 현재 1744개의 게임의 구조가 분석되어 리소스 추출 스크립트가 공홈에 공개되어있음
- 구글에 “[확장자] quickbms” 또는 “[header] quickbms” 라고만 검색해도
해당 포맷을 해석하는 스크립트 발견 가능
그렇다면?
22. 모바일 성인 게임(탈의게임)만 분석해보아도 모바일 게임 보안의 발전 단계를 볼 수 있음
- 초반기 출시된 게임들은 엔딩 일러스트가 암호화 되어있지 않았음
- 엔딩 일러스트 스프라이트화/구역 분할 후 게임 내에서 재 조립
- 엔딩 일러스트의 헤더 변조
- 엔딩 일러스트를 포함한 리소스를 패킹/암호화 (이 즈음 최적화 문제도 조금 있었음)
- 메모리 보호 기법 적용
- 후반기에는 세이브파일 변조 확인 및 복구 기술 적용
여담
23. 정말 쉽다!
너무 쉬워서 더 이상 설명할 게 없다 큰일났다
리소스가 어디에 있는지 알면 프로그래밍 지식 없이 리소스 추출 가능!
24. 그래서 조금만 해봤다
허락 받고 해본 것들
* 온라인에 올라갈 때는 짤릴 수도 있는 내용들입니다. 잘 들으세요.*
25. 소녀전선
- MICA Team 개발 / X.D. Global Limited 유통
- 최근 가장 여러가지로 핫한 게임 : 구글 플레이, App Store
- 총기 컬렉션 게임 : 일러스트 등 리소스 보안이 매우 중요
46. 버섯 캐릭터를 키워서 모은 자원으로
배경화면을 사서 모으는 게임
이미지 출처: Google Play 해당 게임 구매페이지
유출 사례
47. 이미지 출처: 네이버 블로그
버섯 캐릭터를 키워서 모은 자원으로
배경화면을 사서 모으는 게임
하지만 어플리케이션에 내장된
배경화면 파일들이 유출되어
인터넷상에 유포됨
=> 유저 감소, 수익 감소
유출 사례
48. Live2D 일러스트를 차별점으로 내세운 모바일게임
리소스들을 및 가 걸려있었는데…
여기서 언급하면 곤란하다구! 여기서 언급하면 곤란하다구!
유출 사례
49. Live2D 일러스트를 차별점으로 내세운 모바일게임
리소스들을 및 가 걸려있었는데…
언패킹 스크립트가 유포되어 리소스 추출 하이패스
프로그래밍을 할 줄 모르는 사람도 스크립트 실행만 하면 추출 가능한 상황!
여기서 언급하면 곤란하다구! 여기서 언급하면 곤란하다구!
유출 사례
50. Live2D 일러스트를 차별점으로 내세운 모바일게임
리소스들을 및 가 걸려있었는데…
언패킹 스크립트가 유포되어 리소스 추출 하이패스
프로그래밍을 할 줄 모르는 사람도 스크립트 실행만 하면 추출 가능한 상황!
이미지 수정 후 리패킹으로 패치에 성공한 유저도 속출
게임에서 사용된 리소스는 물론 더미 데이터까지 발견되어 유저 신뢰도 감소
여기서 언급하면 곤란하다구! 여기서 언급하면 곤란하다구!
유출 사례
51. 리소스가 게임 밖 다른 곳 (다른 게임 등)에서 쓰이는 경우
기사 링크 : http://www.gamemeca.com/view.php?gid=910049
유출 사례
52. - 스포 방지
- 인앱 결제 후 누릴 수 있는 컨텐츠를 숨기기 위해서
- 게임의 내용을 멋대로 수정하지 못하도록
- 리소스가 게임 밖 다른 곳 (다른 게임 등)에서 쓰이지 않도록
왜 리소스를 보호해야할까?
54. - 대칭키 암호화를 한다고 XOR 연산만 하면 곤란
- 공격자의 코드 한 줄 없이 툴만으로도 추출되는 리소스
- 개발자의 실수로 발생하는 취약점이 아닌 무관심이 낳은 취약점
- 리소스가 어떻게 파악되는지에 대한 역지사지 필요
- 개발팀 고유의 리소스 패킹/암호화 프로토콜을 만드는 것도 방법
하지만