72 lines
2.0 KiB
Python
72 lines
2.0 KiB
Python
#!/usr/bin/env python
|
||
# -*- encoding: utf-8 -*-
|
||
'''
|
||
@File : app.py
|
||
@Time : 2020/09/22 18:52:11
|
||
@Author : Lateautumn4lin
|
||
@Version : 1.0
|
||
@Contact : Lateautumn4lin
|
||
@License : (C)Copyright 2020
|
||
@Desc : None
|
||
'''
|
||
from pathlib import Path
|
||
from pydantic import BaseModel, Field, create_model
|
||
from fastapi import APIRouter
|
||
import time
|
||
import frida
|
||
from starlette.applications import Starlette
|
||
from fastapi import FastAPI
|
||
from loguru import logger
|
||
from utils.generate_function import generate_function
|
||
from utils import (
|
||
name_transform,
|
||
detect_frida_state,
|
||
start_frida_server,
|
||
get_app_info
|
||
)
|
||
from config import *
|
||
|
||
# 配置相关函数的参数类型列表
|
||
function_params_hints = {
|
||
"encryptData": [0, 0, 0, 0, "", 0, 0, 0, 0, 0, 0]
|
||
}
|
||
# app相关信息
|
||
_frida_js_path = Path(__file__).absolute().parent/"apps/kuaiduizuoye.js"
|
||
_package_name = "com.kuaiduizuoye.scan"
|
||
|
||
# frida注入
|
||
if not detect_frida_state():
|
||
# 启动frida-server,增加延迟防止附加失败
|
||
start_frida_server()
|
||
time.sleep(3)
|
||
session = frida.get_usb_device().attach(_package_name)
|
||
script = session.create_script(
|
||
open(_frida_js_path, encoding="utf-8").read()
|
||
)
|
||
script.load()
|
||
|
||
|
||
def init_app() -> Starlette:
|
||
app = FastAPI()
|
||
# 每个app创建特有路由
|
||
router = APIRouter()
|
||
for api_name, params in get_app_info(parse_path=PRASE_PATH, frida_js_path=_frida_js_path).items():
|
||
params_dict = dict(zip(params, function_params_hints[api_name])) if (
|
||
api_name in function_params_hints) else dict.fromkeys(params, "bb")
|
||
model_name = f"{api_name}Model"
|
||
Model = create_model(model_name, **params_dict)
|
||
new_api_name = name_transform(api_name)
|
||
func = generate_function(
|
||
new_api_name,
|
||
script,
|
||
model_name,
|
||
Model
|
||
)
|
||
router.add_api_route(f"/{new_api_name}", func, methods=["POST"])
|
||
# 全局添加各app路由类
|
||
app.include_router(router)
|
||
return app
|
||
|
||
|
||
app = init_app()
|