64 lines
1.7 KiB
Python
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!")
|