hackappcom / iloot

OpenSource tool for iCloud backup extraction
https://hackapp.com/
637 stars 201 forks source link

Upcoming patch/fix ? and controls suggestions. #25

Closed jetXS closed 9 years ago

jetXS commented 9 years ago

Hello,

After playing around with your script and looking a bit at the code (even if I'm not that comfortable yet with Python, it's pretty close to others OOP languages I guess... ), I've noticed that 2 errors were happening frequently.

Those errors are happening on full backups (that's what interesting me) with the options --combined and --itunes-style.

The first one is that you are getting disconnected, following an SSL error (from time to time, pretty randomly), from the backup servers. I was monitoring my network in the mean time and I saw that when you are starting the script, you are connecting to iCloud servers, then, it's taking the backup from a random server usually, it seems, owned by Amazon. It seemed to me that the error was happening while downloading a large file. In details: for small files, the downloads are pretty quick, and the script is sending some request and receiving datas quite often, when a large file is going to download, it's sending a request at the beginning of the file and, while the file is downloading, no more communication with the backup server... The thing is, that at the end of the download, it seems that the script is not communicating back with the server... It's like if they were a "timeout" and that the user was getting disconnected... I don't know if my analysis with help but that's the only thing I could try to do to help. Maybe a way to avoid the problem on a large backup file (2go) or when there is large files would be to set a download progress, when the script is crashing, you can restart it but instead of going back to the beginning it would look at the output folder and see if the files going to be downloaded are already here ? If they are, it's getting skipped and going to the next file ? Right now I haven't been able yet to download a full backup, maybe something like that would be helping?

The second error, is the "index out of range", maybe, like said in an other issues, from a memory leak. If it is not... I've seen that it was related to the decryption. The error is unfortunately stopping the download. I was thinking, to avoid stopping the download: why not decrypting the files once they are all downloaded instead of decrypting them one by one while the backup is getting downloaded ? Or... If the user is only interested in retrieving a regular backup with --combined --itunes-style, why not adding an option that will not decrypt the file "Over the air" ? That way, the download would not fail after some failed decryptions and the user could do it himself once the backup is fully retrieved.

I hope my suggestions will help you in your work and that you will get my bad english. I want to precise that I'm not criticizing your work in any "bad" ways and that I'm really thankful of the script you did, there is a lot already done. :) Congrats!

hackappcom commented 9 years ago

I'll think about what we can do here. Thank you for feedback.

jetXS commented 9 years ago

Hey !

is there any way to download a specific file ? I'm trying to avoid the crash by downloading all the backup by domains, progressively... however, I'm always missing an important file for decryption... Manifest.plist. is there a way to retrieve the FULL backup structure when downloading for specific domains or specific datas ? Because I'm failing putting everything back together :/

-Info.plist -Manifest.mbdb -Manifest.plist -Status.plist

I was wondering.