sekiro RPC框架的安装与简单使用(转)

发布时间 2023-06-12 17:52:53作者: 阿布_alone

前言

上篇介绍了下平头哥的安装使用,这篇再来介绍下渣总的只狼(sekiro)框架

然后再简单讲下如何通过平头哥注入sekiro,实现RPC调用

一、sekiro是什么
1. 简介
sekiro是由邓维佳(渣总)写的一个基于长链接和代码注入的 API 服务暴露框架

sekiro即可以用于app逆向,又可以用在js逆向

找好注入位置时机的话,可以秒杀许多网站的加密算法(大厂也不例外)

详细介绍:https://sekiro.virjar.com/sekiro-doc/
项目地址:https://github.com/virjar/sekiro

2. 逻辑结构
框架主要分为两个方面:

server:
暴露TCP端口和HTTP端口
管理TCP连接的client
处理user发来的HTTP请求

client:
通过TCP与server连接
响应server发来的TCP请求

3. 运行流程
启动server服务,开发client业务脚本
client通过TCP和server建立长连接
user发送HTTP请求给server
server根据用户发来的HTTP请求的参数,通过TCP将请求转发给client
client收到请求后,根据业务逻辑响应server
server将从client收到的请求返回给user

 

上图为单个client示意图,实际上可以注册许多个client
4. 下载和部署
构建:
在mac/linux上,执行脚本 build_demo_server.sh,得到产出发布压缩包:sekiro-service-demo/target/sekiro-release-demo.zip
如果是windows,或者不想自己构建,可以在这里直接下载:https://oss.virjar.com/sekiro/sekiro-demo

部署:
1.安装java(自行安装)
2.打开cmd,运行下列指令,启动server
mac/linux: ./bin/sekiro.sh
windows : ./bin/sekiro.bat

二、如何开发sekiro客户端
1.打开平头哥项目
xposed和平头哥ratel都是强大的Hook框架,如果对xposed框架比较熟悉的话也可以使用xposed框架进行RPC注入,此处使用平头哥框架进行RPC脚本的注入

不熟悉平头哥的可以看下这篇文章 :
平头哥ratel安卓Hook框架的安装与简单使用

可以直接使用上篇文章的插件例子来改写sekiro的注入

2.编写Hook插件
  1.放入依赖 (build.gradle)

implementation 'com.virjar.sekiro.business:sekiro-business-api:1.4'

  

  1. 打开网络权限 (AndroidManifest.xml)
 <uses-permission android:name="android.permission.INTERNET" />

 

  1. 开发handler函数 (被请求时调用的逻辑)
package com.example.ratel_plugs;

import com.virjar.sekiro.business.api.interfaze.RequestHandler;
import com.virjar.sekiro.business.api.interfaze.SekiroRequest;
import com.virjar.sekiro.business.api.interfaze.SekiroResponse;

@Action("testHandler")
public class TestHandler implements RequestHandler {
    @Override
    public void handleRequest(SekiroRequest sekiroRequest, SekiroResponse sekiroResponse) {
        // 根据业务逻辑来写,此处以获取时间戳作为例子
        // 当rpc调用时获取手机当前时间戳返回
        sekiroResponse.success("手机现在的时间是:" + System.currentTimeMillis());
    }
}

  4.在HookEntry入口函数处,实例化 sekiroClient,注册handler
  关于group、SekiroClient、action、clientId等基础概念的介绍可移步作者的开发文档:
  https://sekiro.virjar.com/sekiro-doc/01_user_manual/2.basic.html

package com.example.ratel_plugs;

import android.os.Build;
import android.util.Log;

import com.virjar.ratel.api.rposed.IRposedHookLoadPackage;
import com.virjar.ratel.api.rposed.callbacks.RC_LoadPackage;
import com.virjar.sekiro.business.api.SekiroClient;
import com.virjar.sekiro.business.api.interfaze.HandlerRegistry;
import com.virjar.sekiro.business.api.interfaze.SekiroRequest;
import com.virjar.sekiro.business.api.interfaze.SekiroRequestInitializer;

public class HookEntry implements IRposedHookLoadPackage {
    private static final String TAG = "Ratelplugs";

    @Override
    public void handleLoadPackage(final RC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
        Log.d(TAG, "enter hook");
        Log.d(TAG, "handleLoadPackage: " + lpparam.packageName);
        startSekiro(lpparam);  // 调用startSekiro方法
    }

    // 连接sekiro服务器server
    private static void startSekiro(RC_LoadPackage.LoadPackageParam lpparam){
        // 获取设备的唯一标识 CLIENTID
        final String CLIENTID = Build.BRAND + "_" + Build.MODEL;
        // 创建SekiroClient对象 - 倒数第二个参数写电脑本机ip,用于该插件在手机安装后连接上电脑端开启的服务
        SekiroClient sekiroClient = new SekiroClient("test", CLIENTID,"192.168.1.8",5620);
        // 调用setupSekiroRequestInitializer方法 初始化
        sekiroClient.setupSekiroRequestInitializer(new SekiroRequestInitializer() {
            @Override
            public void onSekiroRequest(SekiroRequest sekiroRequest, HandlerRegistry handlerRegistry) {
                // 将上面开发好的Handler注册到client上
                handlerRegistry.registerSekiroHandler(new TestHandler());
            }
        });
        // 启动创建的sekiro客户端
        sekiroClient.start();
    }

}

三、如何使用sekiro
服务端(server)
启动server
mac/linux: ./bin/sekiro.sh
windows : ./bin/sekiro.bat
客户端(client)
将写好的插件安装到手机上并打开,然后访问下列链接(该链接是展示当前系统中注册过的所有 group)

http://127.0.0.1:5620/business-demo/groupList

访问结果如下所示即手机和电脑建立连接成功

{“status”:0,“data”:[“test”],ok":true}

http://127.0.0.1:5620//business-demo/invoke?group=test&action=testHandler (调用业务逻辑)

{“clientId”:“Xiaomi_MI 8”,“message”:null,“status”:0,“data”:“手机现在的时间是:1662714345424”}

data里面成功拿到了我们想要的设备时间,sekiro调用成功

总结
本文主要介绍了以下内容:
一、sekiro是什么
1.简介
2.逻辑结构
3.运行流程
4.下载和部署

二、如何开发sekiro客户端
1.打开平头哥项目
2.编写Hook插件

三、如何使用sekiro
服务端(server)
客户端(client)

原文链接:https://blog.csdn.net/m0_51159233/article/details/126770751