Files
workphone-sdk/sdk/tests/probe2.py

64 lines
1.7 KiB
Python

#!/usr/bin/env python3
"""快速探测Frida方法名格式 - 带超时保护"""
import frida, time, json, signal, sys
def timeout_handler(signum, frame):
print("TIMEOUT!")
sys.exit(1)
signal.signal(signal.SIGALRM, timeout_handler)
signal.alarm(20) # 20秒超时
print("[1] Connecting...")
d = frida.get_device_manager().add_remote_device("192.168.0.12:27042")
print("[2] Attaching...")
s = d.attach(7239)
print("[3] Loading script...")
# 用一个极简脚本测试方法名格式
MINI_SCRIPT = """
rpc.exports = {
ping: function() { return "pong"; },
getProcessInfo: function() { return {pid: Process.id, arch: Process.arch}; },
getConnectionStatus: function() { return {mode: "tcp", ts: Date.now()}; },
takeScreenshot: function(p) { return {success: true, test: true}; },
};
"""
sc = s.create_script(MINI_SCRIPT)
sc.on("message", lambda m, d: None)
sc.load()
time.sleep(1)
e = sc.exports_sync
methods = [x for x in dir(e) if not x.startswith("_")]
print(f"[4] Methods ({len(methods)}): {methods}")
# 测试各种格式
print("\n[5] Testing method name formats:")
tests = [
("ping", None),
("getProcessInfo", None),
("getprocessinfo", None),
("get_process_info", None),
("getConnectionStatus", None),
("getconnectionstatus", None),
("takeScreenshot", {"path": "/tmp/test.png"}),
("takescreenshot", {"path": "/tmp/test.png"}),
]
for name, params in tests:
fn = getattr(e, name, None)
if fn is None:
print(f" {name}: NOT IN DIR")
continue
try:
r = fn(params) if params else fn()
print(f" {name}: OK -> {json.dumps(r)[:60]}")
except Exception as ex:
print(f" {name}: ERROR -> {ex}")
sc.unload()
s.detach()
print("\nDone!")