Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ Selected MyPad 43686f636f6c61746552616d656b696e73546f6f
Usage:
ls [domain]
restore domain dest
restore-all dest
dumpkeys [outputfile]
apps
```
Expand All @@ -28,6 +29,8 @@ The `ls` command will list domains or files in a domain.

The `restore` command will restore the files in a domain into a directory tree.

The `restore-all` command will restore the all files into a directory tree.

The `dumpkeys` command will dump the readable portions of the keychain to json.

The `apps` command will list the installed apps.
Expand Down Expand Up @@ -63,4 +66,4 @@ There are a few changes in iOS 10.2. The Manifest database itself is encrypted,

Further, the keybag has a second round of PBKDF2 with different parameters and a sha256 hash function. This one takes about 10 seconds in Go, so the code now prints the decrypted key in hex. If you provide this hex key instead of your password, you can skip the long key derivation step.

(iOS 10.2 details came from a github thread.)
(iOS 10.2 details came from a github thread.)
10 changes: 10 additions & 0 deletions cmd/irestore/irestore.go
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,7 @@ func main() {
fmt.Println(`Usage:
ls [domain]
restore domain dest
restore-all dest
dumpkeys [outputfile]
apps
`)
Expand All @@ -311,6 +312,15 @@ func main() {
} else {
help()
}
case "restore-all":
if len(os.Args) > 3 {
for _, domain := range db.Domains() {
outPath := path.Join(os.Args[3] + domain)
restore(db, domain, outPath)
}
} else {
help()
}
case "apps":
apps(db)
case "dumpkeys":
Expand Down