Как прикрепить к функции питона с помощью Frida? - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь выяснить, как перехватывать вызовы функций внутри программы на Python с использованием Frida.

Приведенный ниже код на python - это программа, которую нужно погрузить в

# hello.py
from time import sleep

def print_num(i=0):
    print(i)

print(f"print_num address: {print_num}")

i = 0
while i < 10:
    i += 1
    print_num(i)
    sleep(4)

А сценарий подключения просто пытается присоединиться к функции print_num со своим адресом, а затем сообщать результат i каждый раз, когда он был получен.

# hook.py
import frida
import sys

session = frida.attach("THE PID OF THE hello.py")
# replaced with the real print_num address
func_addr = "THE FUNC ADDR OF print_num"
script = session.create_script(
    """
    send("start injecting...");
    Interceptor.attach(ptr("%s"), {
        onEnter: function(args) {
            send(args[0].toInt32());
        }
    });
    """ % int(func_addr)
)

def on_message(message, data):
    print(message)

script.on('message', on_message)
script.load()
sys.stdin.read()

Результат:

{'type': 'send', 'payload': 'start injecting...'}

Похоже, что hook.py может правильно обращаться к программе test.py, но не может обращаться к функции print_num.В противном случае он должен сообщить что-то вроде

{'type': 'send', 'payload': '1'}
{'type': 'send', 'payload': '2'}
{'type': 'send', 'payload': '3'}
{'type': 'send', 'payload': '4'}
...

Так возможно ли присоединить к функции python с помощью Frida?Как это сделать?

...