Iphone Backup Decrypt Versions Save

Decrypt an encrypted iOS backup created by iTunes on Windows or MacOS

v0.6.0

3 months ago

Changelog:

New features:

  • The bulk extract_files(...) method now supports an incremental mode, where files that already exist in the output folder that have not been modified since the file was last modified on iOS will be skipped. This may speed up extracting large numbers of files, but may not function as intended if files in the output directory are subsequently modifed.
  • Use the standard library plistlib rather than the external and outdated biplist. Since Python 3.8, plistlib contains everything this library needs.

Breaking changes

  • If files fail to decrypt or is not encrypted, exceptions are now thrown instead of None being returned.

https://github.com/jsharkey13/iphone_backup_decrypt/compare/v0.5.0...v0.6.0

v0.5.0

3 months ago

Changelog:

  • Replace the standard library hashlib.pbkdf2_hmac method with pycryptodome's Crypto.Protocol.KDF.PBKDF2 method. This is likely to make the initial decrypting of backups 2-3x faster, if fastpbkdf2 was not installed. PBKDF2 is not used after the initial decryption step, so this will not affect the speed of decrypting files after the first.

If this release performs poorly, compare it to v0.4.0 and open an issue if the previous release is faster.

https://github.com/jsharkey13/iphone_backup_decrypt/compare/v0.4.0...v0.5.0

v0.4.0

3 months ago

Changelog:

New features:

  • Support for retaining subfolders of extracted files; i.e. if a file has a relativePath of Documents/something.xyz, then extract this into the output folder as output_folder/Documents/something.xyz. This behaviour is optional, default disabled, and available for the extract_files method.
  • Support for domain subfolders in output. If files do not have a unique relativePath and multiple clashing files are extracted, they will overwrite one another. Files can now be grouped inside domain subfolders in the output folder to avoid this. This behaviour is optional, default disabled, and available for the extract_files method.
  • Support for filtering by the domain of files. Some files do not have a unique relativePath, but the combination of app domain and relativePath is enough to uniquely identify them. Extracting these files is now simpler, by specifying an optional domain_like argument, which may contain wildcards.
  • New helper classes for finding files, notably MatchFiles which contains paired relative_paths_like and domain_like values useful for more specific file extraction.
  • The extract_files method now returns the number of files extracted.

Breaking changes

  • The last modification time of extracted files is now extracted from the backup metadata and set on all files extracted to the local filesystem. Note this time is not the backup creation/modification time, but the last modified time of the file on the iPhone itself.
  • If a file is not found by the extract_file or extract_file_as_bytes methods, a FileNotFoundError is now thrown, rather than None being returned.
  • If an exception occurs when querying the Manifest.db database, a RuntimeException is now thrown by all methods, rather than silently suppressing the error and returning None.

https://github.com/jsharkey13/iphone_backup_decrypt/compare/v0.3.1...v0.4.0

v0.3.1

4 months ago

Changelog:

  • Update README and installation instructions.
  • Update keywords for PyPI indexing.

https://github.com/jsharkey13/iphone_backup_decrypt/compare/v0.3.0...v0.3.1

v0.3.0

4 months ago

Changelog

  • Move to using pyproject.toml rather than setup.py for packaging.
  • Deploy library to PyPI as iphone_backup_decrypt for easier installation.

https://github.com/jsharkey13/iphone_backup_decrypt/compare/v0.2.2...v0.3.0