katok은 카카오톡 대화를 내 컴퓨터 안에서만 읽어서 키워드 검색·BM25 검색·의미(벡터) 검색을 할 수 있게 해주는 CLI 도구입니다. 대화 내용을 서버로 보내지 않습니다.
이 저장소는 원본 NomaDamas/katok(Apple Silicon macOS 전용)을 Windows에서도 쓸 수 있게 확장한 포크입니다.
- 검색 엔진(keyword / BM25 / semantic), chunk 분할, 아카이브는 원본과 완전히 동일합니다.
- Windows에서는 데이터를 넣는 입력 방식(소스 어댑터) 만 다릅니다. 아래에서 자세히 설명합니다.
아니요. 이 공개 저장소를 clone해도 macOS katok처럼 "앱을 켜두면 전체 대화가 자동으로 읽혀 검색되는" 것은 되지 않습니다.
- 되는 것: 카카오톡 공식 "대화 내보내기(.txt)" 로 뽑은 파일을 색인해서 검색(keyword/BM25/semantic).
- 안 되는 것: 맥처럼 앱의 로컬 DB를 자동으로 통째 읽는 것. → 의도적으로 넣지 않았습니다.
왜냐하면 Windows 카카오톡의 대화 DB를 자동으로 읽으려면 앱의 보호(Themida)를 우회해 대화를 강제 복호화·추출해야 하는데, 그렇게 얻는 데이터에는 그룹채팅 속 다른 사람들의 메시지(동의하지 않은 제3자) 까지 포함됩니다. 이를 도구로 만들어 배포하는 것은 통신비밀보호법·저작권법(기술적 보호조치 우회) 저촉 소지와 제3자 프라이버시 침해가 있어, 이 저장소는 공식 내보내기 기반의 안전·합법 경로만 제공합니다.
즉 이 저장소로는 "내가 내보낸 내 대화를 내 PC에서 검색" 할 수 있고, 남의 카톡을 몰래 보거나 맥처럼 전체 자동 직독을 하는 용도는 불가능합니다. (자세한 배경은 DEVELOPMENT.md.)
검색 기능 자체는 두 OS가 똑같습니다. 딱 하나, "메시지를 어떻게 가져오느냐"가 다릅니다.
| 구분 | macOS (원본) | Windows (이 포크) |
|---|---|---|
| 데이터 소스 | --source macos — 앱의 로컬 DB를 직접 읽음 |
--source txt — 카카오톡 "대화 내보내기" 로 뽑은 .txt를 읽음 |
| 자동화 | 완전 자동. katok sync 한 번에 전체 대화방 색인 |
수동. 원하는 방을 내보내기 → 그 파일을 sync |
| 범위 | 앱에 있는 모든 대화 | 내가 내보낸 방만 |
| 최신화 | 다시 sync 하면 최신 반영 |
다시 내보내야 갱신 |
macOS 카카오톡의 로컬 DB는 암호화 방식이 공개적으로 알려져 있어서(SQLCipher + 기기 식별자 기반 키) 원본 katok이 자동으로 복호화해 읽습니다.
반면 Windows 카카오톡은 훨씬 강하게 보호되어 있습니다. 실제로 분석해 보면:
- 대화 로그 DB(
chat_data\chatLogs_*.edb)는 별도의 자체 방식으로 암호화되어 있고, 키가 앱 실행 파일 안에 숨겨져 있습니다. - 게다가
KakaoTalk.exe는 Themida라는 상용 보호기로 패킹·코드 가상화되어 있습니다(디스크에서 문자열조차 보이지 않고, 실행 파일의 대부분이 가상머신 바이트코드로 되어 있습니다). 이 때문에 일반적인 정적 분석·디버깅·후킹이 매우 어렵습니다.
즉 macOS는 "문이 잠겨 있지만 열쇠 만드는 법이 공개된" 상태라면, Windows는 "문 자체가 상용 금고로 이중 보호된" 상태입니다. 이 차이가 이 프로젝트에서 가장 어려운 지점이었습니다.
그래서 이 포크는 Windows에서 공식 "대화 내보내기" 기능으로 뽑은 .txt를 검색하는, 안전하고 합법적인 경로를 제공합니다. (앱의 보호를 우회해서 남의 대화까지 긁어오는 도구는 프라이버시·법적 문제로 이 저장소에 포함하지 않습니다. 아래 면책 참고.)
Rust가 필요합니다(rustup).
git clone https://github.com/Hostingglobal-Tech/katok-windows.git
cd katok-windows
cargo build --release
# 결과물: target/release/katok(.exe)Windows에서는 순정 SQLite로 빌드되어 별도 준비물(OpenSSL/perl)이 필요 없습니다. macOS/Linux에서는 원본과 동일하게 SQLCipher 빌드를 씁니다.
- 카카오톡에서 검색하고 싶은 대화방 → 메뉴 → 대화 내용 → 대화 내보내기(.txt) 로 저장합니다.
- 색인하고 검색합니다.
# 내보낸 txt를 색인
katok sync --source txt "C:\path\to\대화방.txt"
# 검색
katok search keyword "계약서"
katok search bm25 "지난주 미팅 자료"
katok search semantic "최근에 논의한 세금 신고 일정"
# 더 넓은 맥락 보기
katok chunk get <chunk-id>
katok chunk context <chunk-id>여러 방을 넣으려면 방마다 내보내기 → 각각 sync 하면 됩니다.
- PC/최신 모바일:
--------------- 2026년 1월 1일 목요일 ---------------날짜 구분선 +[이름] [오전 9:00] 본문 - 구형 모바일:
2026년 1월 1일 오전 9:00, 이름 : 본문
여러 줄 메시지도 이어 붙이고, 시각은 KST(UTC+9)로 해석해 저장합니다.
katok doctor --json
katok sync --source macos --json
katok index --json
katok search semantic "찾고 싶은 내용" --jsonmacOS 상세는 원본 NomaDamas/katok을 참고하세요.
search keyword— 정확한 단어/이름/계좌번호 등 그대로 기억나는 값search bm25— SQLite FTS5 BM25 랭킹, 여러 단어가 섞인 일반 질의search semantic— EmbeddingGemma 로컬 벡터 검색, 표현이 정확히 기억나지 않아도 의미로 검색
세 방식 모두 결과는 짧은 snippet + chunk id만 보여주고, 원문 전체는 katok chunk get을 명시적으로 실행할 때만 출력합니다.
--source txt소스 어댑터 추가 (src/import_txt.rs)- Windows 빌드 대응: Windows 타깃은 순정 SQLite(
rusqlitebundled)로 빌드해 OpenSSL/perl 의존 제거 - 데이터 디렉토리: Windows는
%APPDATA%\katok - 한글 문서
원본의 검색 엔진·chunk·semantic 코드는 그대로 유지했습니다.
- 이 도구는 본인 소유 기기에서, 본인이 정당하게 접근 권한을 가진 대화를 검색하는 개인용/연구용입니다.
- 타인의 대화를 무단으로 열람·수집하는 것은 대한민국 통신비밀보호법·정보통신망법 등에 저촉될 수 있습니다. 절대 그런 용도로 쓰지 마세요.
- 카카오톡 앱의 기술적 보호조치를 우회해 대화 DB를 강제로 복호화·추출하는 코드는 위와 같은 이유로 이 저장소에 포함하지 않습니다. Windows에서는 공식 "대화 내보내기" 기능을 사용하세요.
- 대화 내용은 전부 로컬에만 저장됩니다. 어떤 데이터도 외부로 전송하지 않습니다.
MIT. 원본 저작권 및 검색 엔진 구현은 NomaDamas/katok에 있습니다. 이 저장소는 Windows 지원을 더한 포크입니다.
개발 과정에서 시도한 방법들(성공·실패 포함)의 기술 기록은 DEVELOPMENT.md를 참고하세요.