allowBackup="false" 우회하기
모든 민 형사상 책임에 대해 작성자는 법률이 허용하는 한계에서 모든 책임을 부인합니다.
도입
대한민국에서 압도적인 사용률을 자랑하는 카카오톡은 디지털 포렌식 조사에서 핵심적인 증거 자료를 포함하는 경우가 많습니다.
메신저 애플리케이션의 특성상 사용자 간의 대화 내용, 친구 목록, 파일 전송 기록 등 민감하고 중요한 정보가 다수 저장되어 있기 때문입니다.
이번 글에서는 카카오톡 애플리케이션 데이터에 접근하고 그 구조를 분석하는 기법, 특히 데이터베이스 파일을 중심으로 탐구해보고자 합니다.
안드로이드 앱 데이터 저장소 이해
안드로이드 시스템에서 앱 데이터는 주로 다음 두 위치에 저장됩니다.
- 앱 내부 저장소 (App-Specific Internal Storage):
/data/data/[패키지 이름]/
앱 고유의 비공개 데이터가 저장되는 공간입니다. 기본적으로 다른 앱에서는 접근할 수 없으며, 앱이 삭제되면 이곳의 데이터도 함께 삭제됩니다. 포렌식 관점에서 가장 중요한 데이터(DB, 설정 파일 등)가 위치하는 곳입니다.- databases/: SQLite 데이터베이스 파일 저장
- shared_prefs/: 앱 설정 값 (Key-Value 형태의 XML 파일) 저장
- files/: 앱이 생성한 일반 파일 저장
- cache/: 임시 캐시 파일 저장
- 앱 외부 저장소 (App-Specific External Storage):
/storage/emulated/0/Android/data/[패키지 이름]/
(주 사용자 기준)
앱이 사용하는 파일 중 외부 저장소에 저장되는 데이터 공간입니다. 이론적으로 앱 삭제 시 함께 삭제되어야 하지만, 관리 방식에 따라 잔존 데이터가 남을 수도 있습니다. 미디어 파일이나 대용량 캐시 등이 저장될 수 있습니다.
이 외에도 사용자가 직접 접근 가능한 공유 외부 저장소(Download, Pictures, DCIM 등)가 존재하지만, 카카오톡의 핵심 데이터는 주로 앱 내부 저장소에 위치합니다.
데이터 추출의 난관: allowBackup flag 우회 기법
과거 adb backup 명령어는 루팅 없이 앱 데이터를 추출하는 유용한 방법이었습니다. 하지만 카카오톡은 보안상의 이유로 특정 버전부터 AndroidManifest.xml
파일에 android:allowBackup="false"
속성을 명시적으로 선언하여 이 기능을 차단하고 있습니다. 이 설정은 adb backup 명령을 통한 데이터 백업 시도를 무시하도록 시스템에 지시합니다.
그렇다면 이 제한을 우회하여 데이터를 추출할 방법은 없을까요? 한 가지 접근법은 allowBackup
속성이 false
로 설정되지 않은 초기 버전의 카카오톡을 활용하는 것입니다.
- 기존 사용자 데이터를 유지하면서 최신 버전의 카카오톡 앱만 삭제합니다.
adb shell cmd package uninstall -k com.kakao.talk
- allowBackup 기능이 활성화되어 있던 구 버전 카카오톡 APK 파일을 확보하여 설치합니다. 이때, 실수로 실행하여 기존 데이터를 덮어쓰지 않도록 주의해야 합니다.
adb install -r -d [구 버전 카카오톡 APK 파일 경로]
은 앱 재설치,
-r-d
는 앱 다운그레이드 허용을 의미합니다. - 구 버전 앱이 설치된 상태에서
adb backup
명령을 실행하여 데이터 백업을 시도합니다.adb backup -f dump.ab com.kakao.talk
- 백업된 dump.ab 파일을 Android Backup Extractor와 같은 도구를 사용하여 압축 해제합니다.
한계
안드로이드 15 부터 이 방법을 더이상 사용할 수 없습니다.
해당 패치는 안드로이드 15부터 적용되었으며, 앱의 데이터를 유지하고 제거했을 때 원본 앱의 debuggable
상태를 남겨 특수한 경우(앱 또는 기기가 디버그 빌드/Root·System 사용자 권한)가 아니면 다운그레이드를 차단합니다.
결론
allowBackup
플래그로 인해 표준적인 백업 방법이 제한되는 상황에서, 구 버전 앱을 활용한 다운그레이드 기법은 데이터 접근을 위한 하나의 방법입니다.
안드로이드 15 이상은 동작하지 않는다는 한계에도 불구하고, 대부분의 최신 기기가 안드로이드 14에서 15로 넘어가는 과도기적 상황에서 표준적인 포렌식 방법을 사용할 수 없는 경우 유용하게 사용할 수 있을 것입니다.