
WhatsApp .crypt12, .crypt14 및 .crypt15 파일을 관리합니다.

WhatsApp 및 WA Business의 .crypt12, .crypt14, .crypt15 파일을 손쉽게 복호화하고 암호화하세요!
복호화를 위해서는 키 파일 또는 64자 길이의 키가 필요합니다
(또는 키가 담긴 스크린샷).
키 파일은 백업이 crypt14인 경우 "key",
백업이 crypt15(암호화된 E2E 백업)인 경우 "encrypted_backup.key"로 명명됩니다.
WhatsApp 포렌식을 위한 더 완전한 도구 모음을 찾고 있다면 whapa를 확인하세요.
컴퓨터에 프로그램을 설치하고 싶지 않다면, 이 프로그램을 Google Colab에서 실행할 수 있습니다.
Jupyter에 익숙하다면(익숙하지 않다면 여기를 읽어보세요), 프로그램의 노트북 버전을 사용할 수 있습니다.
이 스크립트를 pip를 통해 패키지로 설치할 수 있습니다. 다음을 실행하세요:
python -m pip install wa-crypt-tools
안정 버전의 경우, 그리고
python -m pip install git+https://github.com/ElDavoo/wa-crypt-tools
개발 버전의 경우입니다.
다른 패키지와의 충돌을 피하기 위해 가상 환경을 만들어야 할 수도 있습니다.
터미널을 전혀 사용하고 싶지 않다면, wagui는 백업을 복호화하는 작은 창입니다:
키를 선택하고, 백업을 선택하고, Decrypt를 누르세요.

다운로드하고 더블클릭하세요. 모든 릴리스에는 Python도 설치도 필요 없는 자체 포함 빌드가 포함되어 있습니다:
| 파일 | 대상 |
|---|---|
wagui-windows-x64.exe | Windows |
wagui-macos-arm64.zip | macOS (Apple Silicon) |
wagui-linux-x64 | Linux (먼저 chmod +x 필요) |
macOS 빌드는 코드 서명이 되어 있지 않아 처음 열 때 macOS가 거부합니다: 앱을 오른쪽 클릭하고 Open을 선택한 다음 확인하세요.
pip로 패키지를 이미 설치했다면, 같은 창을 명령어 하나로 열 수 있습니다:
wagui
Linux에서는 pip 설치 시 배포판의 tkinter 패키지도 필요합니다(Debian/Ubuntu에서는 python3-tk,
Fedora에서는 python3-tkinter) -- Python의 일부이지만 별도로 패키징됩니다.
다운로드 가능한 빌드에는 내장되어 있어 아무것도 필요하지 않습니다.
이 창은 대부분의 사람들이 원하는 복호화를 다룹니다. 또한 wainfo가 하는 것처럼 파일을 선택하는
즉시 그 파일이 무엇인지 알려줍니다. 암호화, 키 파일 생성, 오프셋 추측은 아래의 명령줄 도구에
남아 있습니다.
usage: wadecrypt [-h] [-nm] [-bs BUFFER_SIZE] [-nd] [-v] [-f] [-y] [keyfile] [encrypted] [decrypted]
따라서 crypt12/14/15를 복호화하려면 프로그램에 키 파일, 암호화된 파일, 출력 파일의 이름을
제공합니다. 이미 존재하는 파일 위에 쓰지 않습니다; 원한다면 -y/--yes를 전달하세요.
$ wadecrypt encrypted_backup.key msgstore.db.crypt15 msgstore.db
key15.py:51 : [I] Crypt15 / Raw key loaded
wadecrypt.py:271 : [I] Done
usage: waencrypt [-h] [-f] [-y] [-v] [--enable-features [ENABLE_FEATURES ...]] [--max-feature MAX_FEATURE]
[--multi-file] [--type {12,14,15}] [--iv IV] [--reference REFERENCE] [--noparse]
[--wa-version WA_VERSION] [--jid JID] [--backup-version BACKUP_VERSION] [--no-compress]
[-c [0-9]] [keyfile] [decrypted] [encrypted]
waencrypt는 이미 존재하는 파일 위에 쓰지 않습니다; 원한다면 -y/--yes를 전달하세요.
--reference를 사용하면 waencrypt는 참조된 백업을 바이트 단위로 재현합니다: IV, 헤더
(이 라이브러리가 모델링하지 않는 필드 포함), 압축 수준 모두 그것에서 가져오므로, 수정되지 않은
데이터베이스를 다시 암호화하면 처음 시작했던 md5를 그대로 돌려받습니다.
-c/--compression-level은 zlib 수준이며 기본값은 9로, 현재 WhatsApp이 사용하는 값입니다.
과거에는 1로 압축했습니다. --reference를 사용하면 수준이 참조에서 가져오므로, 오래된 백업을
재현하는 데 추가로 필요한 것은 없습니다; 재정의하려면 -c를 전달하세요.
암호화는 더 복잡하고 테스트되지 않았습니다: 같은 계정의 다른 암호화된 파일을 사용하는 것이 권장되며, 이를 "reference"라고 부르겠습니다.
waencrypt --reference msgstore.db.crypt15 encrypted_backup.key msgstore.db msgstore-new.db.crypt15
waencrypt.py:57 : [W] This script is in beta stage
waencrypt.py:89 : [I] Done!
다음 매개변수를 제공해야 합니다:
wa.db, stickers.db, 나머지
WhatsApp/Backups/ -- 은 기능 정보를 전혀 가지지 않으며, 이것이 wainfo가
"No feature table found (not a msgstore DB or very old)"라고 말하는 의미입니다. 그런 형태의
헤더를 작성하려면 --enable-features를 뒤에 아무것도 없이 전달하세요: 빈 목록은 마이그레이션
플래그도 백업 버전도 작성하지 않으며, 그러면 --max-feature는 아무것도 하지 않습니다.매개변수를 생략하면 기본값이 사용되며, 이는 실제 2.26.34.7 백업에서 가져온 것입니다: 올바른
--iv와 --jid가 주어지면 waencrypt는 참조 없이도 휴대폰과 동일한 헤더 바이트를 작성합니다.
--reference를 전달하는 것이 여전히 더 나은 방법입니다. 이미 가지고 있는 백업에서 IV, 압축
수준, 전체 헤더를 가져오기 때문입니다.
요약하면:
$ waencrypt --enable-features 5 6 7 8 9 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 --type 15 --wa-version 2.26.34.7 --jid 00 --backup
-version 1 encrypted_backup.key msgstore.db msgstore-new.db.crypt15
waencrypt.py:57 : [W] This script is in beta stage
waencrypt.py:89 : [I] Done!
wainfo 도구로 백업 파일에 대한 정보를 얻을 수 있습니다.
WhatsApp은 64자리 키를 한 번만 보여주고 다시는 보여주지 않으므로, 대부분의 사람들은 스크린샷을 찍습니다. 그 스크린샷을 키 파일이 들어가는 곳 어디든 도구에 전달할 수 있습니다 -- 별도의 플래그는 없으며, 도구가 전달받은 것이 무엇인지 스스로 판단합니다:
$ wadecrypt Screenshot_20260901-184609_WhatsApp.png msgstore.db.crypt15 msgstore.db
ocr.py:503 : [I] Reading the key from the screenshot, this takes a few seconds...
key15.py:55 : [I] Crypt15 / Raw key loaded
wadecrypt.py:301 : [I] Done
키만 읽고 싶다면 wainfo -k <screenshot>이 키만 출력합니다. wagui도 스크린샷을 받습니다:
키 파일을 선택할 곳에서 스크린샷을 선택하세요.
이것은 선택 사항이며 두 가지가 설치되어 있어야 합니다:
python -m pip install 'wa-crypt-tools[ocr]'
그리고 Tesseract 프로그램 자체 -- Debian/Ubuntu에서는 sudo apt install tesseract-ocr,
macOS에서는 brew install tesseract, Windows에서는 winget install UB-Mannheim.TesseractOCR.
이것들이 없으면 다른 것은 아무것도 바뀌지 않습니다; 이미지를 전달한 경우에만 설치하라고
안내받습니다.
wadecrypt는 사용하기 전에 키를 백업과 대조하여 확인하고, 맞지 않으면 조용히 근접 오류를
찾아 작동하는 것을 계속 사용합니다. 단일 숫자 오류는 항상 찾아냅니다. 이에 대해 알려주지
않습니다. 할 일이 없기 때문입니다 -- 보고 싶다면 -v로 실행하세요. 후보는 실제로 백업의
시작 부분을 복호화한 경우에만 채택되므로, 여기서 사용되는 것은 추측이 아닙니다.
이는 직접 입력한 64자리 숫자에도 적용되며, 스크린샷에만 국한되지 않습니다 -- 숫자는 보통 스크린샷에서 옮겨 적기 때문에 같은 실수입니다. 여기서는 손으로 복사할 때 특유의 실수도 시도합니다: 두 숫자가 뒤바뀐 경우, 두 그룹이 뒤바뀐 경우, 4x4 격자를 행 대신 열 방향으로 읽은 경우. 이 모든 것은 약 1초가 걸립니다; 단순히 잘못된 키는 일반적인 오류 전에 2초가 걸립니다.
키 파일은 절대 추측하지 않습니다. 그 숫자는 누구도 옮겨 적지 않았으므로, 올바른 파일이거나 잘못된 파일입니다.
그마저도 실패하면, 그렇게 말하고 어떻게 해야 하는지 알려줍니다:
[C] Could not read the key from the screenshot: what it says does not decrypt this backup,
and neither does any near miss of it.
Transcribe the 64 digits from the screenshot by hand and pass those instead of the image.
알아둘 만한 몇 가지 다른 사항:
wainfo -k는 대조할 백업이 없으므로 아무것도 복구할 수 없습니다 -- 읽은 것을 출력하고,
직접 그림과 비교하세요.사용법은 도구를 -h 옵션과 함께 실행하세요.
0) wagui - 창 (위 참조); 유일하게 명령줄 도구가 아닌 것
wacreatekey - 키 파일 생성wadecrypt - 백업 복호화waencrypt - 백업 암호화waguess - 백업 복호화를 시도하는 편법wainfo - 백업에 대한 정보 얻기도구가 하는 모든 것은 import wa_crypt_tools를 통해 사용할 수 있습니다.
from wa_crypt_tools import DatabaseFactory, KeyFactory, IntegrityError
import zlib
key = KeyFactory.new("encrypted_backup.key") # a key file, or the 64-character key itself
with open("msgstore.db.crypt15", "rb") as f:
# Reads the header and leaves the stream at the start of the ciphertext.
db = DatabaseFactory.from_file(f)
plaintext = db.decrypt(key, f.read())
# The payload is usually zlib-compressed; a multi-file backup is a ZIP instead.
open("msgstore.db", "wb").write(zlib.decompress(plaintext))
버전 -- crypt12, crypt14 또는 crypt15 -- 은 팩토리가 키와 파일 헤더에서 판단합니다. 클래스를 직접 선택하지 않습니다.