mirror of
https://github.com/frida/frida-python
synced 2026-06-08 14:16:17 +00:00
116 lines
3.4 KiB
Python
116 lines
3.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
from __future__ import unicode_literals, print_function
|
|
|
|
import threading
|
|
|
|
try:
|
|
import _frida
|
|
except Exception as ex:
|
|
import sys
|
|
print("")
|
|
print("***")
|
|
if str(ex).startswith("No module named "):
|
|
print("Frida native extension not found")
|
|
print("Please check your PYTHONPATH.")
|
|
else:
|
|
print("Failed to load the Frida native extension: %s" % ex)
|
|
if sys.version_info[0] == 2:
|
|
current_python_version = "%d.%d" % sys.version_info[:2]
|
|
else:
|
|
current_python_version = "%d.x" % sys.version_info[0]
|
|
print("Please ensure that the extension was compiled for Python " + current_python_version + ".")
|
|
print("***")
|
|
print("")
|
|
raise ex
|
|
from . import core
|
|
|
|
|
|
__version__ = _frida.__version__
|
|
|
|
Relay = _frida.Relay
|
|
PortalService = core.PortalService
|
|
EndpointParameters = core.EndpointParameters
|
|
FileMonitor = _frida.FileMonitor
|
|
Cancellable = core.Cancellable
|
|
|
|
ServerNotRunningError = _frida.ServerNotRunningError
|
|
ExecutableNotFoundError = _frida.ExecutableNotFoundError
|
|
ExecutableNotSupportedError = _frida.ExecutableNotSupportedError
|
|
ProcessNotFoundError = _frida.ProcessNotFoundError
|
|
ProcessNotRespondingError = _frida.ProcessNotRespondingError
|
|
InvalidArgumentError = _frida.InvalidArgumentError
|
|
InvalidOperationError = _frida.InvalidOperationError
|
|
PermissionDeniedError = _frida.PermissionDeniedError
|
|
AddressInUseError = _frida.AddressInUseError
|
|
TimedOutError = _frida.TimedOutError
|
|
NotSupportedError = _frida.NotSupportedError
|
|
ProtocolError = _frida.ProtocolError
|
|
TransportError = _frida.TransportError
|
|
OperationCancelledError = _frida.OperationCancelledError
|
|
|
|
|
|
def query_system_parameters(**kwargs):
|
|
return get_local_device().query_system_parameters(**kwargs)
|
|
|
|
|
|
def spawn(*args, **kwargs):
|
|
return get_local_device().spawn(*args, **kwargs)
|
|
|
|
|
|
def resume(target, **kwargs):
|
|
get_local_device().resume(target, **kwargs)
|
|
|
|
|
|
def kill(target, **kwargs):
|
|
get_local_device().kill(target, **kwargs)
|
|
|
|
|
|
def attach(target, *args, **kwargs):
|
|
return get_local_device().attach(target, *args, **kwargs)
|
|
|
|
|
|
def inject_library_file(target, path, entrypoint, data, **kwargs):
|
|
return get_local_device().inject_library_file(target, path, entrypoint, data, **kwargs)
|
|
|
|
|
|
def inject_library_blob(target, blob, entrypoint, data, **kwargs):
|
|
return get_local_device().inject_library_blob(target, blob, entrypoint, data, **kwargs)
|
|
|
|
|
|
def get_local_device(**kwargs):
|
|
return get_device_matching(lambda d: d.type == 'local', timeout=0, **kwargs)
|
|
|
|
|
|
def get_remote_device(**kwargs):
|
|
return get_device_matching(lambda d: d.type == 'remote', timeout=0, **kwargs)
|
|
|
|
|
|
def get_usb_device(timeout=0, **kwargs):
|
|
return get_device_matching(lambda d: d.type == 'usb', timeout, **kwargs)
|
|
|
|
|
|
def get_device(id, timeout=0, **kwargs):
|
|
return get_device_manager().get_device(id, timeout, **kwargs)
|
|
|
|
|
|
def get_device_matching(predicate, timeout=0, **kwargs):
|
|
return get_device_manager().get_device_matching(predicate, timeout, **kwargs)
|
|
|
|
|
|
def enumerate_devices(**kwargs):
|
|
return get_device_manager().enumerate_devices(**kwargs)
|
|
|
|
|
|
@core.cancellable
|
|
def shutdown():
|
|
get_device_manager()._impl.close()
|
|
|
|
|
|
global _device_manager
|
|
_device_manager = None
|
|
def get_device_manager():
|
|
global _device_manager
|
|
if _device_manager is None:
|
|
_device_manager = core.DeviceManager(_frida.DeviceManager())
|
|
return _device_manager
|