Клиент Frida v.12.11.11 на Ubuntu 18.06
Frida Server v12.11.17 на эмуляторе Android Studio (Android 9.0 Google X86_ARM)
Я пытаюсь подключить метод onCreate подкласса, который реализует службу, работающую в частном процессе. Это объявление манифеста:
<service android:enabled="true" android:name="my_subclass_to_hook" android:process=":my_process">
Чтобы выполнить хук, я следовал приведенному здесь примеру: https://www.programmersought.com/article/97331588304/
Я могу определить, когда процесс вызывается, поскольку событие spawn_added правильно работает внутри кода jscode. Но функция реализации перехвата не вызывается.
Я уверен, что исходная функция вызывается, так как я вижу отпечатки logcat.
Кто-нибудь может мне помочь? Я застрял в этой проблеме на несколько недель. Я что-то упустил или есть альтернативный способ добиться этого?
Ниже приведен код Python, который я использую. Как я уже сказал, я могу уловить, когда создается сервисный процесс my_app_package:my_process, поскольку jscode вызывается правильно, и я вижу, что скрипт называется... print. Проблема в том, что перехваченная функция my_subclass_to_hook.onCreate не присоединяется, так как я не вижу Hooked!! Распечатать. Кстати, я уверен, что вызывается функция my_subclass_to_hook.onCreate, так как я вижу отпечатки в logcat. Надеясь, что это может прояснить мою проблему:
import codecs
import frida
import time
import sys
import threading
device = frida.get_device_manager().enumerate_devices()[-1]
print(device)
pending = []
sessions = []
scripts = []
event = threading.Event()
jscode = """
console.log("Script called...");
Java.perform(function x() {
var my_class = Java.use("my_subclass_to_hook");
my_class.onCreate.implementation = function (a) {
console.log("Hooked!!");
var ret_value = this.onCreate(a);
return ret_value;
}
"""
def on_spawned(spawn):
print('on_spawned:', spawn)
pending.append(spawn)
event.set()
def spawn_added(spawn):
print('spawn_added:', spawn)
event.set()
if(spawn.identifier.startswith('my_app_package:my_process')):
session = device.attach(spawn.pid)
script = session.create_script(jscode)
script.on('message', on_message)
script.load()
device.resume(spawn.pid)
print('Resumed')
def spawn_removed(spawn):
print('spawn_removed:', spawn)
event.set()
def on_message(spawn, message, data):
print('on_message:', spawn, message, data)
def on_message(message, data):
if message['type'] == 'send':
print("[*] {0}".format(message['payload']))
else:
print(message)
def child_added(spawn):
print('child_added:', spawn)
device.on('spawn-added', spawn_added)
device.on('spawn-removed', spawn_removed)
device.on('child-added', child_added)
device.on('child-removed', on_spawned)
device.on('process-crashed', on_spawned)
device.on('output', on_spawned)
device.on('uninjected', on_spawned)
device.on('lost', on_spawned)
device.enable_spawn_gating()
event = threading.Event()
print('Enabled spawn gating')
pid = device.spawn(["my_app_package"])
session = device.attach(pid)
device.resume(pid)
sys.stdin.read()
Спасибо