프로젝트 개요

인증번호가 올 때마다 메시지 앱을 열어 확인하고 직접 입력하는 게 귀찮아서 만들었습니다. App Store의 Code Piper Lite를 보고 "이건 직접 만들 수 있겠다"고 생각한 것이 시작이었습니다.

macOS Messages 앱의 SQLite 데이터베이스(chat.db)를 watchdog으로 감시하여, 새 SMS가 도착하면 인증번호 키워드와 4~8자리 숫자 패턴을 분석합니다. 인증번호가 감지되면 클립보드에 자동 복사하고, 60초 후 보안을 위해 자동 정리합니다.

PythonSQLitewatchdogpyperclippy2appmacOS

프로젝트 구조

sms-2fa-copy/
├── 2fa.py              # 메인 스크립트 (138줄)
├── setup.py            # py2app 빌드 설정
├── requirements.txt    # 의존성 (watchdog, pyperclip)
├── scripts/
│   └── build-dmg.sh    # DMG 패키징 스크립트
└── dist/
    └── 2fa.app         # 빌드된 macOS 앱

DatabaseChangeHandler

watchdog의 FileSystemEventHandler를 상속하여 Messages DB(chat.db) 및 WAL 파일의 변경을 감지합니다. 0.5초 디바운싱으로 중복 처리를 방지합니다.

process_new_message

최신 메시지를 읽어 인증번호 관련 키워드를 확인하고, 정규식으로 4~8자리 숫자를 추출합니다. rowid 기반으로 이미 처리된 메시지를 건너뜁니다.

주요 기능

인증번호 자동 감지

"인증", "확인", "코드", "OTP" 등 키워드가 포함된 SMS에서 4~8자리 숫자를 자동으로 추출하여 클립보드에 복사합니다.

60초 자동 정리

클립보드에 복사된 인증번호를 60초 후 자동으로 삭제합니다. 인증번호가 클립보드에 남아있을 때만 정리하여 안전합니다.

macOS 알림 센터 연동

인증번호가 복사되면 macOS 알림 센터로 즉시 알림을 표시합니다. 어떤 인증번호가 복사되었는지 바로 확인할 수 있습니다.

DMG 패키징 & 백그라운드 실행

py2app으로 .app 번들을 빌드하고 DMG로 배포합니다. Dock 아이콘 없이 백그라운드에서 조용히 동작합니다.

실행 흐름

01
앱 시작

PollingObserver로 ~/Library/Messages/ 디렉토리 감시 시작

02
DB 변경 감지

chat.db 또는 WAL 파일 변경 시 0.5초 디바운싱 후 처리

03
메시지 분석

최신 메시지에서 인증 키워드 확인 + 숫자 패턴 추출

04
클립보드 복사

인증번호를 클립보드에 복사하고 macOS 알림 표시

05
자동 정리

60초 후 클립보드에 해당 인증번호가 남아있으면 삭제

댓글

불러오는 중...