diff --git a/Whatsapp_Chat_Exporter/__main__.py b/Whatsapp_Chat_Exporter/__main__.py index fd6e2b6..ae953b5 100644 --- a/Whatsapp_Chat_Exporter/__main__.py +++ b/Whatsapp_Chat_Exporter/__main__.py @@ -246,6 +246,13 @@ def main(): action='store_true', help="Create a copy of the media seperated per chat in /separated/ directory" ) + parser.add_argument( + "--decrypt-chunk-size", + dest="decrypt_chunk_size", + default=1 * 1024 * 1024, + type=int, + help="Specify the chunk size for decrypting iOS backup, which may affect the decryption speed." + ) args = parser.parse_args() # Check for updates @@ -396,7 +403,7 @@ def main(): args.media = identifiers.DOMAIN if args.backup is not None: if not os.path.isdir(args.media): - ios_media_handler.extract_media(args.backup, identifiers) + ios_media_handler.extract_media(args.backup, identifiers, args.decrypt_chunk_size) else: print("WhatsApp directory already exists, skipping WhatsApp file extraction.") if args.db is None: diff --git a/Whatsapp_Chat_Exporter/ios_media_handler.py b/Whatsapp_Chat_Exporter/ios_media_handler.py index 6ece83d..4e0dad2 100644 --- a/Whatsapp_Chat_Exporter/ios_media_handler.py +++ b/Whatsapp_Chat_Exporter/ios_media_handler.py @@ -13,9 +13,15 @@ else: support_encrypted = True -def extract_encrypted(base_dir, password, identifiers): +def extract_encrypted(base_dir, password, identifiers, decrypt_chunk_size): print("Trying to decrypt the iOS backup...", end="") - backup = EncryptedBackup(backup_directory=base_dir, passphrase=password, cleanup=False, check_same_thread=False) + backup = EncryptedBackup( + backup_directory=base_dir, + passphrase=password, + cleanup=False, + check_same_thread=False, + decrypt_chunk_size=decrypt_chunk_size + ) print("Done\nDecrypting WhatsApp database...", end="") try: backup.extract_file( @@ -64,7 +70,7 @@ def is_encrypted(base_dir): return False -def extract_media(base_dir, identifiers): +def extract_media(base_dir, identifiers, decrypt_chunk_size): if is_encrypted(base_dir): if not support_encrypted: print("You don't have the dependencies to handle encrypted backup.") @@ -73,7 +79,7 @@ def extract_media(base_dir, identifiers): return False print("Encryption detected on the backup!") password = getpass.getpass("Enter the password for the backup:") - extract_encrypted(base_dir, password, identifiers) + extract_encrypted(base_dir, password, identifiers, decrypt_chunk_size) else: wts_db = os.path.join(base_dir, identifiers.MESSAGE[:2], identifiers.MESSAGE) contact_db = os.path.join(base_dir, identifiers.CONTACT[:2], identifiers.CONTACT)