35 lines
1.3 KiB
Python
35 lines
1.3 KiB
Python
from optparse import OptionParser
|
|
from hfs.emf import EMFVolume
|
|
from util.bdev import FileBlockDevice
|
|
import plistlib
|
|
|
|
def main():
|
|
parser = OptionParser(usage="emf_decrypter.py disk_image.bin")
|
|
parser.add_option("-w", "--nowrite", dest="write", action="store_false", default=True,
|
|
help="disable modifications of input file, for testing")
|
|
(options, args) = parser.parse_args()
|
|
if len(args) < 1:
|
|
parser.print_help()
|
|
return
|
|
device_infos = None
|
|
if len(args) >= 2: device_infos = plistlib.readPlist(args[1])
|
|
|
|
p = FileBlockDevice(args[0], 0, options.write)
|
|
v = EMFVolume(p, device_infos)
|
|
if not v.keybag.unlocked:
|
|
print "Keybag locked, protected files won't be decrypted, continue anyway ?"
|
|
if raw_input() == "n":
|
|
return
|
|
if options.write:
|
|
print "WARNING ! This tool will modify the hfs image and possibly wreck it if something goes wrong !"
|
|
print "Make sure to backup the image before proceeding"
|
|
print "You can use the --nowrite option to do a dry run instead"
|
|
else:
|
|
print "Test mode : the input file will not be modified"
|
|
print "Press a key to continue or CTRL-C to abort"
|
|
raw_input()
|
|
v.decryptAllFiles()
|
|
|
|
if __name__ == "__main__":
|
|
main()
|