From 8c617b721f2fec1fef53ed0d02b84195069f1065 Mon Sep 17 00:00:00 2001 From: KnugiHK <24708955+KnugiHK@users.noreply.github.com> Date: Sun, 3 Dec 2023 13:49:57 +0800 Subject: [PATCH] Create bruteforce_crypt15.py --- scripts/bruteforce_crypt15.py | 48 +++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 scripts/bruteforce_crypt15.py diff --git a/scripts/bruteforce_crypt15.py b/scripts/bruteforce_crypt15.py new file mode 100644 index 0000000..56cf912 --- /dev/null +++ b/scripts/bruteforce_crypt15.py @@ -0,0 +1,48 @@ +import hmac +import javaobj +import zlib +from Crypto.Cipher import AES +from hashlib import sha256 + + +def _generate_hmac_of_hmac(key_stream): + key = hmac.new( + hmac.new( + b'\x00' * 32, + key_stream, + sha256 + ).digest(), + b"backup encryption\x01", + sha256 + ) + return key.digest(), key_stream + + +def _extract_encrypted_key(keyfile): + key_stream = b"" + for byte in javaobj.loads(keyfile): + key_stream += byte.to_bytes(1, "big", signed=True) + + return _generate_hmac_of_hmac(key_stream) + + +key = open("encrypted_backup.key", "rb").read() +database = open("wa.db.crypt15", "rb").read() +main_key, hex_key = _extract_encrypted_key(key) +for i in range(100): + iv = database[i:i+16] + for j in range(100): + cipher = AES.new(main_key, AES.MODE_GCM, iv) + db_ciphertext = database[j:] + db_compressed = cipher.decrypt(db_ciphertext) + try: + db = zlib.decompress(db_compressed) + except zlib.error: + ... + else: + if db[0:6] == b"SQLite": + print(f"Found!\nIV: {i}\nOffset: {j}") + print(db_compressed[:10]) + exit() + +print("Not found! Try to increase maximum search.")