From 4598333a189398795ae4cec9f631db40e9f49ee4 Mon Sep 17 00:00:00 2001 From: AloneMonkey Date: Mon, 19 Mar 2018 11:04:02 +0800 Subject: [PATCH] [fix] add python 3.x version --- README.md | 5 +++-- dump.py | 51 +++++++++++++++++++++++++-------------------------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 3c1e06a..adf5cd3 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,9 @@ Pull a decrypted IPA from a jailbroken device 1. Install [frida](http://www.frida.re/) on device 2. `sudo pip install -r requirements.txt --upgrade` (Python 2.7) - 3. Run usbmuxd/iproxy SSH forwarding over USB (Default 2222 -> 22). e.g. `iproxy 2222 22` - 4. Run ./dump.py `Display name` or `Bundle identifier` + 3. `sudo pip3 install -r requirements.txt --upgrade` (Python 3.x) + 4. Run usbmuxd/iproxy SSH forwarding over USB (Default 2222 -> 22). e.g. `iproxy 2222 22` + 5. Run ./dump.py `Display name` or `Bundle identifier` For SSH/SCP make sure you have your public key added to the target device's ~/.ssh/authorized_keys file. diff --git a/dump.py b/dump.py index 0d05f2b..7c51646 100755 --- a/dump.py +++ b/dump.py @@ -22,9 +22,6 @@ from scp import SCPClient from tqdm import tqdm import traceback -reload(sys) -sys.setdefaultencoding('utf8') - script_dir = os.path.dirname(os.path.realpath(__file__)) DUMP_JS = os.path.join(script_dir, 'dump.js') @@ -55,7 +52,7 @@ def get_usb_iphone(): while device is None: devices = [dev for dev in device_manager.enumerate_devices() if dev.type == 'tether'] if len(devices) == 0: - print 'Waiting for USB device...' + print('Waiting for USB device...') changed.wait() else: device = devices[0] @@ -68,7 +65,7 @@ def get_usb_iphone(): def generate_ipa(path, display_name): ipa_filename = display_name + '.ipa' - print 'Generating "{}"'.format(ipa_filename) + print('Generating "{}"'.format(ipa_filename)) try: app_name = file_dict['app'] @@ -82,9 +79,8 @@ def generate_ipa(path, display_name): zip_args = ('zip', '-qr', os.path.join(os.getcwd(), ipa_filename), target_dir) subprocess.check_call(zip_args, cwd=TEMP_DIR) shutil.rmtree(PAYLOAD_PATH) - print except Exception as e: - print e + print(e) finished.set() def on_message(message, data): @@ -92,7 +88,7 @@ def on_message(message, data): last_sent = [0] def progress(filename, size, sent): - t.desc = os.path.basename(filename) + t.desc = os.path.basename(filename).decode("utf-8") t.total = size t.update(sent - last_sent[0]) last_sent[0] = 0 if size == sent else sent @@ -104,7 +100,7 @@ def on_message(message, data): dump_path = payload['dump'] scp_from = dump_path - scp_to = PAYLOAD_PATH + u'/' + scp_to = PAYLOAD_PATH + '/' with SCPClient(ssh.get_transport(), progress = progress, socket_timeout = 60) as scp: scp.get(scp_from, scp_to) @@ -114,7 +110,7 @@ def on_message(message, data): try: subprocess.check_call(chmod_args) except subprocess.CalledProcessError as err: - print err + print(err) index = origin_path.find('.app/') file_dict[os.path.basename(dump_path)] = origin_path[index + 5:] @@ -123,7 +119,7 @@ def on_message(message, data): app_path = payload['app'] scp_from = app_path - scp_to = PAYLOAD_PATH + u'/' + scp_to = PAYLOAD_PATH + '/' with SCPClient(ssh.get_transport(), progress = progress, socket_timeout = 60) as scp: scp.get(scp_from, scp_to, recursive=True) @@ -132,7 +128,7 @@ def on_message(message, data): try: subprocess.check_call(chmod_args) except subprocess.CalledProcessError as err: - print err + print(err) file_dict['app'] = os.path.basename(app_path) @@ -188,7 +184,7 @@ def get_applications(device): try: applications = device.enumerate_applications() except Exception as e: - print 'Failed to enumerate applications: %s' % e + print('Failed to enumerate applications: %s' % e) return return applications @@ -208,15 +204,15 @@ def list_applications(device): header_format = '%' + str(pid_column_width) + 's ' + '%-' + str(name_column_width) + 's ' + '%-' + str( identifier_column_width) + 's' - print header_format % ('PID', 'Name', 'Identifier') - print '%s %s %s' % (pid_column_width * '-', name_column_width * '-', identifier_column_width * '-') + print(header_format % ('PID', 'Name', 'Identifier')) + print('%s %s %s' % (pid_column_width * '-', name_column_width * '-', identifier_column_width * '-')) line_format = '%' + str(pid_column_width) + 's ' + '%-' + str(name_column_width) + 's ' + '%-' + str( identifier_column_width) + 's' for application in sorted(applications, key=cmp_to_key(compare_applications)): if application.pid == 0: - print line_format % ('-', application.name, application.identifier) + print(line_format % ('-', application.name, application.identifier)) else: - print line_format % (application.pid, application.name, application.identifier) + print(line_format % (application.pid, application.name, application.identifier)) def load_js_file(session, filename): @@ -238,11 +234,11 @@ def create_dir(path): try: os.makedirs(path) except os.error as err: - print err + print(err) def open_target_app(device, name_or_bundleid): - print 'Start the target app {}'.format(name_or_bundleid) + print('Start the target app {}'.format(name_or_bundleid)) pid = '' session = None @@ -262,13 +258,13 @@ def open_target_app(device, name_or_bundleid): else: session = device.attach(pid) except Exception as e: - print e + print(e) return session, display_name, bundle_identifier def start_dump(session, ipa_name): - print 'Dumping {} to {}'.format(display_name, TEMP_DIR) + print('Dumping {} to {}'.format(display_name, TEMP_DIR)) script = load_js_file(session, DUMP_JS) script.post('dump') @@ -289,11 +285,14 @@ if __name__ == '__main__': exit_code = 0 ssh = None + + if not len(sys.argv[1:]): + parser.print_help() + sys.exit(exit_code) + device = get_usb_iphone() - if len(sys.argv[1:]) == 0: - parser.print_help() - elif args.list_applications: + if args.list_applications: list_applications(device) else: name_or_bundleid = args.target @@ -312,10 +311,10 @@ if __name__ == '__main__': if session: start_dump(session, output_ipa) except paramiko.ssh_exception.NoValidConnectionsError as e: - print e + print(e) exit_code = 1 except paramiko.AuthenticationException as e: - print e + print(e) exit_code = 1 except Exception as e: print('*** Caught exception: %s: %s' % (e.__class__, e))