Files
2019-09-26 16:05:24 +02:00

74 lines
1.9 KiB
Python

import os
import click
from objection.utils.plugin import Plugin
from objection.commands.filemanager import _path_exists_ios, _upload_ios
from objection.commands.device import _get_ios_environment
from objection.state.connection import state_connection
class FlexLoader(Plugin):
""" FlexLoader loads Flex """
def __init__(self, ns):
"""
Creates a new instance of the plugin
:param ns:
"""
implementation = {
'meta': 'Work with Flex',
'commands': {
'load': {
'meta': 'Load flex',
'exec': self.load_flex
}
}
}
super().__init__(__file__, ns, implementation)
self.inject()
self.flex_dylib = 'libFlex.arm64.dylib'
def load_flex(self, args: list):
"""
Loads flex.
:param args:
:return:
"""
agent = state_connection.get_api()
device_dylib_path = os.path.join(agent.env_ios_paths()['DocumentDirectory'], self.flex_dylib)
if not _path_exists_ios(device_dylib_path):
print('Flex not uploaded, uploading...')
if not self._upload_flex(device_dylib_path):
return
click.secho('Asking flex to load...', dim=True)
self.api.init_flex(self.flex_dylib)
click.secho('Flex should be up!', fg='green')
def _upload_flex(self, location: str) -> bool:
"""
Uploads Flex to the remote filesystem.
:return:
"""
local_flex = os.path.join(os.path.abspath(os.path.dirname(__file__)), self.flex_dylib)
if not os.path.exists(local_flex):
click.secho('{0} not available next to plugin file. Please build it!'.format(self.flex_dylib), fg='red')
return False
_upload_ios(local_flex, location)
return True
namespace = 'flex'
plugin = FlexLoader