wx-favorites-report 실측: WeChat 즐겨찾기 시각화 도구, 원클릭 인터랙티브 보고서 생성
WeChat 즐겨찾기에 도대체 얼마나 많은 것이 숨겨져 있는지 궁금한 적이 있나요? 무심코 저장한 글, 동영상, 링크 중 다시 열어보지 않은 것이 얼마나 될까요?
wx-favorites-report는 오픈소스 WeChat 즐겨찾기 시각화 도구로, 암호화된 WeChat Mac 로컬 데이터베이스에서 엔드투엔드 복호화 및 데이터 파싱을 수행하고 7가지 차트가 포함된 인터랙티브 HTML 보고서를 생성합니다. 간단히 말해 — WeChat 즐겨찾기를 ‘블랙박스’에서 ‘대시보드’로 바꿔줍니다.
1. wx-favorites-report란 무엇인가
wx-favorites-report는 개발자 zhuyansen이 오픈소스로 공개한 도구로, 처음에는 Claude Code의 Skill로 출시된 후 claude-code-skills-zh 등의 오픈소스 프로젝트에 통합되었습니다.
핵심 기능은 세 단계로 요약할 수 있습니다:
- 복호화: WeChat Mac 클라이언트의 암호화된 데이터베이스(SQLCipher)에서 키를 추출하여 복호화
- 파싱: SQLite의 XML 구조화 데이터를 통합 JSON으로 변환
- 시각화: 통계 대시보드, 월별 트렌드, 유형 분포 등을 포함한 단일 파일 HTML 보고서 생성
전체 과정을 자동으로 완료할 수 있습니다 — Claude Code를 사용한다면 “WeChat 즐겨찾기 시각화”라고 말 한마디만 하면 도구가 전체 프로세스를 자동으로 실행합니다.
2. 핵심 기능 상세
2.1 데이터 추출: 암호화된 DB에서 평문으로
WeChat Mac 4.x의 즐겨찾기 데이터는 SQLCipher로 암호화된 SQLite 데이터베이스에 저장됩니다. wx-favorites-report는 frida 동적 주입 기술을 사용하여 WeChat의 CCKeyDerivationPBKDF 함수를 후킹하고, 실행 시 키 파생 프로세스를 캡처합니다.
# 의존성 설치
pip3 install frida frida-tools pycryptodome
# WeChat 서명 사본 준비 (Hardened Runtime 우회)
cp -R /Applications/WeChat.app ~/Desktop/WeChat.app
codesign --force --deep --sign - ~/Desktop/WeChat.app
복호화 파라미터는 SQLCipher 4 표준입니다: AES-256-CBC 암호화, HMAC-SHA512 검증, PBKDF2 256,000회 반복.
2.2 통계 대시보드
보고서 첫 페이지는 네 가지 핵심 지표를 보여주는 데이터 개요 패널입니다:
- 즐겨찾기 총 수: 총 몇 개의 콘텐츠를 저장했는지
- 경과 일수: 첫 번째 즐겨찾기부터 현재까지의 기간
- 일일 평균 즐겨찾기: 하루 평균 몇 개를 저장하는지
- 출처 수: 즐겨찾기 콘텐츠가 몇 개의 서로 다른 출처에서 왔는지
2.3 7가지 시각화 차트
| 차트 유형 | 표시 내용 | 상호작용 방식 |
|---|---|---|
| 월별 트렌드 | 월별 즐겨찾기 수 변화 | 꺾은선 + 영역 그래프 |
| 유형 분포 | 글/동영상/링크/이미지 비율 | 도넛 차트 |
| 출처 순위 | 즐겨찾기 출처 Top 15 | 수평 막대 그래프 |
| 활동 히트맵 | 요일 × 시간 즐겨찾기 빈도 | 히트 매트릭스 |
| 시간대 분포 | 하루 중 즐겨찾기 피크 시간대 | 이중 막대 그래프 |
| 워드 클라우드 | 제목과 설명에서 키워드 추출 | 인터랙티브 워드 클라우드 |
| 태그 클라우드 | WeChat 즐겨찾기 태그 분포 | 클릭 가능한 태그 |
2.4 즐겨찾기 브라우저
보고서 하단에는 완전한 기능을 갖춘 즐겨찾기 브라우저가 있으며, 다음을 지원합니다:
- 유형별 필터링 (글/동영상/링크/이미지)
- 태그별 필터링
- 전체 텍스트 검색
- 다양한 정렬 방식
- 페이지네이션 브라우징
- 카드 클릭으로 전체 콘텐츠 및 원문 링크 확인
3. 기술 원리
3.1 WeChat 데이터베이스 구조
WeChat Mac 4.x의 즐겨찾기 데이터는 favorite.db에 저장되며, 경로는 다음과 같습니다:
~/Library/Containers/com.tencent.xinWeChat/Data/Documents/
xwechat_files/<wxid>/db_storage/favorite/favorite.db
3.x 버전이 FavItems + FavDataItem 이중 테이블 구조를 사용한 것과 달리, 4.x는 fav_db_item 단일 테이블로 변경되었으며, 콘텐츠 필드는 XML 형식입니다.
3.2 키 추출의 6단계 반복
이것은 전체 프로젝트에서 가장 어려운 부분입니다. 개발자는 6번의 시도를 거쳤습니다:
| 단계 | 방법 | 결과 |
|---|---|---|
| 1 | C 메모리 스캔 x’hex’ 형식 | 실패: WeChat 4.x는 이 형식을 사용하지 않음 |
| 2 | 원시 salt 바이트 검색 | 실패: ASCII 문자열과 오매칭 |
| 3 | HMAC 무차별 대입 검증 | 실패: 필터 조건이 실제 위치를 건너뜀 |
| 4 | 필터 없는 무차별 검색 | 실패: 키는 PBKDF2 파생 후 저장됨 |
| 5 | DYLD hook / lldb | 실패: macOS SIP가 차단 |
| 6 | frida + CCKeyDerivationPBKDF | 성공 |
최종 솔루션은 frida hook으로 시스템 수준 PBKDF2 함수를 후킹하여 WeChat 시작 시 키 파생 프로세스를 캡처합니다.
3.3 데이터 처리 흐름
암호화된 DB → frida 키 추출 → PyCryptodome 복호화 → SQLite 읽기
→ XML 파싱 → 통합 JSON → ECharts 렌더링 → 단일 파일 HTML
4. 설치 및 배포
4.1 환경 요구사항
| 조건 | 설명 |
|---|---|
| 운영체제 | macOS (Apple Silicon 또는 Intel) |
| WeChat 버전 | Mac 4.x 로그인 완료 |
| Python | 3.9+ |
| 선택 사항 | Claude Code (원클릭 실행) |
4.2 수동 설치 단계
1단계: Python 의존성 설치
pip3 install frida frida-tools pycryptodome
2단계: WeChat 서명 사본 준비
cp -R /Applications/WeChat.app ~/Desktop/WeChat.app
codesign --force --deep --sign - ~/Desktop/WeChat.app
3단계: 키 추출
killall WeChat 2>/dev/null; sleep 2
# frida hook 스크립트 실행
# WeChat 시작 후: 로그인 → '즐겨찾기' 페이지 열기 → 60초 대기
4단계: 복호화 및 보고서 생성
# 데이터 파싱
python3 parse_favorites.py --input favorite_decrypted.db --output data.json
# HTML 보고서 생성
python3 generate_report.py --input data.json --output report.html
# 로컬 미리보기
python3 -m http.server 8765
# 브라우저에서 http://localhost:8765/report.html 열기
4.3 Claude Code 원클릭 실행
Claude Code가 설치되어 있다면, 대화에서 이렇게 말하면 됩니다:
WeChat 즐겨찾기 시각화
Claude가 키 추출, 복호화, 파싱, 보고서 생성의 전체 프로세스를 자동으로 완료합니다.
5. 실전 튜토리얼: 첫 번째 즐겨찾기 보고서 생성하기
5.1 데이터 추출
frida 스크립트 실행 후 WeChat이 재시작됩니다. 이때 다음을 수행해야 합니다:
- WeChat 로그인 (QR 코드 스캔 또는 확인)
- 왼쪽 ‘즐겨찾기’ 탭 클릭
- frida가 키를 캡처할 수 있도록 60초 대기
키는 /tmp/wechat_frida_keys.log에 저장되며, salt 매칭을 통해 favorite.db에 해당하는 enc_key를 찾습니다.
5.2 데이터베이스 복호화
Python으로 복호화:
from Crypto.Cipher import AES
import hashlib
# frida 로그에서 enc_key와 salt 가져오기
enc_key = bytes.fromhex("your_enc_key_here")
# SQLCipher 4 파라미터
kdf_iter = 256000
page_size = 4096
reserve_size = 80 # IV(16) + HMAC(64)
# 페이지별 복호화...
5.3 보고서 생성 및 커스터마이징
python3 generate_report.py --input data.json --output report.html
생성된 보고서는 단일 파일 HTML로, 모든 CSS와 JavaScript가 인라인되어 있어 더블클릭으로 바로 열 수 있으며, 어떤 정적 호스팅 서비스에도 업로드할 수 있습니다.
6. 보고서 해석: 즐겨찾기 데이터 분석 방법
6.1 사용 습관 발견
활동 히트맵을 통해 다음을 발견할 수 있습니다:
- 평일에 더 많이 저장하는가, 주말에 더 많이 저장하는가?
- 하루 중 어느 시간대가 즐겨찾기 피크 시간인가?
- ‘심야에 스마트폰을 보며 미친 듯이 즐겨찾기’하는 패턴이 있는가?
6.2 콘텐츠 선호도 분석
유형 분포 차트는 당신의 즐겨찾기 선호도를 보여줍니다:
- 글이 80% 이상을 차지한다면 ‘심층 독서형’ 사용자
- 동영상 비율이 높다면 ‘조각화 학습’ 선호
- 링크 비율이 높다면 ‘도구 모음’ 성격이 강함
6.3 출처 품질 평가
출처 순위 Top 15는 다음을 식별하는 데 도움이 됩니다:
- 어떤 공식 계정/웹사이트를 가장 자주 즐겨찾기하는가?
- 이 출처들의 콘텐츠 품질이 지속적으로 안정적인가?
- 팔로우를 취소하거나 RSS 구독에 추가할 가치가 있는 출처가 있는가?
7. 다른 WeChat 데이터 도구와의 비교
| 도구 | 데이터 유형 | 플랫폼 | 시각화 | 난이도 |
|---|---|---|---|---|
| wx-favorites-report | 즐겨찾기 | Mac | ⭐⭐⭐⭐⭐ | 중 |
| WeChatMsg | 채팅 기록 | Windows | ⭐⭐⭐ | 중 |
| PyWxDump | 채팅 기록+연락처 | Windows | ⭐⭐ | 높음 |
| WeChat 기본 즐겨찾기 검색 | 즐겨찾기 | 전 플랫폼 | ⭐ | 낮음 |
wx-favorites-report의 고유한 장점은:
- 즐겨찾기 시나리오에 집중: 채팅 기록 도구처럼 방대하고 복잡하지 않음
- 높은 시각화 품질: 7가지 전문 차트, WeChat 기본 목록 검색을 훨씬 초과
- 단일 파일 출력: 추가 소프트웨어 설치 없이 바로 확인 가능
- Claude Code 통합: 말 한마디로 전체 프로세스 완료
WeChat 채팅 기록에도 관심이 있다면, 이전 기사 PyWxDump 실측을 참고하세요.
8. 활용 시나리오
8.1 개인 데이터 관리
정기적으로 즐겨찾기 보고서를 생성하면 다음에 도움이 됩니다:
- 만료되었거나 불필요한 즐겨찾기 정리
- 잊혀진 양질의 콘텐츠 발견
- 개인 지식 베이스를 위한 소재 목록 구축
8.2 콘텐츠 정리
콘텐츠 크리에이터라면, 즐겨찾기 보고서로 다음을 할 수 있습니다:
- 관심 있는 분야와 주제 분석
- 콘텐츠 영감의 출처 패턴 발견
- 주제 선정에 데이터 기반 지원 제공
8.3 사용 습관 분석
데이터에서 자신의 정보 소비 패턴을 성찰할 수 있습니다:
- ‘즐겨찾기 = 망각’인가?
- 즐겨찾기 행동이 불안감과 관련이 있는가?
- 더 효과적인 정보 관리 시스템을 어떻게 구축할 수 있는가?
9. 한계점 및 주의사항
9.1 플랫폼 제한
- macOS만 지원: 키 추출은 frida와 macOS WeChat 클라이언트에 의존
- WeChat 버전 요구사항: 현재 Mac 4.x에 적응, 3.x는 테이블 구조가 다름
- WeChat 로그인 필요: 사용 중인 WeChat 계정이 있어야 함
9.2 데이터 프라이버시
- 모든 데이터 처리는 로컬에서 완료되며 어떤 서버에도 업로드되지 않음
- 보고서 HTML 파일에는 즐겨찾기 데이터가 포함되어 있으므로 공개적으로 공유하지 마세요
- frida 실행 중 WeChat 프로세스를 후킹하므로, 완료 후 서명 사본을 닫는 것을 권장
9.3 알려진 제한사항
- 이미지/동영상/파일의 원본 콘텐츠는 WeChat CDN에 저장되어 있어(암호화된 형식) 보고서에서 미리보기 불가
- 글 썸네일은 WeChat 공식 계정 CDN에서 가져오므로 보고서 확인 시 인터넷 연결 필요
- WeChat 업데이트마다 데스크톱 사본에 다시 서명해야 할 수 있음
10. FAQ
Q1: wx-favorites-report는 안전한가요? WeChat 데이터가 유출되지는 않나요?
모든 데이터 처리는 완전히 로컬에서 이루어지며 어떤 서버에도 업로드되지 않습니다. frida는 로컬에서만 WeChat 프로세스를 후킹하여 키를 추출하며, 보고서 생성 후 순수 로컬 HTML 파일입니다. 다만 생성된 보고서 파일을 잘 보관하고 공개적으로 공유하지 마세요.
Q2: Windows나 모바일 WeChat을 지원하나요?
현재 macOS 플랫폼의 WeChat Mac 4.x 클라이언트만 지원합니다. Windows와 모바일의 암호화 메커니즘이 달라 아직 지원하지 않습니다. Windows 플랫폼용 WeChat 데이터 도구가 필요하다면 PyWxDump를 참고하세요.
Q3: WeChat 업데이트 후에도 사용할 수 있나요?
WeChat 메이저 업데이트는 데이터베이스 구조나 암호화 방식을 변경할 수 있으며, 이 경우 도구 적응을 기다려야 합니다. 마이너 업데이트는 일반적으로 사용에 영향을 주지 않지만, 업데이트마다 데스크톱 사본에 다시 서명해야 합니다.
Q4: 생성된 보고서를 공유할 수 있나요?
보고서는 단일 파일 HTML로 오프라인에서 확인할 수 있습니다. 다만 개인 즐겨찾기 데이터가 포함되어 있으므로 본인만 사용하고 공개 웹사이트에 업로드하거나 타인에게 공유하지 않는 것을 권장합니다.
Q5: Claude Code가 없어도 사용할 수 있나요?
네. Claude Code는 원클릭 실행의 편의성을 제공할 뿐이며, 문서 단계를 따라 수동으로 작업해도 전체 프로세스를 완료할 수 있습니다. 핵심 스크립트(parse_favorites.py와 generate_report.py)는 독립적인 Python 프로그램입니다.
11. 요약
wx-favorites-report는 현재까지 본 가장 완전한 WeChat 즐겨찾기 시각화 솔루션입니다. ‘WeChat 즐겨찾기 데이터를 내보내고 분석할 수 없다’는 문제점을 해결하며, 암호화된 데이터베이스에서 인터랙티브 보고서까지의 전체 링크 자동화가 상당히 성숙하게 구현되어 있습니다.
장점:
- 전체 링크 자동화, 복호화부터 보고서까지 원클릭 완료
- 7가지 시각화 차트, 풍부한 데이터 인사이트
- 단일 파일 HTML 출력, 제로 의존성으로 확인 가능
- Claude Code 통합으로 사용 진입장벽 낮춤
단점:
- macOS만 지원, Windows/모바일 사용자는 사용 불가
- 키 추출 과정에 일정 수준의 기술 진입장벽 존재
- 이미지/동영상 콘텐츠를 보고서에서 미리보기 불가
만약 당신이 ‘헤비 즐겨찾기 사용자’라면, 도대체 무엇을 저장했는지, 즐겨찾기 습관이 어떠한지 파악하고 싶다면 wx-favorites-report를 시도해볼 만합니다.
이 블로그 글이 도움이 되셨기를 바랍니다! WeChat 데이터 관리에 관심이 있다면 AI 도구 리뷰 모음도 확인하여 더 많은 실용적인 데이터 분석 및 시각화 도구를 알아보세요.