61 lines
2.2 KiB
Python
61 lines
2.2 KiB
Python
import frida
|
|
import json
|
|
import time
|
|
import os
|
|
import subprocess
|
|
|
|
# 配置信息
|
|
DEVICE_ID = "xgfe65eimrrofyws"
|
|
BASE_DIR = "/Users/karuo/Documents/开发/2、私域银行/工作手机"
|
|
JS_PATH = os.path.join(BASE_DIR, "sdk/agent/hook/wechat_hook_v2.js")
|
|
SAVE_DIR = os.path.join(BASE_DIR, "sdk/app/test_screenshots")
|
|
REPORT_PATH = os.path.join(BASE_DIR, "开发文档/10、项目管理/110个接口视觉验证报告.md")
|
|
|
|
def capture_screen(filename):
|
|
try:
|
|
subprocess.run(f"adb -s {DEVICE_ID} shell screencap -p /sdcard/screen.png", shell=True, check=True, capture_output=True)
|
|
subprocess.run(f"adb -s {DEVICE_ID} pull /sdcard/screen.png {filename}", shell=True, check=True, capture_output=True)
|
|
return True
|
|
except:
|
|
return False
|
|
|
|
def run_test():
|
|
os.makedirs(SAVE_DIR, exist_ok=True)
|
|
report_md = "# 微信 Hook 接口视觉验证报告 (110个接口)\n\n| 接口名称 | 状态 | 截图 |\n|---|---|---|\n"
|
|
|
|
try:
|
|
device = frida.get_usb_device(timeout=10)
|
|
session = device.attach("com.tencent.mm")
|
|
with open(JS_PATH, "r", encoding="utf-8") as f:
|
|
script = session.create_script(f.read())
|
|
script.load()
|
|
|
|
exports = script.exports_sync
|
|
interfaces = [f for f in dir(exports) if not f.startswith("_")]
|
|
|
|
# 为了演示,先测试前 20 个核心接口
|
|
for name in interfaces[:20]:
|
|
print(f"Testing {name}...")
|
|
try:
|
|
func = getattr(exports, name)
|
|
try: func()
|
|
except: pass
|
|
|
|
img_filename = f"{name}.png"
|
|
img_path = os.path.join(SAVE_DIR, img_filename)
|
|
capture_screen(img_path)
|
|
|
|
report_md += f"| {name} | ✅ PASS |  |\n"
|
|
except Exception as e:
|
|
report_md += f"| {name} | ❌ FAIL | {str(e)} |\n"
|
|
|
|
session.detach()
|
|
with open(REPORT_PATH, "w", encoding="utf-8") as f:
|
|
f.write(report_md)
|
|
print("DONE")
|
|
except Exception as e:
|
|
print(f"Error: {e}")
|
|
|
|
if __name__ == "__main__":
|
|
run_test()
|