Releases: jsharkey13/iphone_backup_decrypt
Releases · jsharkey13/iphone_backup_decrypt
v0.9.0
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 inextract_files(...)
, although one ofrelative_paths_like
ordomains_like
must be specified. This allows decrypting everything for a domain without having to passrelative_paths_like="%"
too. Also by @KnugiHK in #14.
v0.8.0
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
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
Changelog:
New features:
- The
extract_file
andextract_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 newbackup.manifest_db_cursor()
context manager. This might make interactive exploration of the backup simpler.
v0.6.0
Changelog:
New features:
- The bulk
extract_files(...)
method now supports anincremental
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 outdatedbiplist
. 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
Changelog:
- Replace the standard library
hashlib.pbkdf2_hmac
method withpycryptodome
'sCrypto.Protocol.KDF.PBKDF2
method. This is likely to make the initial decrypting of backups 2-3x faster, iffastpbkdf2
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
Changelog:
New features:
- Support for retaining subfolders of extracted files; i.e. if a file has a
relativePath
ofDocuments/something.xyz
, then extract this into the output folder asoutput_folder/Documents/something.xyz
. This behaviour is optional, default disabled, and available for theextract_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 theextract_files
method. - Support for filtering by the
domain
of files. Some files do not have a uniquerelativePath
, but the combination of appdomain
andrelativePath
is enough to uniquely identify them. Extracting these files is now simpler, by specifying an optionaldomain_like
argument, which may contain wildcards. - New helper classes for finding files, notably
MatchFiles
which contains pairedrelative_paths_like
anddomain_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
orextract_file_as_bytes
methods, aFileNotFoundError
is now thrown, rather thanNone
being returned. - If an exception occurs when querying the
Manifest.db
database, aRuntimeException
is now thrown by all methods, rather than silently suppressing the error and returningNone
.
v0.3.1
Changelog:
- Update README and installation instructions.
- Update keywords for PyPI indexing.
v0.3.0
Changelog
- Move to using
pyproject.toml
rather thansetup.py
for packaging. - Deploy library to PyPI as
iphone_backup_decrypt
for easier installation.