kmaork / hypno

Inject python code into a running python process
MIT License
85 stars 12 forks source link

injector_inject returned -5: dlopen failed #15

Closed eMPee584 closed 1 year ago

eMPee584 commented 1 year ago
Python 3.11.2 (main, Feb 12 2023, 00:48:52) [GCC 12.2.0]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.5.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import madbg

In [2]: madbg.attach_to_process(3453466)
---------------------------------------------------------------------------
InjectorError                             Traceback (most recent call last)
Cell In [2], line 1
----> 1 madbg.attach_to_process(3453466)

File /usr/lib/python3/dist-packages/madbg/api.py:34, in attach_to_process(pid, port, connect_timeout)
     32 def attach_to_process(pid: int, port=DEFAULT_PORT, connect_timeout=DEFAULT_CONNECT_TIMEOUT):
     33     ip = '127.0.0.1'
---> 34     _inject_set_trace(pid, ip, port)
     35     connect_to_debugger(ip, port, timeout=connect_timeout)

File /usr/lib/python3/dist-packages/madbg/api.py:28, in _inject_set_trace(pid, ip, port)
     26 assert isinstance(port, int)
     27 sig_num = DEBUGGER_CONNECTED_SIGNAL.value
---> 28 inject_py(pid, f'__import__("signal").signal({sig_num},lambda _,f:__import__("madbg").set_trace(f,"{ip}",{port}))')
     29 os.kill(pid, sig_num)

File /usr/lib/python3/dist-packages/hypno/hypno.py:42, in inject_py(pid, python_code)
     40     temp.write(lib[code_addr + len(python_code) + 1:])
     41 try:
---> 42     inject(pid, str(temp.name))
     43 except InjectorError as e:
     44     # On Windows we are failing the load on purpose so the library will be immediately unloaded
     45     if not WINDOWS or e.ret_val != -5 or e.error_str != \
     46             "LoadLibrary in the target process failed: " \
     47             "A dynamic link library (DLL) initialization routine failed.":

File /usr/lib/python3/dist-packages/pyinjector/pyinjector.py:103, in inject(pid, library_path)
    101 injector = Injector.attach(pid)
    102 try:
--> 103     return injector.inject(library_path)
    104 finally:
    105     injector.detach()

File /usr/lib/python3/dist-packages/pyinjector/pyinjector.py:87, in Injector.inject(self, library_path)
     85 assert os.path.isfile(library_path), f'Library not found at "{library_path.decode()}"'
     86 handle = c_void_p()
---> 87 call_c_func(libinjector.injector_inject, self.injector_p, library_path, pointer(handle))
     88 return handle.value

File /usr/lib/python3/dist-packages/pyinjector/pyinjector.py:66, in call_c_func(func, exception_map, *args)
     64 exception_map = {} if exception_map is None else exception_map
     65 exception_cls = exception_map.get(ret, InjectorError)
---> 66 raise exception_cls(func.__name__, ret, libinjector.injector_error())

InjectorError: injector_inject returned -5: dlopen failed

Trying to load the lib (saved from /tmp) directly (am i doing this right :sweat_smile: ) from ipython3 does not work, too:

In [1]: import ctypes

In [2]: ctypes.CDLL?

In [3]: ctypes.CDLL('/tmp/hypno61cl3r9b.so')
---------------------------------------------------------------------------
OSError                                   Traceback (most recent call last)
Cell In [3], line 1
----> 1 ctypes.CDLL('/tmp/hypno61cl3r9b.so')

File /usr/lib/python3.11/ctypes/__init__.py:376, in CDLL.__init__(self, name, mode, handle, use_errno, use_last_error, winmode)
    373 self._FuncPtr = _FuncPtr
    375 if handle is None:
--> 376     self._handle = _dlopen(self._name, mode)
    377 else:
    378     self._handle = handle

OSError: /tmp/hypno61cl3r9b.so: failed to map segment from shared object

This is on debian unstable with packages created using stdeb:

ii  python3-hypno      1.0.0-1      amd64        A tool/library allowing to inject python code into a running
ii  python3-madbg      1.3.1-1      all          A fully-featured remote debugger for python
ii  python3-pyinjector 1.1.1-1      amd64        A tool/library allowing dynamic library injection into runni

I had to disable some tests to get it to build, maybe that's part of the problem...?

kmaork commented 1 year ago

Hmmm did you create the stdeb packages? Does it work if you install the packages with pip instead of stdeb?

kmaork commented 1 year ago

Probably fixed in hypno==1.0.2