본문으로 바로가기

파일의 IT 블로그

  1. Home
  2. 모바일/ADB
  3. [ADB] 안드로이드 DB 파일 (/data/data/) 루팅 없이 추출하기

[ADB] 안드로이드 DB 파일 (/data/data/) 루팅 없이 추출하기

· 댓글개 · KRFile

*주의 : 부정확하거나 틀린 내용이 있을 수 있습니다. 

 

제가 앱 개발의 경험이 많진 않아서 정확히 아는 건 아니지만, 일반적으로 어플은 외부 저장소를 기준으론 [**/Android/data/[Package-Name]**] , 내부 저장소를 기준으론 [**/data/data/[Package-Name]**] 에 데이터 폴더를 가져서, 앱의 데이터를 저장합니다.

 

일반적으로 안드로이드에선 파일 탐색기 어플(CX파일매니저, 지퍼, 등등)을 가지고 외부 저장소에 위치한 /Android/data 에서 어떤 데이터가 있는 지 일반 사용자도 쉽게 접근할 수 있습니다.

 

물론 안드로이드 버전이 올라가면서 /Android/data도 일정 권한을 받아야 접근할 수 있지만 어쨌던 간에 /Android/data 를 볼 수 있는 파일 탐색기 어플을 찾아서 권한을 활성화 해주면 쉽게 외부 저장소 data 폴더에 접근 가능합니다.

 

반면에 내부 저장소에 위치한 /data/data 폴더의 경우 일반적인 사용자의 권한으로 접근할 수 없고, 루트(root) 권한이 있어야만 접근이 가능합니다. 그래서 /Android/data 엔 어플이 저장하는 민감한 정보가 잘 담기지 않는 거 같고, 중요한 사용자 데이터는 대부분 /data/data 에 위치하게 됩니다.

 

그리고 /data/data 안에 있는 Database라는 파일을 DB파일 이라고 부르는 거 같던데 이거까진 잘 모르겠네요 ^^; 죄송합니다 ㅎㅎ;

 

어쨌던 간에 오늘은 ADB(Android Debug Bridge)를 이용하여 이 /data/data 폴더에 있는 앱의 데이터를 루팅 없이 추출해보도록 하겠습니다.

 

참고로 가져오는 환경은 S10 5G, 안드로이드 12, One UI 4.1 입니다.

/data/data 를 추출하게 된 계기

제가 안드로이드에서 즐겨하는 싱글 게임이 있는데 이 게임이 세이브 파일 저장 기능을 지원하지 않아서.. 다른 기기로 세이브 파일을 옮길 방법이 없더라구요. /Android/data 도 뒤져봤는데 세이브 데이터처럼 보이는게 없는걸로 보아 역시 /data/data 위치에 게임 세이브 파일을 저장하고 있는 듯 싶었습니다.

 

세이브 파일을 복제겸 백업, 다른 기기에서도 살리고자 /data/data 폴더를 추출하게 되었습니다.

단 제 기기가 루팅되지 않아서 /data/data 폴더를 루팅 없이 추출해야 했습니다.

 

이게 삽질의 시작이 될 지 모르고..

어쨌던 성공했으니 글을 썼겠죠?

 

아실분들은 아시다 싶이 안드로이드는 리눅스 커널을 기반으로 하고 있습니다. PC 운영체제의 그 리눅스.. 맞습니다.

물론 리눅스 커널을 스마트폰에 맞게 커스텀 한게 안드로이드 운영체제기 때문에 PC에서 사용하는 리눅스 커널과는 많이 다르겠지만요.

 

어쨌던 간에 안드로이드는 리눅스 시스템이 기반이다보니, 권한 역시 리눅스에서 사용하던걸 그대로 따르고 있는데 시스템에서 중요한 파일은 일반 유저가 건들 수 없도록 권한을 전부 막아놨습니다. PC에서 사용하던 리눅스였으면 명령어 몇 줄로 관리자 권한을 쉽게 취득할 수 있는데 안드로이드 스마트폰은 이 관리자 권한을 취득하기가 매우 매우 어렵습니다.

 

이 관리자 권한을 취득하는 과정이 바로 인터넷에 나와있는 루팅(rooting) 이라는 것이며, 루팅하고 나서야 슈퍼 유저 권한을 얻어서 안드로이드 시스템을 내 마음대로 조작할 수 있습니다. PC와 다르게 안드로이드가 이렇게 관리자 권한을 철저하게 막아놓은 이유는 "책임"과 관련이 있습니다.

 

PC판 리눅스는 사용자가 관리자 권한가지고 컴퓨터 만지다가 망가뜨리면 전부 사용자 책임이지만,

스마트폰 판매자 입장의 경우 관리자 권한을 쉽게 풀어 놔서 사용자가 이걸 가지고 놀다가 스마트폰이 망가지면 전부 제조사 책임이 됩니다.

그래서 일반 사용자가 쉽게 관리자, 즉 루트(root) 권한을 획득할 수 없도록 해놓은 것입니다.

 

예전 초딩때 테그라크 커널 설치하면서 폰 루팅하고 권한 줘서 상태바 모양 바꾸고 했는데 추억이네요 ㅎㅎ

 

 

ADB를 통해 /data/data 추출

위에서 설명드렸다 싶이 /data/data 는 일반 유저 권한으로는 접근 자체가 불가합니다. 소위 루팅(root) 이라는 것을 통해 관리자 권한을 획득해야 /data/data 폴더에 접근할 수 있습니다.

 

다만 요새는 루팅을 하는 메리트도 얼마 없고, 루팅하면 삼성의 경우 Knox 라는 보안 시스템도 깨뜨려서 AS도 불가 하게 됩니다. 루팅 없이 /data/data를 추출하는건 일종의 꼼수가 필요한데 일단 필요한게 ADB입니다.

 

루팅 없이 /data/data 폴더 추출은 대부분 ADB를 통해 이루어집니다.

본 글에서 ADB 설치 방법이나 설명은 하지 않을것이므로 미리 설치하고 오세요.

(이 글 읽을정도의 사람이라면 미리 준비해오셨을거지만요 ㅎ)

 

Method 1-A run as

운이 매우 좋다면 이 방법에서 바로 /data/data 를 추출해낼 수 있습니다. 반대로 말하면 대부분의 경우에서 이 첫번째 방법은 실패한다는 뜻입니다 ㅠㅠ.

 

adb shell pm list packages

우선 /data/data 를 가져올 어플의 패키지 명부터 알아내야 합니다.

위 명령어를 입력하면 핸드폰에 설치되어 있는 모든 apk의 패키지 명을 알아낼 수 있습니다.

 

여기서 /data/data 폴더를 가져올 어플의 패키지명을 보고 복사해둡니다.

 

저는 카카오톡을 예시로 들어보겠습니다.

카카오톡의 패키지 명은 com.kakao.talk 이네요.

 

adb shell run-as com.kakao.talk

그리고 다음 명령어를 실행해봅니다.

이렇게 하면 안드로이드 쉘이 실행될 때 카카오톡 패키지의 권한으로 실행됩니다.

그래서 자동적으로 /data/data/com.kakao.talk 의 위치로 디렉토리가 이동되고 거기서 파일이나 디렉토리에 접근할 수 있습니다.

당연하지만 저 카카오톡 패키지명 부분엔 원하는 앱의 패키지명을 작성해주시면 됩니다.

 

run-as: package not debuggable: com.kakao.talk

하지만 99%.. 아니 거의 100% 로 대부분은 이런 메세지가 뜨면서 shell로 진입이 안될것입니다.

저렇게 run-as 로 /data/data에 접근하기 위해선 앱을 개발할 때 android:debuggable 라는 권한을 true로 줘야 합니다.

한마디로 디버깅 할때만 저걸 true로 둬서 편하게 /data/data 에 접근하라고 둔 것이지 일반적으로는 android:debuggable을 true로 설정하지 않기 때문에 (기본값이 false 인듯 합니다.) 저렇게 run-as로 접근이 불가합니다.

 

일단 여기서 막혔으면 아래 Method 1-B로 가고, 잘 되면 바로 아래 내용을 읽으시고 파일 / 폴더를 복사해주시면 됩니다.

 

 

adb exec-out run-as com.kakao.talk tar c ./ > output.tar

카카오톡의 /data/data 폴더를 통째로 가져오려면 위 처럼 하면 됩니다. 

tar로 묶은 후 리다이렉트 시킨다음에 exec-out을 이용하여 빼옵니다.

* 다만 /data/data 에 저장된 패키지의 데이터 크기가 클 경우 저기서 tar 데이터를 뽑아내서 파일로 추출해내는 작업이 꽤나 시간이 걸리므로 콘솔에서 다음 응답이 오지 않았으면 파일을 다 받아낼 때까지 기다려야 합니다.

 

제대로 추출이 된 경우 이렇게 파일이 잘 뽑혀져 나옵니다.

반디집으로 열었을 때 손상된 파일이라고 메세지도 나오지 않습니다.

다만 tar로 뽑아내는 과정 중간에 tar 파일을 열어버리면 반디집에서 손상된 파일이라고 알려줍니다.

아직 adb로 tar 파일의 전송이 다 완료되지 않은 상태서 열었기 때문입니다.

 

만약 실패한 경우 이렇게 1KB의 쓰레기 파일이 나옵니다.

 

아무튼 run-as 명령어를 사용하면 그 어플(패키지) 의 권한으로 /data/data/[패키지 명] 폴더를 가져올 수 있게 됩니다.

예시는 카카오톡이나, 글을 읽는 분들은 com.kakao.talk 부분을 가져오실 패키지 명으로 변경해주시면 됩니다.

 

기본적으로 adb shell run-as [패키지 명] 으로 명령어 실행시 바로 /data/data 폴더로 이동된(cd) 상태서 시작됩니다.

 

# /data/data에서 tmp폴더로 옮길땐 파일 이름 변경 불가
adb shell run-as {package_name} cp ./databases/exam.db /data/local/tmp/

# tmp 폴더에서 sdcard로 옮길땐 파일 이름 변경해도 됨
adb shell cp ./data/local/tmp/exam.db /sdcard/exam_out.db 

# sdcard 에 있는 파일 PC로 끌어옴
adb pull /sdcard/exam_out.db

 

만약에 /data/data/ 폴더의 전체를 tar로 뽑아오는게 아닌 특정 파일만 가져오고 싶다면 위 처럼 명령어를 입력해주셔야 합니다. 위는 특정 패키지의 /databases/exam.db 라는 파일을 PC로 빼내는 예제입니다.

 

참고로 run-as를 통해 파일 단위로 끌어올 때는 제약이 많습니다. 아래는 제가 하다가 찾아낸 제약들입니다.

 

1. run-as로 /data/data/[패키지 명] 안에 있는 파일을 꺼낼 시 /sdcard로 바로 복사해 옮길 수 없음

-> cp 명령어로 /data/data 안에 있는 파일 중 하나를 /sdcard로 바로 옮길 수 없습니다.

-> Permission Denied 가 뜹니다.

:: Solution : sdcard로 바로 옮기지 않고 /data/local/tmp 로 옮긴 뒤, 다시 run-as 없이 일반 권한으로 tmp에서 sdcard 로 옮긴다. 

 

이상하지만 /data/data 안에 있는걸 sdcard로 바로 옮길수가 없어서 tmp 폴더로 옮기고, 거기서 run-as 를 종료한 뒤 sdcard로 옮겨야 합니다. tmp -> sdcard로 옮겨낼 땐 권한 문제가 없는지 cp 할 때 다른 이름으로 가져와도 됩니다.

최종적으로 sdcard로 옮겼다면 안드로이드 스마트폰에서도 /data/data 안의 파일을 볼 수 있고, pull로 쉽게 끌어올 수 있습니다.

 

2.  run-as로 /data/data/[패키지 명] 안에 있는 파일을 cp로 tmp로 옮기는 과정에서, 새로운 파일명을 지정하면 안됨

-> 이상하게도 run-as로 /data/data 안에 있는 파일을 /data/local/tmp로 옮길 때 새로운 파일 이름을 지정할 수 없습니다. 

-> 위 예제 명령어에서도 cp ./databases/exam.db /data/local/tmp/ 처럼 원본 exam.db 라는 파일 이름 그대로 복사는 가능하지만 cp ./databases/exam.db /data/local/tmp/exam2.db 처럼 새롭게 exam2.db 라는 이름으로 tmp에 복사해낼 수 없습니다.

:: No Solution : 이것에 대한 해결방법은 딱히 없습니다. 사실 이름 그대로 옮겨도 파일 이름이 겹치는 문제 정도 밖에 없으니.. 이건 어쩔 수 없습니다. 그냥 체념하고 같은 이름으로 옮겨야죠 뭐..

 

3.  run-as로 /data/data/[패키지 명] 안에 있는 폴더를 tmp로 옮길 수 없음

-> 위 처럼 파일 단위로 cp하는건 되는데 골때리게 또 cp로 /data/data 안에 있는 폴더(디렉토리)를 -r 옵션같은걸로 복사해서 tmp로 옮길 수 없습니다.

:: Solution : 맨 위에서 알려드린대로 모든 파일을 tar로 뽑아내야 합니다. cp로 폴더 단위 복사를 수행하는 방법은 없음.

 

4. 이외에도 수 많은 제약

-> 갈 수록 안드로이드의 권한 제약이 빡빡해지는 만큼 이외에도 수 많은 제약이 있습니다. 위에서 알려드린 2가지 방법 말고는 편하게 폴더 / 파일의 추출을 할 수 없었습니다. chmod로 777 권한을 준다던지, cat으로 리다이렉트 시켜서 밖으로 빼내는 꼼수, 온갖 꼼수가 전혀 먹히지 않았습니다 ㅠㅠ

결론적으로 폴더 단위로 빼내는건 포기했고 통짜 tar 파일로 추출했고, 파일은 그래도 되서 필요한 파일만 cp로 빼오면 됩니다. 대신 sdcard로 바로가 아니라 단계 단계..

 

Method 1-B 백업 기능 이용

아마 대부분 위 run-as에서 막혀서 여기로 왔을 겁니다.

사실 run-as는 일반적인 방법으로는 안될것이고, 이제 조금의 꼼수를 한번 더 이용해야 합니다.

바로 adb의 backup 기능을 이용할 것인데요.

 

adb의 backup 기능을 이용하면 /data/data 폴더를 *.ab 라는 파일 형태로 묶어서 주는데, 이걸 시중에 나와있는 언패키징 도구를 이용하면 tar 파일로 바꿔내서, /data/data 폴더로 뽑아낼 수 있습니다.

 

WARNING: adb backup is deprecated and may be removed in a future release
adb.exe: backup either needs a list of packages or -all/-shared

한마디로 adb backup 기능의 일종의 보안 헛점(?) 을 노리는 것인데, 

일단 향후 adb backup 이 삭제되거나 더 이상 사용되지 않을것이라고 하니.. 아마 구글도 이런 문제를 알고 있는듯 합니다.

 

adb backup -f output.ab -noapk com.kakao.talk

어쨌던 간에 adb로 backup을 만들려면 다음과 같이 입력합니다.

맨 끝엔 백업할 패키지 명을 입력해주면 됩니다.

 

그럼 다음과 같이 백업 파일을 암호화할 비밀번호를 입력해주라고 하는데 아무거나 입력하고 데이터 백업 버튼을 눌러주면 됩니다. 저는 0000을 입력했습니다.

 

만약 실패했다면 adb backup 실행시 명령어 실행이 즉시 종료되고 이렇게 1KB의 쓰레기 파일이 나옵니다.

이 경우엔 앱 개발자가 adb backup의 보안상 헛점을 알고 막아둔 것입니다.

앱 개발 & 배포시 android:allowBackup 을 false로 설정해두면 이렇게 adb backup 이 먹히지 않고 1KB의 쓰레기 파일이 나옵니다.

 

안타깝지만.. 사실 여기까지 왔으면 앱을 재설치 하지 않고선 /data/data를 추출해낼 수 없습니다.

결론적으로 여기까지 왔으면 현재 앱에 설치된 데이터를 살릴 수 없다는 뜻입니다.

왜냐면 안드로이드는 앱을 삭제하면 /data/data 를 포함하여 앱이 사용하고 있는 모든 데이터를 싸그리 날립니다.

 

다만 나중에 이런일이 발생하지 않도록, 어플 자체는 어쩔 수 없이 일단 삭제하고 디컴파일을 통해 앱을 debuggable 가능하게 만들어서 이후의 /data/data를 뽑아내는 방법이 있습니다.

이 경우 Method 1-C로 이동하시면 됩니다.

 

어쨌던 여기까지 오면 일반적인 방법으로는 앱의 데이터를 유지하면서 더 이상 뽑아낼 방법이 없고, 루팅을 하지 않는 이상 방법은 없습니다.

 

만약에 1KB가 아닌 제대로 된 용량을 가진 *.ab 파일이 만들어 졌으면 아래 방법을 따라해주시면 됩니다.

ab 파일은 윈도우나 스마트폰 자체에서 일반적으로 열 수 없는 파일이므로 tar 형태로 바꿔줘야 합니다.

 

ABE를 이용하면 이를 쉽게 할 수 있습니다. 파일은 github release 탭에서 받으시면 됩니다. abe.jar 하나만 받으면 됩니다. 또는 혹시 모르니 티스토리에 업로드 해놓도록 하겠습니다.

 

abe.jar
2.22MB

여기서 받거나 깃허브에서, 편하신 방법으로 다운로드 해주시면 되겠습니다.

참고로 제가 티스토리에 올려놓은 버전은 20221109063121 release 버전입니다.

 

 

abe.jar unpack output.ab output.tar [password]

받은 abe.jar와, 아까 추출해둔 output.ab를 같은 폴더에 두고 cmd 창을 열어서 다음 명령어를 입력합니다.

password 부분엔 아까 백업할 때 작성했던 비밀번호를 입력하면 됩니다. 저는 0000을 입력하면 되겠군요.

 

정상적으로 작업이 끝났으면 백업 파일(*.ab) 이 tar 파일로 바뀝니다.

 

그리고 이렇게 패키지의 /data/data 파일이 성공적으로 추출됩니다.

저는 패러렐 스페이스라는 앱의 데이터를 추출했습니다.

근데 여러 앱을 백업해보면서 느낀게 이렇게 백업을 허용해주는 어플이 거의 없더군요 ㅋ;

 

안드로이드 개발한 구글도 자사 크롬 어플은 백업 못하게 해놓고.. 진짜 애물단지 기능.. 잘 먹히면 운좋게 데이터 빼먹는거고 아니면 ㅎ;

 

Method 1-C 디컴파일 & debuggable 가능한 앱으로 만들기

아까도 말씀드렸지만 여기까지 왔으면 일단 /data/data를 뽑아낼려면 앱을 삭제하고 다시 깔아야 하기 때문에 ㅠㅠ 현재 데이터를 살릴 방법은 없습니다.

 

물론 앱이 운 좋게 클라우드 저장을 지원하면 일단 클라우드에 저장해놨다가 현재 방법을 이용해서 앱을 디버그 가능하게 바꾸고, 클라우드 데이터를 다시 가져온 다음에 그 상태서 /data/data를 뽑아내서 데이터를 가져오는 방법은 있습니다.

 

당연하지만 클라우드 저장이 없다면.. 데이터는 그냥 날려먹은게 되겠죠.

 

일단 이 방법은 앱을 디컴파일해서 debuggable 값을 true로 바꿔서 APK를 변조한다음에, 다시 설치해서 이제 설치한 이후로는 /data/data를 추출해낼 수 있게 하는 겁니다.

 

아마 카카오톡도 채팅창 백업 같은 클라우드 백업 기능을 제공하니깐, 일단 백업해놨다가 이 방법대로 debuggable을 true로 바꾸고 재설치, 그리고 다시 클라우드 데이터를 가져오면 /data/data 를 추출해낼 수는 있을겁니다.

 

어쨌던 간에 이제는 apk 파일을 추출하고 뜯어내야 합니다.

일단 APK 파일 추출이 가장 먼저인데, 내 설치 되어 있는 어플의 apk 파일을 추출해내려면 여러가지 방법이 있습니다.

 

1. 일단 추천하는 방법으로는 Apk Extractor 라는 어플을 이용하는 겁니다. Play Store에 있는 어플인데, 이걸 이용하면 핸드폰에 설치된 앱의 APK 파일을 쉽게 추출해낼 수 있습니다. 이걸로 추출하면 sdcard의 ExtractedAPK~ 어쩌고 폴더 안에 apk 파일이 추출되게 됩니다.

 

2. APK 파일을 얻는 또 다른 방법은 구글링입니다. 구글에 youtube apk 라고 치면 어플이 숱하게 나오는데 https://m.apkpure.com 개인적으로는 apkpure라는 사이트가 apk 파일을 제공하는 사이트 중에 가장 괜찮은 듯 합니다.

 

3. 마지막으로 APK 파일은 adb로 추출할 수 있습니다. adb로 추출하는 방법은 본문에서 설명해드리도록 하겠습니다.

일단은 귀찮으면 Apk Extractor로 직접 추출해보시고 (또는 adb), 용량이 부족하다거나 이상하다거나 아이콘이 없는 상태로 추출됐으면 data나 obb파일이 같이 포함되지 않아서 문제가 생긴 것인데 이럴땐 그냥 apkpure 이나 구글링 해서 나오는 apk 파일 받는게 낫습니다. 여기서 주는 것들은 대부분 data랑 obb를 한꺼번에 묶어서 패키징해주거든요.

 

어쨌던 본문에선 adb로 앱 추출 방식을 설명합니다.

 

adb shell pm list packages

다음 명령어를 통해 스마트폰에 설치된 모든 앱의 패키지명을 파악합니다.

 

adb shell pm path com.kakao.talk

다음 명령어를 통해 패키지의 apk 파일이 위치한 경로를 찾아냅니다.

 

package:/data/app/~~AHSpRwsI_etERdAmnV8nWQ==/com.kakao.talk-Kyeae_96_MXIAZMKgCaPqg==/base.apk
package:/data/app/~~AHSpRwsI_etERdAmnV8nWQ==/com.kakao.talk-Kyeae_96_MXIAZMKgCaPqg==/split_config.arm64_v8a.apk
package:/data/app/~~AHSpRwsI_etERdAmnV8nWQ==/com.kakao.talk-Kyeae_96_MXIAZMKgCaPqg==/split_config.ko.apk
package:/data/app/~~AHSpRwsI_etERdAmnV8nWQ==/com.kakao.talk-Kyeae_96_MXIAZMKgCaPqg==/split_config.xxhdpi.apk

출력 결과가 다음과 같을건데 기억이 잘안나긴 합니다만 arm64는 아마 안드로이드 64비트 (최신 cpu용), hdpi는 High DPI 같은 것들 이였을 탠데 일단은 맨 위에 있는 base.apk를 추출하면 대부분 맞습니다.

 

카카오톡의 base.apk는 "/data/app/~~AHSpRwsI_etERdAmnV8nWQ==/com.kakao.talk-Kyeae_96_MXIAZMKgCaPqg==/base.apk" 라는 주소에 존재하는군요. 일단은 메모해둡니다. 안드로이드 업데이트 되면서 경로가 좀 지저분하게 바뀐 거 같습니다.

 

adb pull /data/app/~~AHSpRwsI_etERdAmnV8nWQ==/com.kakao.talk-Kyeae_96_MXIAZMKgCaPqg==/base.apk

위에서 찾은 경로를 adb pull로 끌어오면 PC로 apk를 추출해올 수 있습니다.

당연하지만 위에서 package: 부분은 빼고 입력하는거 아시죠?

이제 이 추출해본 apk를 가지고 디컴파일을 시도해보겠습니다.

 

APK를 디컴파일 하는덴 아주 많은 방법이 있습니다. 저는 개인적으로 APK Easy Tool 이라는 GUI 형태의 프로그램을 추천합니다. 다운로드는 여기서 하시거나 아니면 아래에 올려둔 파일을 사용하면 됩니다.

 

 

APK Easy Tool v1.60 Portable.zip
10.65MB
APK Easy Tool v1.60 Portable.z01
19.53MB
APK Easy Tool v1.60 Portable.z02
19.53MB

 

압축 해제 후 apkeasytool.exe 을 실행하면 다음과 같은 화면이 나옵니다.

 

여기에 아까 추출했던 apk 파일을 드래그 & 드랍 합니다.

 

그럼 다음과 같이 APK 의 시그니쳐가 아래에 표시됩니다.

아이콘이 뜨면 대부분 추출이 잘 된 것이고 아니면 뭔가 문제가 발생한 것입니다.

저는 카카오톡 앱을 추출했는데 일단은 추출이 잘 된 거 같군요.

 

위의 디컴파일 이름과 컴파일 폴더 이름을 잘 설정하고 Decompile 버튼을 누릅니다.

 

디컴파일이 진행됩니다. (시간이 좀 걸립니다.)

 

디컴파일이 완료되었으면 Decompiled APK directory를 눌러서 디컴파일 된 결과물 폴더를 엽니다

 

1-Decompiled APKs 폴더에 방금 디컴파일한 결과물 파일이 나올건데요.

수정할 파일은 딱 하나입니다. 폴더 열면 바로 보이는 AndroidManifest.xml 파일을 수정해줍시다.

 

개인적으로 이 파일은 메모장보다 Notepad++ 같은걸로 여는걸 추천드립니다.

 

수정할 파일은 여기 <application 태그 부분입니다.

보다 싶이 카카오톡은 allowBackup 이 false라 백업도 막아놓고, 디버깅 가능여부도 기본 false라 꺼져있었던 거네요.

 

<application 부분에 다음 2가지를 추가합니다.

android:debuggable="true" android:allowBackup="true"

 

없으면 타이핑해서 넣으면 됩니다. application 태그 안에 속성값으로 넣어줍니다.

다 작성해주고 저장해주면 수정은 끝났습니다.

 

다헀으면 Apk Easy Tool로 돌아와서 먼저 Compile 해주고, 기다렸다가 끝나면 Sign Apk를 해서 서명해주고, 마지막으로 Compiled APK directory 로 가서 결과물을 확인합니다.

 

저는 1단계 Compile 과정에서 error: unexpected element <uses-native-library> found in <manifest><application>. 라는 오류를 만났습니다. 일부 어플에선 컴파일이 잘 안되는거 같더라구요. 여기서 문제가 발생하면.. 그거까진 잘 ㅎㅎ;

(일단은 제가 작업할려던 어플에선 성공을 했고, 이번에 새로 시도해본 카카오톡 어플은 컴파일 과정에서 문제가 생기네요. 카카오톡의 경우 아마 다른 디컴파일러를 이용해봐야 할 거 같습니다. 프레임워크 관련 문제일 수도 있는데 카카오톡 대상으로 디컴파일이 안되시는 분들은 해당글이 도움이 될 수 있습니다)

 

어쨌던 apk가 잘 컴파일 되고 sign까지 끝마쳤다고 가정하겠습니다.

 

이런식으로 APK가 나왔으면 잘 된겁니다. 이제 이걸 본인의 스마트폰에 설치해주고, 다시 Method 1-A 로 가서 run-as를 실행하면 그때는 /data/data 에 접근하는게 매우 잘 될 것입니다.

다만 본인의 스마트폰에 새롭게 만든 어플을 설치할 때 기존의 어플은 지워주셔야 합니다. 안드로이드도 APK 패키징시 서명을 도입하면서 이전과 서명한 내용이 다르면 덮어서 설치 자체가 되지 않습니다..

아마 이건 보안상 어쩔 수 없는 걸로 보여요. 이것도 루팅하면 넘어갈 수 있는거 같긴한데 일단은 지금까지 삽질에서 깨달으셨겠지만 논루팅으로는 답도 없는 삽질들이 많이 들어갑니다.

 

어쨌던 APK만 잘 만들어내셨으면 원래 어플은 지워주고, 다시 설치해주시고 1-A 에서 설명하는 run-as로 데이터를 빼오시면 됩니다.

 

 

출처

https://paulaner80.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EA%B2%BD%EB%A1%9C

https://dazemonkey.tistory.com/42

https://github.com/nelenkov/android-backup-extractor

https://gist.github.com/nstarke/615ca3603fdded8aee47fab6f4917826

 

SNS 공유하기
최근 글
파일의 IT 블로그
추천하는 글
파일의 IT 블로그
💬 댓글 개
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

이모티콘을 클릭하면 댓글창에 입력됩니다.