IceKakao — 카카오톡 PC 대화를 통째로 백업하는 데스크톱 앱 2026.08.20

IceKakao — PC 대화를 내 폴더에 통째로 보관하는 앱 (0.1.3)

저장 폴더와 방 개수를 정하고, 수동 또는 자동으로 카카오톡 PC 대화를 보관한다. 즉시 중단, ROOM_ID별 단일 폴더 갱신, 오프라인 뷰어까지 설치형 프로토타입의 실제 화면으로 정리했다. 공개 판매·배포는 권리와 법률 검토를 위해 보류 중이다.

카카오톡 PC에 남아 있는 대화를, 버튼 몇 번으로 내 폴더에 통째로 옮겨 두는 윈도우용 프로그램을 만들었다. 지금은 0.1.3, 설치해서 쓸 수 있는 상태다.

대화 텍스트만이 아니다. 사진·영상·첨부파일, 방 이름과 사람 이름, 프로필까지 카톡이 보여주던 모양 그대로 저장하고, 저장이 끝나면 index.html 하나를 더블클릭해 인터넷 없이 바로 읽는다.

IceKakao 앱 전체 화면 — 저장 폴더, 방 개수, 수동/자동 버튼, 백업 가능한 대화방 목록

이 글의 화면들은 앱에 내장된 샘플 미리보기 모드로 찍었다. 실제 대화·이름·경로가 아니라 가짜 데이터다.

무엇을 해결하나

카카오톡은 PC의 대화 데이터를 전부 암호화해서 로컬에 저장한다(.edb, .cng). 그래서 내 컴퓨터 안에 분명히 있는데 내가 볼 수는 없는 상태가 된다. 폰을 잃어버리거나 계정에 문제가 생기면 그 대화는 사실상 되찾기 어렵고, 서버에 있던 사진·영상도 대개 2주쯤 지나면 만료된다.

IceKakao는 그 데이터를 본인 PC·본인 계정이라는 조건 위에서 다시 내 손에 돌려주는 도구다. 복호화도 내보내기도 전부 이 컴퓨터 안에서만 일어난다.

먼저 두 가지를 정한다 — 저장 폴더와 방 개수

앱을 켜면 위쪽에 두 개의 설정이 있다.

  • 백업 저장 위치 — 기본값은 내 문서 폴더 아래의 IceKakao. 폴더 변경을 누르면 원하는 드라이브·폴더로 바꿀 수 있고, 다음 백업부터 그 폴더에 쌓인다.
  • 방 개수(1 ~ 500) — 한 번에 훑을 대화방 수. 자동 수집이 최근 방부터 이 수만큼 채운다.

수동 수집과 자동 수집

두 방식이 있다. 차이는 "방을 누가 여느냐" 하나다.

수동 — 카카오톡에서 백업하고 싶은 방을 직접 한 번씩 열어 둔 뒤 대화방 스캔을 누른다. 방금 연 방들이 목록에 뜨고, 원하는 방만 골라 백업 시작을 누른다. 내가 고른 것만 정확히 가져가고 싶을 때 쓴다.

자동자동 수집 시작을 누르면 프로그램이 최근 대화방을 차례로 열어 가며 필요한 것을 확보하고, 그대로 백업까지 이어서 한다. 방이 수십 개일 때 손이 훨씬 덜 간다.

자동 수집 중 화면 — 대화방을 여는 중 3/4, 2/4 READY, 중단 안내

자동 수집 중에는 언제든 즉시 멈출 수 있다

자동 수집은 카카오톡 창을 실제로 조작한다. 그래서 시작하면 화면이 카톡으로 넘어가고, 그 동안 물리 키보드·마우스 입력은 보호된다.

멈추는 방법은 하나만 기억하면 된다 — 마우스 휠(가운데) 버튼 또는 Esc. 누르는 즉시 중단되고, 그때까지 확보한 방은 그대로 목록에 남는다. 화면 아래 안내 문구에도 이 두 가지가 항상 떠 있다.

순회 중 백업할 DB가 없는 가상 항목(오픈채팅 안내 같은 것)은 건너뛰고, 설정한 방 개수를 실제로 백업 가능한 방으로 채운다. 목록 오른쪽의 n / m READY가 지금 몇 개가 준비됐는지 알려 준다.

백업이 만들어지는 과정

백업 시작을 누르면 방마다 진행 막대가 움직인다. 안에서 일어나는 순서는 이렇다.

  1. 안전한 복사본 — 원본 .edb는 건드리지 않고 스냅샷 사본을 뜬다.
  2. 대화 데이터 복호화 — 사본을 평문 SQLite로 연다.
  3. 메시지 정리 — 시간순으로 묶고, 숫자 id를 실제 이름으로 바꾼다.
  4. 미디어 내려받기 — 아직 살아 있는 사진·영상·파일을 media/로 가져온다.
  5. 아카이브 완성 — 뷰어와 원자료를 한 폴더에 묶는다.

끝나면 카드가 결과로 바뀐다. 메시지 몇 개, 미디어 몇 개, 만료 몇 개인지 숫자로 적히고 뷰어 열기·저장 폴더 버튼이 생긴다.

백업 완료 화면 — 메시지 17,479개, 미디어 214개, 만료 18개, 뷰어 열기와 저장 폴더 버튼

만료된 미디어는 감추지 않고 만료로 표기한다. 서버에서 이미 사라진 것을 되살릴 수는 없으니, 몇 개가 그런 상태인지 정직하게 적는 쪽을 택했다.

방 하나가 폴더 하나 — 다시 눌러도 폴더는 하나

저장 폴더 아래에는 방 제목__ROOM_ID 형태의 폴더가 방마다 하나씩 생긴다.

산출물 구조 — 방 하나가 폴더 하나. index.html, conversation.json, conversation.txt, media/, report.txt, verification 파일이 들어간다

같은 방을 다시 백업하면 새 번호 폴더가 생기지 않고 그 폴더가 갱신된다. 방 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 — 윈도우가 안정된 뒤에.

만드는 동안 가장 신경 쓴 것은 화려한 기능이 아니라 "눌렀을 때 무슨 일이 일어나는지 사용자가 알 수 있는가"였다. 진행 막대의 단어들, 완료 카드의 숫자, 만료 표기, 중단 방법을 화면에 계속 띄워 두는 것 전부 그 이유다.

IceKakao — 카카오톡 PC 대화를 통째로 백업하는 데스크톱 앱 프로젝트로