IceKakao — PC 대화를 내 폴더에 통째로 보관하는 앱 (0.1.3)
저장 폴더와 방 개수를 정하고, 수동 또는 자동으로 카카오톡 PC 대화를 보관한다. 즉시 중단, ROOM_ID별 단일 폴더 갱신, 오프라인 뷰어까지 설치형 프로토타입의 실제 화면으로 정리했다. 공개 판매·배포는 권리와 법률 검토를 위해 보류 중이다.
카카오톡 PC에 남아 있는 대화를, 버튼 몇 번으로 내 폴더에 통째로 옮겨 두는 윈도우용 프로그램을 만들었다. 지금은 0.1.3, 설치해서 쓸 수 있는 상태다.
대화 텍스트만이 아니다. 사진·영상·첨부파일, 방 이름과 사람 이름, 프로필까지 카톡이 보여주던 모양 그대로 저장하고, 저장이 끝나면 index.html 하나를 더블클릭해 인터넷 없이 바로 읽는다.

이 글의 화면들은 앱에 내장된 샘플 미리보기 모드로 찍었다. 실제 대화·이름·경로가 아니라 가짜 데이터다.
무엇을 해결하나
카카오톡은 PC의 대화 데이터를 전부 암호화해서 로컬에 저장한다(.edb, .cng). 그래서 내 컴퓨터 안에 분명히 있는데 내가 볼 수는 없는 상태가 된다. 폰을 잃어버리거나 계정에 문제가 생기면 그 대화는 사실상 되찾기 어렵고, 서버에 있던 사진·영상도 대개 2주쯤 지나면 만료된다.
IceKakao는 그 데이터를 본인 PC·본인 계정이라는 조건 위에서 다시 내 손에 돌려주는 도구다. 복호화도 내보내기도 전부 이 컴퓨터 안에서만 일어난다.
먼저 두 가지를 정한다 — 저장 폴더와 방 개수
앱을 켜면 위쪽에 두 개의 설정이 있다.
- 백업 저장 위치 — 기본값은 내
문서폴더 아래의IceKakao.폴더 변경을 누르면 원하는 드라이브·폴더로 바꿀 수 있고, 다음 백업부터 그 폴더에 쌓인다. - 방 개수(1 ~ 500) — 한 번에 훑을 대화방 수. 자동 수집이 최근 방부터 이 수만큼 채운다.
수동 수집과 자동 수집
두 방식이 있다. 차이는 "방을 누가 여느냐" 하나다.
수동 — 카카오톡에서 백업하고 싶은 방을 직접 한 번씩 열어 둔 뒤 대화방 스캔을 누른다. 방금 연 방들이 목록에 뜨고, 원하는 방만 골라 백업 시작을 누른다. 내가 고른 것만 정확히 가져가고 싶을 때 쓴다.
자동 — 자동 수집 시작을 누르면 프로그램이 최근 대화방을 차례로 열어 가며 필요한 것을 확보하고, 그대로 백업까지 이어서 한다. 방이 수십 개일 때 손이 훨씬 덜 간다.

자동 수집 중에는 언제든 즉시 멈출 수 있다
자동 수집은 카카오톡 창을 실제로 조작한다. 그래서 시작하면 화면이 카톡으로 넘어가고, 그 동안 물리 키보드·마우스 입력은 보호된다.
멈추는 방법은 하나만 기억하면 된다 — 마우스 휠(가운데) 버튼 또는 Esc. 누르는 즉시 중단되고, 그때까지 확보한 방은 그대로 목록에 남는다. 화면 아래 안내 문구에도 이 두 가지가 항상 떠 있다.
순회 중 백업할 DB가 없는 가상 항목(오픈채팅 안내 같은 것)은 건너뛰고, 설정한 방 개수를 실제로 백업 가능한 방으로 채운다. 목록 오른쪽의 n / m READY가 지금 몇 개가 준비됐는지 알려 준다.
백업이 만들어지는 과정
백업 시작을 누르면 방마다 진행 막대가 움직인다. 안에서 일어나는 순서는 이렇다.
- 안전한 복사본 — 원본
.edb는 건드리지 않고 스냅샷 사본을 뜬다. - 대화 데이터 복호화 — 사본을 평문 SQLite로 연다.
- 메시지 정리 — 시간순으로 묶고, 숫자 id를 실제 이름으로 바꾼다.
- 미디어 내려받기 — 아직 살아 있는 사진·영상·파일을
media/로 가져온다. - 아카이브 완성 — 뷰어와 원자료를 한 폴더에 묶는다.
끝나면 카드가 결과로 바뀐다. 메시지 몇 개, 미디어 몇 개, 만료 몇 개인지 숫자로 적히고 뷰어 열기·저장 폴더 버튼이 생긴다.

만료된 미디어는 감추지 않고 만료로 표기한다. 서버에서 이미 사라진 것을 되살릴 수는 없으니, 몇 개가 그런 상태인지 정직하게 적는 쪽을 택했다.
방 하나가 폴더 하나 — 다시 눌러도 폴더는 하나
저장 폴더 아래에는 방 제목__ROOM_ID 형태의 폴더가 방마다 하나씩 생긴다.

같은 방을 다시 백업하면 새 번호 폴더가 생기지 않고 그 폴더가 갱신된다. 방 ID가 폴더의 이름표라, 같은 ID면 같은 폴더로 들어간다.
아이스 프로젝트__57102 ← 늘 이 폴더 하나가 갱신된다
아이스 프로젝트__57102__2 ← 예전 사본. 다음 백업 때 위로 합쳐진다
합칠 때 이미 받아 둔 미디어는 지우지 않는다. 서버 링크가 만료돼 지금은 못 받는 사진이라도, 예전 백업에 남아 있으면 그대로 옮겨 온다. 이게 재백업을 반복할수록 아카이브가 오히려 두꺼워지는 이유다.
폴더에 들어가는 것:
| 파일 | 쓰임 |
|---|---|
index.html | 오프라인 뷰어. 더블클릭하면 바로 열린다 |
conversation.json | 원자료. 다른 도구로 재가공할 때 |
conversation.txt | 검색·인쇄용 평문 |
media/ | 사진·영상·파일·프로필 이미지 |
report.txt | 무엇을 얼마나 담았는지 |
verification.json · .txt | 검증 기록 |
오프라인 뷰어
index.html을 열면 카카오톡처럼 생긴 화면이 나온다. 인터넷도, 카카오톡도 필요 없다.

- 말풍선과 날짜 구분선, 시간 표기
- 실제 방 이름과 발신자 이름, 프로필 이미지
- 내가 보낸 메시지는 오른쪽에 노란 말풍선으로
- 사진·영상은 그 자리에서 재생, 파일은 클릭해서 저장
- 삭제된 메시지는 "삭제된 메시지입니다"로, 만료 미디어는 만료 표시로
위쪽 검색창에 단어를 넣으면 해당 메시지만 남고 검색어가 하이라이트된다. 로컬 파일이라 반응도 즉시다.

어떻게 가능한가 — Phase 0에서 확인한 것
이 프로젝트를 시작할 때 가장 무서운 질문은 "애초에 복호화가 되긴 하나?"였다. 그 답부터 냈고, 실제 대화방 하나를 1,371개 메시지 전부 평문으로 복원해 증명했다.
확인한 사실:
- 카톡 PC 대화 DB는 표준 SQLCipher 4다.
cipher_page_size=4096,PBKDF2-HMAC-SHA512,kdf_iter=256000, per-file salt(파일 앞 16바이트). - 복호화 키는 방(.edb)마다 다르다. 32바이트 raw key를 카톡이 네이티브로 계산해 SQLCipher에 직접 주입한다. pragma·userId·chatId·salt 조합으로 역산하려던 시도는 실패했다.
- 그래서 택한 길은 실행 중인 카톡의 메모리에서 키를 찾는 것이다. 스캔한 후보로 page 1을 복호화해 SQLite 헤더가 나오는지로 검증한다. 카톡이 켜져 있어야 하고, 최근에 연 방만 메모리에 올라오는 이유도 여기 있다 — 자동 수집이 방을 차례로 여는 것은 그래서다.
- 이름은 같은 키로 열리는 별도의 DB 두 개에서 온다.
chatListInfo.edb가 방 제목과 멤버를,TalkUserDB.edb가 사람 이름과 프로필을 준다. 표시 우선순위는 내가 저장한 이름 → 닉네임 →알 수 없음(id). "나와의 채팅" 방의 유일한 멤버가 내 userId라는 점으로 본인을 찾는다.
이전 글에서 "방 순회 자동화는 남은 과제"라고 적었던 부분은 지금 사실과 다르다. 자동 수집은 구현돼 0.1.3에 들어 있다. 위 화면들이 그 기능이다.
로컬 처리 · 원본 불변 · 쓰기 전에 알아 둘 것
- 대화 데이터는 어떤 서버로도 전송되지 않는다. 복호화와 내보내기 모두 이 컴퓨터 안에서 끝난다. 네트워크를 쓰는 곳은 아직 만료되지 않은 미디어를 카카오 CDN에서 내려받을 때뿐이다.
- 원본은 수정하지 않는다. 카톡의
.edb는 읽기만 하고, 실제 작업은 스냅샷 사본에서 한다. - 본인 PC·본인 계정의 개인 백업 용도로만 쓰기 바란다. 남의 대화를 가져오는 용도가 아니다.
- 자동 수집이 도는 동안에는 카카오톡 창이 조작되므로, 그 시간에는 컴퓨터를 다른 일에 쓰지 않는 편이 낫다.
지금 상태와 다음
설치본은 0.1.3, Windows 10 / 11 (x64) 용 NSIS 인스톨러다.
다만 이 설치본을 공개 판매하거나 널리 배포하는 일은 현재 보류하고 있다. 카카오톡 데이터 처리와 자동 조작 방식에 관한 권리·법률 쟁점을 먼저 검토한 뒤 공개 범위를 결정할 예정이다. 지금 단계는 개인적인 로컬 백업 도구로 완성도를 검증한 설치형 프로토타입이다.
아직 코드 서명을 하지 않았기 때문에 설치할 때 SmartScreen 경고가 뜰 수 있다. 인증서를 붙이는 것이 다음 순서 중 하나다.
남은 과제:
- 코드 서명 — SmartScreen 경고 제거
- 만료 미디어(
.cng) 복구 — 현재 빌드의.cng암호화가 과거에 알려진 방식과 달라졌다. 별도 리버싱이 필요해 후순위로 두었다. 되면 보너스지 전제는 아니다. - 상시 아카이버 — 서버 미디어가 2주면 만료되니, 주기적으로 모아 두는 쪽이 결국 더 쓸모 있다.
- macOS — 윈도우가 안정된 뒤에.
만드는 동안 가장 신경 쓴 것은 화려한 기능이 아니라 "눌렀을 때 무슨 일이 일어나는지 사용자가 알 수 있는가"였다. 진행 막대의 단어들, 완료 카드의 숫자, 만료 표기, 중단 방법을 화면에 계속 띄워 두는 것 전부 그 이유다.