보안/Android

스마트 폰에서 PC로 앱 추출하기

cdecl 2018. 8. 30. 19:00



이전 포스팅에선 가상머신에 Santoku Linux를 설치하는 것까지 진행했다.


이제 스마트 폰의 앱을 PC로 추출해보자.


먼저 터미널을 열도록 한다. 


처음 설치했으면 바탕화면에 아무것도 없을테니, 좌측 하단의 사시미를 눌러 'System tools' 탭에서 실행한다.





root의 패스워드를 모르겠다면, 'sudo -i' 명령을 입력 후 설정해주자. (굳이 root가 아니어도 추출에는 지장이 없다.)


추출을 위해 우리가 사용해야할 도구는 'adb' 라는 프로그램이다. Windows 였다면 별도로 다운로드를 받아야겠지만,


여기선 이미 다 설치되어 있으므로 간단히 명령어만 입력해주면 된다.



adb start-server



adb를 사용하기에 앞서, 시동을 건다는 맥락으로 해석하면 되겠다.





폰트가 작은 관계로, 가독성을 위해 명령어 부분은 옆에 별도로 노란색 점을 표시해주었다.


이후 연결되어 있는 모바일 기기를 확인한다.


adb devices





'List of devices attached' 문구와 함께 아래 공란이 보일 것이다. 


아직 PC와 연결되어 있는 모바일 기기가 없으니, 아무것도 뜨지 않는 건 당연하다. 


이제 USB 케이블을 이용해서 스마트 폰과 PC를 연결해주자.





연결되었다면 다음과 같은 창이 뜬다. Cancel을 눌러주자. 


여기서 주의해야할 점은, 이 창이 보였다고해서 완전한 연결이 된 것은 아니란 걸 알아야한다.


만약 스마트 폰이 잠금되어있다면 잠금을 풀고 pc와 연결하겠냐는 창에서 '확인'버튼까지 눌러주어야 한다.


단순히 케이블만 연결해놓고 스마트 폰의 usb 연결 확인을 해주지 않았을 시, 인증 오류가 떠서 쉘에 접근이 안 되기 때문이다.

 



연결 후 다시 'adb devices' 명령을 입력하고 자신의 기기명이 식별된다면, 제대로 연결된 것이다.





이제 연결된 스마트 폰의 내부를 파헤쳐보자. 물론 루팅이 되어있지 않다면 다른 영역에서 접근이 거부될 수 있지만,


우리는 단순히 설치된 앱을 추출하는 것이기 때문에 루팅이 되어있지 않아도 상관없다.



다음 명령어를 입력하여 스마트 폰 내부로 진입하자.


adb shell





쉘($)에 진입이 성공한 시점부터, 우리는 연결된 스마트 폰의 파일 구조를 살펴볼 수 있다. 


실제로 ls -al 명령어를 입력하면 수 많은 디렉토리 및 파일들이 나온다.


하지만 우리의 목표는 앱 추출이기 때문에, 앱이 설치되어 있는 내부 저장소로 진입해야한다.


내부 저장소의 절대 경로는 다음과 같다.


/app/data



그렇기에 내부 저장소에 있는 패키지 리스트들을 열람하기 위해서 다음 명령어를 입력한다.



pm list packages -f | grep /app/data



-f와 grep 사이에 있는 작대기가 pipe 라는 건 당연히 알 것이라 가정한다.



.


물론 이것은 개인마다 다르다. 앱이 많이 설치되어 있는 폰이면 이것보다 훨씬 더 많이 나올 것이다.


'package:' 라고 시작되는 이 한 줄 한 줄이 하나의 앱이라고 생각하면 된다.


추출할 앱의 이름은 제대로 안 나와있는 경우도 있지만, 천천히 읽어보면 대략적으로나마 유추 가능하다.



이제 특정 앱을 지정하여 PC로 추출해보자.


먼저 쉘에서 나간 후(exit), 다음과 같은 명령어를 입력한다.



adb pull [추출할 앱의 경로] [추출할 앱의 이름 설정]





추출한 앱의 이름을 임의로 'test.apk'라고 지었다. 만약 이름을 설정해주지 않은 채 명령어를 끝냈다면 


그냥 'base.apk'라는 이름으로 지정된다.


 


이제 'ls' 명령어를 통해, 해당 앱이 PC로 무사히 추출되었음을 확인할 수 있다. (하늘색 점)