APK 이미지 추출 - APK imiji chuchul

[ 앱뜯 관련 글 모음 ]

 [흥미] 한섭 말딸 클라이언트의 이미지를 뜯어보자!

 [흥미] 말딸 앱 뜯어보기 중급편 : master.mdb 뜯어보기

요즘 뜬금없이 필이 꽂혀서 말딸 앱 뜯어보는 방법을 공부 중인데,

애초에 전공도 이쪽 계열이었던데다 막상 해보니 의외로 재밌어서 열심히 파보고 있는 중입니다 ㅎ

당연히 어려운 경우도 있지만 반대로 생각보다 쉬운 경우도 있어서,

방법을 한 번 공유해보고자  사실은 나중에 까먹었을 때 쉽게 찾아볼 요량으로  글로 정리해봤습니다!

앱을 뜯어보면 이미지, 사운드, 모델링, 내부 시스템 등등 다양한 것들을 찾아볼 수 있는데,

일단 이번에는 그 중에서 가장 쉬운 이미지 파일을 추출하는 방법을 정리해봤습니다 ㅇㅇ

다행히도 이미지 파일 쪽은 압축이나 암호화가 전혀 되어있지 않아,

정리해둔 순서대로만 쭉 따라가면 누구든지 쉽게 파일 추출을 해보실 수 있습니다 +_+

준비물은 DMM판 우마무스메 게임, 그리고 Asset Studio GUI 라는 앱뜯 프로그램, 이렇게 두 가지입니다.

모바일이나 에뮬(블루스택 등)의 apk 파일에서 소스를 추출한 다음 프로그램에서 앱뜯을 하는 방법도 가능하지만,

DMM판을 쓰면 그런 번거로운 과정 필요없이 바로 소스 추출이 가능하니 DMM판을 설치하시는 것을 적극 추천합니다 ㅇㅇ

(참고로 모든 설명은 Window 기준입니다... iOS는 제가 가지고 있는 기기가 없어서 -_ㅠㅋ)

◆ 1단계 : Asset Studio GUI 준비

APK 이미지 추출 - APK imiji chuchul

Asset Studio GUI 는 Unity 엔진 기반의 게임 내 리소스들(에셋)을 쉽게 볼 수 있게 해주는 프로그램인데,

아래 링크로 들어가셔서 받으시면 됩니다 ㅇㅇ

 ☞ Releases · Perfare/AssetStudio · GitHub

닷넷(.NET) 같은 프레임워크를 깔아줘야 하는 귀찮음이 있긴 하지만, 프로그램 자체는 무설치(포터블)인지라 편하게 쓰실 수 있습니다 ㅎ

◆ 2단계 : 게임 데이터가 설치된 폴더 찾기

APK 이미지 추출 - APK imiji chuchul

다음으로는 뜯어볼 앱이 실제로 설치된 경로를 찾아줘야 하는데, 아무것도 모르고 시작하면 이 단계가 의외로(?) 까다롭습니다 -_-ㅋ

DMM 게임 플레이어에서 말딸 앱을 설치할 때 설치 경로를 지정해줄텐데,

이게 특이하게도 해당 경로에 설치되는건 200~300MB 정도의 기본 게임 데이터 뿐이거든요 ;;;

실제로 게임에서 쓰이는 데이터들(게임 켠 상태에서 다운로드 받는 GB 단위의 바로 그 데이터)은 다른 폴더에 자동 다운로드 되는데,

그 경로는 'C:\Users\(사용자 계정명)\AppData\LocalLow\Cygames\umamusume\dat' 폴더입니다 ㅇㅇ

(기껏 설치 경로 지정해둬봤자, '내 문서' 폴더의 숨겨진 하위 폴더에 몇 GB 짜리 데이터를 강제로 다운받는 게임...)

처음엔 이걸 몰라서 기본 게임 데이터가 있는 폴더만 뒤져보다가 며칠을 날렸죠 -_ㅠㅋㅋ

혹시나 위 경로에 폴더가 없다면, 그냥 '내 문서' 폴더에서 'umamusume'로 검색을 때려버리시면 찾으실 수 있을겁니다.

제 경우에도 제가 참고했던 글에 나오는 폴더 경로대로 찾아봤더니 안나와서, C 드라이브 전체로 검색을 해서 찾았거든요 -_-ㅋㅋ

'dat' 폴더에 들어가보면 위 스샷처럼 1000여개라는 엄청난 수의 폴더로 데이터가 나뉘어있고,

그 폴더 안에도 백 수십 개의 파일로 데이터들이 나뉘어져 있는데,

전체 파일 수만 따져도 십만 개(!) 정도가 나옵니다 ㄷㄷ (글 쓰는 날 기준으로는 대충 11.3GB 정도 용량이 나오네요 ;;;)

◆ 3단계 : 추출해야 할 파일 솎아내기

APK 이미지 추출 - APK imiji chuchul

앞서 설명드렸듯이 파일 수 자체가 몇 만 단위인지라, 앱뜯 프로그램으로 저걸 한꺼번에 로드하면 프로그램이 뻗어버립니다 ;;;

그래서 하위 폴더의 일부만 로드하든가, 아니면 최근에 업데이트 된 파일들만 골라내서 로드하든가 해줘야합니다 ㅇㅇ

제 경우엔 어제(22.01.20) 업데이트 된 파일들을 뜯어볼 생각이라, 어제 날짜로 수정된 파일들만 골라내볼 생각입니다.

그런데 이게 업데이트 될 때마다 한 폴더 안에 가지런히 모인 채로 추가되는 구조가 아니고,

업데이트 되는 파일들이 앞서 보신 수많은 하위 폴더들 여기저기에 분산되어 추가됩니다 -_-

(아마도 저처럼 앱뜯을 시도하는 사람들이 특정 파일을 쉽게 찾지 못하게 하려는 의도겠죠...)

그래서 위 스샷에서 보시는 것 처럼, 수정된 날짜 기준으로 검색을 돌려줘야 합니다 ㅎ...

'dat' 폴더에서 검색을 돌리시면 어제 수정 또는 추가된 하위 폴더와 파일들이 검색되는데,

그 중에서 파일들만 선택해서 별도의 폴더에 복사해주시면 되겠습니다 ㅇㅇ

(보통의 업데이트가 100MB 내외의 용량, 1000여개 내외의 파일로 이뤄지니, 복사/붙여넣기는 금방 됩니당)

◆ 4단계 : Asset Studio GUI 로 에셋 로드하기

APK 이미지 추출 - APK imiji chuchul

이제 상대적으로(?) 성가신 준비 단계는 다 끝났고, 본격적으로 Asset Studio GUI 를 이용해 앱을 뜯어보는 일만 남았습니다!

Asset Studio GUI 를 켜신 다음, 상단 메뉴에서 [ File ] - [ Load folder ] 를 통해 앞서 골라냈던 파일들이 저장돼있는 폴더를 선택해주시면 끝입니다 ㅇㅁㅇ

추출이 완료된 뒤에 [ Asset List ] 탭을 눌러보시면, 각종 리소스들의 목록을 확인하실 수 있습니다 ㅇㅇ

(대충 해보니, 최대 1~2만개 정도의 파일까지는 프로그램이 뻗지 않고 잘 로드해주는 것 같더군요 ㅎ)

참고로 별도로 옵션을 건드려줄 필요 없이, 기본 옵션인 상태 그대로 로드하시면 됩니다.

사운드나 영상 등등을 추출할 때는 옵션을 건드려야 할지도 모르겠지만... 이미지 정도는 그럴 필요가 없더군요 ㅇㅇ

◆ 5단계 : 필터링으로 이미지 목록만 보이게 하기

APK 이미지 추출 - APK imiji chuchul

상단 메뉴를 보시면 [ Filter Type ] 이라고 해서 리소스를 타입별로 필터링할 수 있는 메뉴가 있는데,

이미지의 경우엔 'Sprite'나 'Texture2D' 로 필터링 하시면 됩니다 ㅇㅇ

특히 우리가 보통 찾게 되는 스탠딩 모델링 이미지나 서포트 카드 이미지 등은 Texture2D 쪽에 있습니다.

Sprite 쪽은 대부분 버튼이나 아이콘, 또는 숫자 이미지 등의 작은 이미지들이구요.

위 스샷의 경우엔 파일명 순서로 정렬해둔 상태인데,

저렇게 해두고 보면 동일한 종류의 이미지들끼리 모여있어서 찾기가 훨씬 수월합니다 ㅎ

참고로 주요한 파일 타입들에 대해 간략히 설명해보자면 아래와 같습니다. (그다지 중요하게 보실 필요까지는 없습니다?)

* Animation, AnimationClip, Animator, AnimatorController : 3D 모델링 파트들의 애니메이션 정보. (예컨데 웃을 때 눈썹 파트의 움직임 같은거라던가...) 이쪽은 제가 아직 공부중이라 자세히는 모르겠네요 -_ㅠ...

* AudioClip : 보이스나 배경음악 등의 각종 사운드. 아쉽게도 우마무스메는 사운드 파일을 암호화해서 숨겨놓은 케이스라, 게임 전체를 뒤져봐도 AudioClip으로 분류되는 파일이 하나도 없습니다 ㄷㄷ... 소녀전선 같은 케이스는 AudioClip으로 분류돼있어서 쉽게 음원 추출이 된다던데 ㅠ

* Mesh : 3D 모델링 파트.

* MonoBehaviour, MonoScript : 게임 전반의 동작 정보. 대충 실제로 프로그래밍된 코드 부분 정도로 이해하시면 될 것 같습니다. 이쪽은 정말로 코딩의 영역...

* Sprite, Texture2D : 각종 이미지. 위에 적어놨듯, Sprite는 작은 이미지 위주, Texture2D는 큰 이미지 위주 정도로 이해하시면 편합니다.

* TextAsset : 각종 문자열. 그리고 암호화(!)된 각종 리소스. 등장인물들의 대사나 위닝 라이브에 나오는 가사 등등의 텍스트도 물론 있지만, 뜯어보니까 사운드 등을 암호화해서 텍스트로 저장해놓고 게임 내에서 복호화하여 사용하고 있는 경우도 많더군요 -_- ㄷㄷ

◆ 6단계 : 원하는 이미지 찾아보기

APK 이미지 추출 - APK imiji chuchul

다 끝났습니다! 이제 남은 일은 목록을 뒤져보며 앱뜯 이미지들을 감상해보고 원하는 파일들을 찾아보는 것 뿐입니다 ㅎ

보시다시피 이미지 파일들은 파일 선택과 동시에 우측에서 프리뷰가 뜨기 때문에, 바로바로 확인해볼 수 있습니다.

혹시나 프리뷰가 안뜬다면, 상단 메뉴의 [ Options ] - [ Enable preview ] 가 체크돼있는지 확인해보세요 ㅇㅇ

기본값이 체크 상태이긴 한데, 혹여나 안돼있었다면 체크 하신 다음 다시 로드해주시면 됩니다.

이번에 치요노 오 업데이트와 함께 아르당이랑 무테키의 승부복 업데이트도 됐던데,

보니까 승부복을 입은 채로의 스탠딩 이미지도 같이 업데이트 돼있더군요 ㅇㅇ

어디 쓰이는 파일이지 대체

(나무위키엔 승부복 업데이트는 됐지만 아직 실장되지 않은 애들의 스탠딩 이미지가 항상 올라와있던데,

이미지를 어디서 구했나 했더니 이렇게 구한거였음 ㄷㄷ)

APK 이미지 추출 - APK imiji chuchul

선택한 파일들 내의 모든 리소스를 다 로드해주는 프로그램이다보니,

위 이미지처럼 일반적인 용도로는 쓸 일이 없어보이는 텍스쳐 이미지도 다 로드됩니다 ㅋ

아마 모델링 추출해서 쓰는 분들은 저런 이미지도 같이 추출해서 많이 쓰실 것 같네요 ㅇㅇ

◆ 7단계 : 이미지 추출하기

APK 이미지 추출 - APK imiji chuchul

단순 감상(?)에서 끝나지 않고 로드한 이미지를 다른 용도에 쓰려는 경우라면, 해당 이미지를 추출하는 작업도 필요하겠죠.

추출하는 데에는 여러 방법이 있는데, 위 스샷에서 처럼 우클릭 메뉴로 원하는 특정 이미지만 추출할 수도 있고,

상단 메뉴를 이용하여 로드된 전체 파일을 추출하거나 필터링된 타입의 파일만 추출하는 등, 원하는 방식으로 해주시면 됩니다 ㅇㅇ

참고로 앞서 보셨던 일부 이미지들은 가로-세로 비율이 정상적으로 돼있지만,

위 스샷의 아이콘 이미지같이 가로-세로 비율이 찌그러진 상태인 이미지들이 훨씬 더 많습니다 ㄷㄷ

그래서 추출한 뒤에 별도의 프로그램을 통해 정상적인 가로-세로 비율의 이미지로 고쳐주는 2차 작업을 해주셔야 합니다 -_ㅠㅋ

◆ 번외 : Sprite, Mesh

APK 이미지 추출 - APK imiji chuchul

이번 치요노 오 업데이트에서 수정 및 추가된 파일에는 Sprite 리소스가 없길래,

기존 파일들에서 리소스를 로드하여 아무거나 스샷 찍어봤습니다.

보통 저런 아이콘 종류의, 작거나 중간 크기 정도 되는 이미지들이 대부분을 차지합니다 ㅇㅇ

APK 이미지 추출 - APK imiji chuchul

Mesh 타입의 리소스는 보시다시피 3D 모델링 데이터입니다 ㅇㅇ

대부분은 뭔지도 알아먹기 힘든 부분 모델링이지만, 저렇게 딱 봐도 어?저거! 싶은 모델링들도 있더군요 ㅋㅋ

제가 3D 쪽은 아직 문외한이라 저걸 추출해서 써먹는 방법까진 모르겠지만...

Asset Studio GUI 자체에서 3D 모델링도 프리뷰를 지원하기에 이래저래 돌려보며 구경하는 맛은 있습니다 ㅎㅎ

(그나저나 머리 모델링 쭉 돌려보는데, 보자마자 누구 머리인지 거의 다 맞추는 저 자신이 좀 무서워짐 ㄷㄷ)

대충 (말딸 앱 한정으로) 손쉽게  뜯어볼 수 있는 리소스들은 이 정도인 것 같습니다 ㅇㅇ

사실 레이싱 카니발 목록 화면에 나오는 배경음악이 너무 괜찮아서 그걸 어디서 구해보려고 하다가 앱뜯 공부(?)를 시작하게 됐는데,

막상 사운드 리소스쪽은 암호화를 해놓은 상태인데다 사운드 대부분이 숨겨져있는 상태라 쉽게 안되더군요 ㅠㅠ

그나마 전공이 이쪽인데다 재미붙여서 한번 도전해보고 있긴 한데, 난이도가 어느 정도일진 아직도 가늠이 안됩니다 ㄷㄷ

만약 잘 풀려서 음원 추출에 성공한다면 조만간 앱 뜯어보기 중급편이 나올 것이고,

반대로 중급편이 한참을 기다려도 안나온다... 싶으면 앱 뜯어보다 ㅈ망했나보다...하고 생각해주시면 되겠습니다 핡ㅋㅋㅋㅋㅠ