Skip to content

Releases: jsharkey13/iphone_backup_decrypt

v0.9.0

18 Sep 16:06
Compare
Choose a tag to compare

Changelog:

  • Fix a performance issue from changes in v0.7.0 where the decryption chunk size was too large; reducing the chunk size has halved typical decryption times. Reported and fixed by @KnugiHK in #14.
  • Make relative_paths_like optional in extract_files(...), although one of relative_paths_like or domains_like must be specified. This allows decrypting everything for a domain without having to pass relative_paths_like="%" too. Also by @KnugiHK in #14.

v0.8.0...v0.9.0

v0.8.0

16 Jun 10:29
Compare
Choose a tag to compare

Changelog:

New features:

  • The extract_files method now takes an optional callback function which can be used to filter the files matching the provided relativePath and domain patterns in more complex ways, before decryption. Since it is called once per matched file, it can be used to track decryption progress for large numbers of files. See the docstring for more details.

v0.7.1...v0.8.0

v0.7.1

19 May 10:17
Compare
Choose a tag to compare

Changelog:

  • Fix an incorrectly named attribute in a warning message about filesize mismatch, which was causing a crash instead of a warning message. This warning message seems to be quite common for SQLite files where the reported and actual sizes do not quite align.

v0.7.0...v0.7.1

v0.7.0

09 May 19:20
Compare
Choose a tag to compare

Changelog:

New features:

  • The extract_file and extract_files methods now decrypt files from the backup in chunks, to prevent memory exhaustion when decrypting particularly large files. Large files, for example the iOS Health database, previously required at least twice their file size of available RAM to decrypt successfully: now an a few hundred megabytes free RAM is sufficient.
  • Added helper values for iCloud photos on the camera roll, provided by @john-corcoran.
  • Provide sqlite3 cursor access to the temporary copy of the Manifest database via a new backup.manifest_db_cursor() context manager. This might make interactive exploration of the backup simpler.

v0.6.0...v0.7.0

v0.6.0

10 Feb 12:33
Compare
Choose a tag to compare

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.

v0.5.0...v0.6.0

v0.5.0

04 Feb 20:57
Compare
Choose a tag to compare

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.

v0.4.0...v0.5.0

v0.4.0

04 Feb 12:53
Compare
Choose a tag to compare

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.

v0.3.1...v0.4.0

v0.3.1

24 Dec 11:32
Compare
Choose a tag to compare

Changelog:

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

v0.3.0...v0.3.1

v0.3.0

24 Dec 11:31
Compare
Choose a tag to compare

Changelog

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

v0.2.2...v0.3.0