SQLite는 소형 모바일(포터블) db다. 엔터프라이즈급의 성능은 안나와도 간편히 활용하기 적절하게 되어있다.
때문에 많은 프로그램에서 이를 이용하고 있다. 인터넷 브라우저들(파이어폭스, 크롬 등)이 대표적이긴한데,
모바일 앱들은 대부분이 이를 활용하고 있다. 물론 SQLite급으로 다른 애들도 많이 있지만, 라이센스 문제 때문일지
아무튼 많이들 쓰고 있다. iOS, 안드로이드 가리지 않는다.
때문에 소위 '증거'가 그 안에서 튀어 나올 가능성이 굉장히 높아진다.
실제로 SQLite 카빙으로 재미를 좀 봐서 신나는 마음으로 공유하지만, 귀찮은 일은 최대한 자제하며
어쩐일인지 실무에서 급히 만들었던 코드들이 싹다 지워졌고-_-;;; 찾을수가 없어서 어쩔수 없이 대충 다시
올리신 글을 보게 되었는데, 이거 나는 독자들을 전혀 고려하지 않는 막되먹은 블로거였구나 하는 반성에 휩싸였다.
결국 임시 일회용 코드를 재사용 가능한 형태로 좀 바꾸고 뻔한 오류도 좀 수정도 하고... 유니코드 문제 같은
일반적인 문제들도 좀 대충 손보고 해서 만들었다. 난 프로니어님 처럼 w32는 안되겠고 역시 파이썬으로...
□ 사전 자료 조사
역시 마찬가지로 원래 아는게 없으니깐 자료 조사가 필요했다. 당장 분석 해야 할때 이 짓을 하니 답답하긴 하더라.
진짜 검색 아무리 해봐야 위에 정보가 딱이다. 이쪽 관심 있으신 분들은 소시지 아저씨랑 임성수님 자료만
잘 보시면 될 듯 싶다. 이런게 먼저 나와서 다행히 좀 시간 절약을 했다.
고대에서 만든 도구가 있긴할꺼 같은데... (자주)구걸하기도 좀 그렇고 해서...
□ Carving
비할당 영역 뽑는거나 카빙 대상 선정은
예전 포스팅을 참고하시면 될 것 같고... 아무튼 짠 코드..짜잔
오해를 하지 말아야 할 부분이...
삭제된 레코드를 카빙하는게 아니고 그냥 삭제 파일을 카빙하는 것이란 것!sqlite3f_carver.py
원래 소스 파일이랑 결과 폴더는 하드코딩 하는데 어쩔수 없이? 입력으로 받았어요.
테스트 데이터로 몇가지 실무 데이터를 써봤는데 그럭저럭 잘됩니다. 여기선 어디선가? 문제용으로 제출된
아이폰 이미지입니다.
카빙하면서 carved+offset으로 파일명에 저장해요.

카빙이 끝나면 몇개 했는지 알려주죠. 제법 많이 됩니다.

근데 오탐이 많아요. 눈으로 봐도 오탐같은애가 많죠?-_-
하지만 이중에 중요한 증거들이 많이 나온답니다.
□ Report
위에서 본대로 적게는 200개 때론 1,000여개를 웃도는 파일을 카빙했는데, 이걸 일일히 열어보다가
눈도 무진장 아프고, 빡쳐서 하나 더 만들었다.
sqlite3f_report.py
각 파일별로 돌아가면서 테이블 목록을 얻고 테이블마다 샘플 레코드를 뽑아 출력합니다.
sqlite3 연결시나 쿼리 실행 중에 오류나는건 따로 표기하고요. 여기서 오탐 된건 버릴수 있지요.
역시 끝나면 통계를 알려줘요.

결과 파일을 보면 아래 처럼 뽑아주는데, 한글을 위해 유니코드는 UTF-8로 변환해서 출력합니다.
사실 그런 부분까진 원래 코드에 없었는데 이번에 삽질하면서 만듬 ㅠㅠ
□ 후기
이걸 어따 쓰나 하고 보고 계신분도 나중에 SQLite 카빙할 필요 있을때 번뜩 생각나서 다운 받는 날이 오실것임
특히 카빙과 상관없이 sqlite3f_report는 무진장 유용=_=
이런게 아직도 없었다는게 한탄스러울뿐... 앞으로도 필요한건 그때 그때 만들고 모아야겠다.
도덕적으로 완벽한 코드라서 허점을 남기면 안되지만 기반 지식 부족과 코딩 실력 부족으로 오류가 반드시
있을텐대 혹시 돌리시다가 문제 있는건 알려주세요.
최근 덧글