네이버 메일을 실시간으로 확인하고 싶다면 당연히 네이버 메일 앱이 아닐까, 앱스토어에서 배포되는 네이버 메일 앱에서 삭제된 메일을 복구해보자!테스트 환경 : 삼성 갤럭시 S7(SM-G930S) 안드로이드 버전 : 9.0 애플리케이션 버전 : 2.2.2 설치 경로 : /data/com.nhn.android.mail 네이버 앱의 내부 스토리지(Internal Storage)는 /data/com.nhn.android.mail에 위치하며, Databases 디렉토리에 db 파일이 저장되어 있다. 16진수 난수로 존재하는 .db 파일이 네이버 메일 앱에서 사용중인 sqlite db 파일이다.db-journal은 DB 파일의 재널링 파일이다..db 파일을 sqlite3 browser 프로그램에서 열어보면 6개의 테이블을 확인할 수 있는데 이 중 포렌식적으로 의미 있는 테이블은 Attachment(첨부파일), Folder(메일폴더), Mail(메일내용) 테이블이다.메일의 복구나 분석에 의미가 없거나 분석하지 못한 칼럼은 제외하고 리뷰한다.폴더 테이블폴더 Name이 폴더 이름을 정의하고 폴더 SN은 폴더 고유 번호다. Attachment 테이블메일과 함께 보낼 첨부파일에 대한 정보가 있다. mailSN은 메일의 고유번호이며 fileName은 파일명, storedPath는 안드로이드에 저장된 파일의 경로이다. 파일을 저장하지 않으면 storedPath는 아무런 값이 없고 파일을 저장하면 파일 경로가 저장된다.각 레코드가 folder SN을 통해 논리적으로 나뉘는데, 예를 들어 첫 번째 레코드의 rekal 에러 2.png을 보낸 메일은 휴지통(folder SN=4)에 저장되어 있고 shcard_~~.html를 보낸 메일은 수신함(folder SN=0)에 저장되어 있다.메일 테이블실제 주고받은 메일이 평문으로 저장된 테이블이다. 각 메일은 mailSN으로 구분되어 실제로 메일 내용을 한번이라도 읽어 보면 htmlbody에 메일 내용이 보존되어 있으며, fullySynced에 1이 세팅된다.( 읽지 않으면 0이 세팅)※모바일 기기(네이버 메일 앱)에서 읽은 것이 fullySynced와 htmlbody의 데이터가 바뀔 뿐이다. 네이버 웹 메일에서 읽은 것은 변하지 않는 preview는 메일 목록에서 짧지만 보이는 메일 내용이며, 전체 내용을 포함하지 않는다. toList와 fromInfo에 수, 발신자의 e-mail주소와 네이버에서 표시되는 이름이 보존되어 있다. attachSimpleList에 첨부된 파일의 contentType, FileSize, FileName등의 첨부 파일 정보가 key:value형식으로 저장되고 있다.시간 정보는 receivedTime, sentTime, firstLocatedTime과 같은 칼럼에 저장되며, Unix Epoch Time을 사용한다. 이하의 파이썬 스크립트를 사용하거나 sqlite에서 간단한 쿼리 문에서 쉽게 풀이된다.#!/usr/bin/ipv3 インポート timevar = 1582502473print(time.strftime(“%Y/%m/%d %H:%M:%S”,time.localtime(var))#!/usr/bin/ipv3 インポート timevar = 1582502473print(time.strftime(“%Y/%m/%d %H:%M:%S”,time.localtime(var))모든 컬럼을 리뷰한 것은 아니고 대략적으로 사용자가 메일 앱에서 나타나는 컬럼 위주로 확인해봤다. 휴대전화로 출력되는 정보보다 많은 정보가 DB에 담겨 있어 놀라울 따름이다. 이제 주요 테이블과 컬럼을 확인했으니 삭제된 메일 데이터 복구를 진행해보자!테스트는 이하의 순서로 진행된다. ※미리 rooting 되어 있는 1. 네이버 메일 앱에서 ‘휴지통 비우기’ 기능을 사용하여 휴지통에 있는 모든 메일을 삭제하기 2. 휴대폰을 종료시킨다.3. 네이버 메일 앱에서 사용 중인 sqlite db와 자넬링 파일을 추출해 복구를 시도한다.테스트로 메일을 주고받고 만들어봐야겠지만 너무 번거로워 실제 본인이 주고받은 메일을 복구할 것이다.PC웹메일로 확인해봐도 메일은 삭제되어있다복구 대상은 최00씨의 메일이다. 네이버 메일 앱에서 메일을 휴지통에 보낸 뒤 메뉴에서 휴지통 비우기 기능을 사용해 메일을 영원히 삭제한다. bye bye 삭제전삭제 후DB에서도 말끔히 사라져 버렸다.복구 방법은 간단하다. 우선 .db와 .db-journal 파일을 문자열 검색으로도 가능한데 우선 네이버 메일 앱에서 안전한 삭제를 지원하는지 확인해야 한다. 확인 방법은 네이버 메일 앱의 apk를 디컴파일하여 deletestatement에 pragma secure_delete=on, 1, true 등 안전한 삭제 여부를 미리 정의했는지 확인해야 한다.예는 카카오톡의 secure_delete인지 아닌지만약 secure_delete가 활성화되어 있다면.db 파일 내 삭제와 동시에 0x00로 덮어쓰기 때문.db로는 복구가 불가능하다.네이버 메일 앱에서는 시큐어_delete 관련 문자열이 검색되지 않아 해당 sqlite 기능을 사용하지 않은 것으로 추측할 수 있다. 그러나 이번 경우에는 .db에서 삭제된 레코드를 찾을 수 없었다. 여러 문자열이 검색되었지만 주고받은 메시지가 있을 뿐 찾으려는 메일은 없었다..db-journal에서 해답을 찾아보자. 찾고자 하는 레코드의 from Address 값인 [email protected] 에서 검색해보면 삭제된 레코드를 쉽게 찾을 수 있다. 메일 테이블의 컬럼과 비교해 보면 데이터가 차례로 존재하는 것을 알 수 있다. ※값이 0이나 null은 표시되지 않는다포스팅 후의 시점까지 5개의 메일을 삭제하고 복구 했으며, 4개는 복구가 가능하고 1개는 불가능했다. 5사례 모두 메일을 삭제한 후, 재기동시키고 복구에 나섰다.※수신해야 한다는 환경을 만들기 위해서 일부러 재기동한 뒤 복구 내가 네이버 메일을 삭제한 것에 복구해야 할 일이 있으면 다음 조건을 충족하는지 보고 복구를 진행하자.※어떤 툴, 어떤 장비로 메일을 삭제해도 상관 없어 1. 자신의 안드로이드 휴대 전화로 앱의 내부 스토리지(/data/data/)까지 접근할 수 있다. or라우팅 가능한 기종이다. 2. 메일 삭제 이전에 앱에서 복구하려는 전자 메일을 드래그 하면서 잠시 엇갈렸다. 3. 메일 삭제 이전에 앱으로 메일의 내용을 확인한 바 있다. 2회까지 만족하면 메일 폴더에서 확인한 메일 preview까지 복구가 가능하다.3회까지 만족하면 메일의 내용 전체를 복구할 수 있다.삭제된 메일 제목, 내용, 수/발신자에 들어갈 문자열을 일부 기억하면 db에서 삭제된 데이터를 찾기가 용이하다.
![[유닉스/리눅스] RSync 명령어 사용법 [유닉스/리눅스] RSync 명령어 사용법](https://zip.chaor.kr/wp-content/plugins/contextual-related-posts/default.png)
