상세 컨텐츠

본문 제목

맥에서는 됐는데 윈도우에서는 막혔다 — 카카오톡 요약 자동화의 시작, 카톡대화방 복호화1

서버·개발/코드 노트

by 사이 (SAI) 2026. 7. 26. 17:29

본문

728x90
반응형

Mac에서 매일 정해진 시간에 카카오톡 대화방을 요약해 Notion에 발행하는 자동화는 이미 돌아가고 있었습니다.
2026년 7월, 같은 흐름을 Windows에서도 만들려 했지만 시작부터 데이터 구조와 복호화 방식이 달랐습니다.
이 글은 Windows 카카오톡 요약 자동화 4부작의 첫 편으로, 왜 이 작업을 시작했고 세 번의 접근이 어디서 막혔는지 담았습니다.

목표는 화면을 긁는 프로그램이 아니었습니다. 내 PC에 저장된 내 대화를 구조화해 정해진 시간에 요약하는 로컬 자동화였습니다.

Mac에서 되던 일을 왜 Windows로 옮겼을까

Mac에서는 오픈소스 kakao-cli를 고치고 보완해 백그라운드 요약 흐름을 만들었습니다.
날짜별로 대화를 가져오고 요약한 뒤 Notion에 발행하니 매일 놓친 내용을 다시 훑는 시간이 크게 줄었습니다.
문제는 Windows 사용자였습니다.
같은 자동화를 원하거나 관심을 보이는 사람은 많았지만, 현재 Windows KakaoTalk PC 환경에서 그대로 따라갈 만한 해결책을 찾기 어려웠습니다.
그래서 Mac 코드를 단순 이식하기보다 Windows에서 데이터가 저장되고 열리는 방식부터 다시 확인하기로 했습니다.

Mac의 자동 요약 흐름을 보며 Windows 노트북 앞에서 고민하는 고정 2D 남성 개발자


처음부터 화면 자동화를 피한 이유

가장 빠른 길은 화면을 열고 OCR로 글자를 읽거나 마우스와 키보드를 자동 조작하는 방식이었을 겁니다.
하지만 창 위치와 해상도가 바뀌면 깨지기 쉽고, 과거 대화와 사용자·대화방 관계를 안정적으로 다루기도 어렵습니다.
제가 정한 기준은 KakaoTalk PC가 이미 저장한 로컬 DB를 읽고 대화방, 사용자, 메시지를 데이터로 연결하는 것이었습니다.

로컬 KakaoTalk 데이터
→ 대화방·사용자·메시지 매핑
→ 필요한 방과 날짜 선택
→ 요약 자동화
→ Notion 발행

이 구조가 잡혀야 사람이 화면을 보고 있지 않아도 백그라운드 작업으로 이어갈 수 있습니다.

첫 번째 실패는 폴더명 브루트포스였다

처음에는 Windows의 users 폴더명이 userId나 특정 해시 조합으로 만들어진다고 가정했습니다.
folderbrute3.py부터 folderbrute5.py까지 만들고 병렬 계산도 붙였습니다.
테스트 데이터에서는 초당 130,944회 수준으로 값을 되찾았지만 실제 KakaoTalk 폴더명은 맞지 않았습니다.
참고 코드를 다시 읽자 폴더명을 역산하는 부분은 없었습니다.
users 아래에 이미 존재하는 40자 폴더를 나열하면 되는 일을 더 어렵게 풀고 있었습니다.

수많은 폴더명 후보를 계산하다 실제 40자 폴더를 발견한 고정 2D 남성 개발자

728x90


구버전 복호화 공식도 현재 빌드에서는 멈췄다

두 번째로 시도한 것은 공개된 과거 분석 자료의 AES-CBC 방식이었습니다.
userId와 pragma, 실행 파일의 고정 키 후보를 조합해 DB 앞부분에서 SQLite 표식을 찾는 접근이었습니다.
실행 파일을 스캔했지만 현재 설치 버전에서 필요한 고정 키를 찾지 못했습니다.
세 번째로 실행 중인 프로세스에서 숫자와 pragma 후보를 모았지만 실제 DB를 여는 조합은 나오지 않았습니다.

시도 막힌 지점 남은 교훈
폴더명 역산 실제 폴더와 불일치 존재하는 폴더부터 읽기
구버전 고정 키 현재 빌드에서 미발견 버전 차이를 먼저 확인
숫자·pragma 후보 DB header 복호화 실패 키 생성 가정 재검토

폴더명과 고정 키와 숫자 후보 세 갈래가 모두 막힌 화이트보드 앞의 고정 2D 남성 개발자

반응형


실패한 공식 대신 현재 프로그램을 보기로 했다

세 번의 실패 뒤 질문을 바꿨습니다.
과거 공식으로 키를 새로 계산하려 하지 말고, 지금 실행 중인 KakaoTalk이 실제 DB를 열 때 무엇을 쓰는지 보기로 했습니다.
개인적으로는 이 전환이 이번 작업에서 가장 중요한 순간이었다고 봅니다.
실패한 코드를 더 빠르게 만드는 것보다 잘못 잡은 문제를 다시 정의하는 편이 먼저였습니다.

과거 공식이 적힌 메모를 접고 실행 중인 DB 흐름으로 시선을 옮긴 고정 2D 남성 개발자

다음 편에서는 SQLCipher raw key를 직접 회수하는 v2 흐름으로 어떻게 전환했고, 14만 건이 넘는 메시지를 하나의 DB로 모았는지 이어가겠습니다.
 

728x90
반응형

관련글 더보기

댓글 영역