app逆向-ratel框架-sekiro框架的安装使用

文章目录

    • 一、前言
    • 二、初次尝试
    • 三、原⽣APP的使⽤
    • 四、ratel框架结合sekiro框架使用

一、前言

sekiro主要支持多节点的程序调用,所以他归属于RPC(Remote Procedure Call)框架:API管理、鉴权、分布式、负载均衡、跨语言

开源文档:https://sekiro.iinti.cn/sekiro-doc/

二、初次尝试

demoServer 是 sekiro 商业版的一个分支,他和商业版本的 server 保持相同的协议,但是拥有更少的功能。

在 Linux 或者 mac 上,执行脚本 build_demo_server.sh ,之后得到产出发布压缩包:sekiro-service-demo/target/sekiro-release-demo.zip

如果是 windows,或者不想自己构建,可以在这里直接下载 https://oss.iinti.cn/sekiro/sekiro-demo

安装 java(自行安装)

运行启动脚本:

bin/SekiroMain.sh :mac or linux
bin/SekiroMain.bat :windows

启动效果
在这里插入图片描述
浏览器请求测试:http://127.0.0.1:5612/business/groupList

展示当前系统有那些注册过的group
在这里插入图片描述

三、原⽣APP的使⽤

build.gradle 添加依赖

// 依赖
implementation 'com.virjar.sekiro.business:sekiro-business-api:1.4'

每个handler都必须有action,使用注解方式设置action

package com.example.myapplication.handlers;import com.virjar.sekiro.business.api.interfaze.Action;
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("clientTime")
public class ClientTimeHandler implements RequestHandler {@Overridepublic void handleRequest(SekiroRequest sekiroRequest, SekiroResponse sekiroResponse) {// 根据业务逻辑来写,此处以获取时间戳作为例子// 当rpc调用时获取手机当前时间戳返回sekiroResponse.success("当前时间:" + System.currentTimeMillis());}
}

handler处理程序 MainActivity002.java

package com.example.myapplication;import android.os.Build;
import android.os.Bundle;
import android.util.Log;import androidx.appcompat.app.AppCompatActivity;import com.example.myapplication.handlers.ClientTimeHandler;
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 MainActivity002 extends AppCompatActivity {private static final String TAG = "myapplication->";// Build类获取系统信息private final String client_id = Build.BOARD + " " + Build.MODEL.replace("", "");@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main002);// 创建客户端Log.d(TAG, "手机品牌和手机型号: " + client_id);SekiroClient sekiroClient = new SekiroClient("demo", client_id, "192.168.10.9", 5612);sekiroClient.setupSekiroRequestInitializer(new SekiroRequestInitializer() {@Overridepublic void onSekiroRequest(SekiroRequest sekiroRequest, HandlerRegistry handlerRegistry) {handlerRegistry.registerSekiroHandler(new ClientTimeHandler());}});sekiroClient.start();}
}

打包运行app,并请求rpc接口http://127.0.0.1:5612/business/groupList显示效果:
在这里插入图片描述
浏览器效果:
在这里插入图片描述
查看队列状态

http://127.0.0.1:5612/business/clientQueue?group=demo

浏览器效果:
在这里插入图片描述
调用转发 相关文档:地址

http://127.0.0.1:5612/business/invoke?group=demo&action=clientTime

浏览器效果:
在这里插入图片描述
注册多个action, ClipboardHandler.java

package com.example.myapplication.handlers;import com.blankj.utilcode.util.ClipboardUtils;
import com.virjar.sekiro.business.api.interfaze.Action;
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("clipboard")
public class ClipboardHandler implements RequestHandler {@Overridepublic void handleRequest(SekiroRequest sekiroRequest, SekiroResponse sekiroResponse) {sekiroResponse.send(ClipboardUtils.getText().toString());}
}

注册服务

package com.example.myapplication;import android.os.Build;
import android.os.Bundle;
import android.util.Log;import androidx.appcompat.app.AppCompatActivity;import com.blankj.utilcode.util.ClipboardUtils;
import com.example.myapplication.handlers.ClientTimeHandler;
import com.example.myapplication.handlers.ClipboardHandler;
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 MainActivity002 extends AppCompatActivity {private static final String TAG = "myapplication->";// Build类获取系统信息private final String client_id = Build.BOARD + " " + Build.MODEL.replace("", "");@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main002);// 写入粘贴版ClipboardUtils.copyText(client_id);// 创建客户端Log.d(TAG, "手机品牌和手机型号: " + client_id);// 这里的ip地址是宿主机的ip地址SekiroClient sekiroClient = new SekiroClient("demo", client_id, "192.168.10.9", 5612);sekiroClient.setupSekiroRequestInitializer(new SekiroRequestInitializer() {@Overridepublic void onSekiroRequest(SekiroRequest sekiroRequest, HandlerRegistry handlerRegistry) {// 注册handlerRegistry.registerSekiroHandler(new ClientTimeHandler());handlerRegistry.registerSekiroHandler(new ClipboardHandler());}});sekiroClient.start();}
}

并请求rpc接口http://127.0.0.1:5612/business/invoke?group=demo&action=clipboard显示效果:
在这里插入图片描述

四、ratel框架结合sekiro框架使用

创建目标类代码 Sign

package com.example.myapplication;import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;public class Sign {public static String getSign(Integer page) throws NoSuchAlgorithmException {return new BigInteger(MessageDigest.getInstance("MD5").digest((page+"").getBytes())).toString(16);}
}

编写ratel插件,先创建一个action

package com.example.plugintest.handlers;import android.util.Log;import com.virjar.ratel.api.rposed.RposedHelpers;
import com.virjar.sekiro.business.api.interfaze.Action;
import com.virjar.sekiro.business.api.interfaze.AutoBind;
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("getSign")
public class SignHandler implements RequestHandler {private static final String TAG = "pluginTest->";@AutoBindprivate Integer page;private final ClassLoader mClassLoader;public SignHandler(ClassLoader classLoader){mClassLoader = classLoader;}@Overridepublic void handleRequest(SekiroRequest sekiroRequest, SekiroResponse sekiroResponse) {Log.d(TAG, "handleRequest:" + page);String sign = (String) RposedHelpers.callStaticMethod(RposedHelpers.findClass("com.example.myapplication.Sign", this.mClassLoader), "getSign", page);sekiroResponse.success(sign);}
}

注册服务

package com.example.plugintest;import android.os.Build;import com.example.plugintest.handlers.SignHandler;
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 sekiroEntry implements IRposedHookLoadPackage {// Build类获取系统信息private final String client_id = Build.BOARD + " " + Build.MODEL.replace("", "");public String TAG = "pluginTest->";@Overridepublic void handleLoadPackage(RC_LoadPackage.LoadPackageParam lpparam) throws Throwable {System.out.println(TAG + " 包名是什么:" + lpparam.packageName);if (lpparam.packageName.equals("com.example.myapplication")){System.out.println(TAG + " hook成功:" + lpparam.packageName);// 这里的ip地址是宿主机的ip地址SekiroClient sekiroClient = new SekiroClient("demo", client_id, "192.168.10.9", 5612);sekiroClient.setupSekiroRequestInitializer(new SekiroRequestInitializer() {@Overridepublic void onSekiroRequest(SekiroRequest sekiroRequest, HandlerRegistry handlerRegistry) {// 注册handlerRegistry.registerSekiroHandler(new SignHandler(lpparam.classLoader));}});sekiroClient.start();}}
}

测试效果:http://127.0.0.1:5612/business/invoke?group=demo&action=getSign&page=2
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/741956.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在群晖NAS部署WPS容器并实现无公网IP远程访问本地office软件

文章目录 1. 拉取WPS Office镜像2. 运行WPS Office镜像容器3. 本地访问WPS Office4. 群晖安装Cpolar5. 配置WPS Office远程地址6. 远程访问WPS Office小结 7. 固定公网地址 wps-office是一个在Linux服务器上部署WPS Office的镜像。它基于WPS Office的Linux版本,通过…

【C语言】指针详解2

👑个人主页:啊Q闻 🎇收录专栏:《C语言》 🎉道阻且长,行则将至 前言 这篇博客分享的指针部分为与数组有关的指针知识,包括一位数组和二维数组 指针详解1的博客 【C语言】指针…

算法思想总结:双指针算法

一、移动零 . - 力扣&#xff08;LeetCode&#xff09; 移动零 该题重要信息&#xff1a;1、保持非0元素的相对位置。2、原地对数组进行操作 思路&#xff1a;双指针算法 class Solution { public:void moveZeroes(vector<int>& nums){int nnums.size();for(int cur…

高性能服务系列【七】网络的延迟构成

上文讲过&#xff0c;在以太网中&#xff0c;不论要发多少字节的TCP数据&#xff0c;78个字节的固定协议格式是必须的。很显然&#xff0c;每个以太网帧越大&#xff0c;最大不超过1538个字节&#xff0c;则有效载荷占比越高。而以太网帧越小&#xff0c;同样字节的应用层数据&…

如何将本地开发完成后的数据库文件迁移到服务器中

将本地开发完成后的数据库文件迁移到服务器中的数据库是一个常见的操作&#xff0c;尤其是在项目部署阶段。这个过程大致可以分为导出&#xff08;备份&#xff09;本地数据库、传输文件到服务器、以及导入数据库到服务器数据库中三个步骤。这里我将以 MySQL 和 MongoDB 为例来…

【Linux】Shell编程【二】

目录 Shell流程控制条件测试注意事项示例[ condition ]与[[ condition ]]的区别 if条件单分支语法示例1&#xff1a;统计根分区使用率示例2&#xff1a;创建目录 双分支if条件语句语法案例1&#xff1a;备份mysql数据库案例2&#xff1a;判断apache是否启动&#xff0c;如果没有…

网络学习:9个计算机的“网络层”知识点

目录 一、IP 地址 1.1 分类表示法&#xff1a; 1.1.1 分类表示地址的其他说明 1.2 无分类编址 CIDR 二、IP 数据报文格式 Q: IP 报文里有什么&#xff1f;可以不按顺序或者字节来讲一讲 三、 路由概念 3.1 路由表 3.2 路由网络匹配 3.3 ARP 解析 3.4 RARP 逆地址解析…

考试题库:华为HCIA-Datacom易错题⑦(含答案解析)

华为认证HCIA-Datacom易错题举例和答案分析。 1、现有一台交换机通过某端口与一个指定端口相连&#xff0c;但是该端口不转发任何报文&#xff0c;却可以通过接收BPDU来监听网络变化&#xff0c;那么该端口的角色应该是&#xff08; &#xff09;。 A、Designated端口 B、Al…

柔性数组(变长数组)介绍

柔性数组简介 柔性数组&#xff0c;或称为可变长度数组&#xff0c;是一种在C语言结构体定义中使用的特殊数组&#xff0c;它允许结构体拥有一个可变大小的数组成员。柔性数组成员必须是结构体的最后一个成员&#xff0c;且它不占用结构体大小的计算&#xff0c;这使得可以动态…

分布式搜索elasticsearch(1)

1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据中快速找到需要的内容 例如&#xff1a; 在GitHub搜索代码 在电商网站搜索商品 在百度搜索答案…

25-5 SQL 注入攻击 - insert注入

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、注入原理 描述:insert注入是指通过前端注册的信息被后台通过insert操作插入到数据库中。如果后台没有做相应的处理,就可能导致insert注入漏洞。原因:后台未对用户输入进行充…

c++函数SetConsoleTextAttribute

前言 正文 1.作用&#xff1a; 2.函数格式(重点)&#xff1a; 3.参数(重点)&#xff1a; 前言 实用(真的) 正文 1.作用&#xff1a; 更改cmd的背景色与字体颜色 2.函数格式(重点)&#xff1a; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),10进制参数); …

第14届环境与农业工程国际会议(ICEAE 2024)即将召开!

2024年第14届环境与农业工程国际会议&#xff08;ICEAE 2024&#xff09;将于6月7日至9日在泰国曼谷召开。本次会议旨在促进环境与农业工程的研究和开发活动&#xff0c;共同探讨领域内最新以及具有根本性的进展突破。热忱欢迎从事相关领域研究的专家&#xff0c;学者和专业技术…

iStoreOS系统内安装HomeAssistant服务

iStoreOS系统内安装HomeAssistant服务 1. HomeAssistant服务 HomeAssistant是一款基于Python的开源智能家居系统&#xff0c;简称HA。 HomeAssistant可以方便地连接各种外部设备&#xff0c;如智能设备、摄像头、邮件、短消息和云服务等&#xff0c;其成熟的可连接组件有近千…

【Twinmotion】Twinmotion导入UE5

步骤 1. 在虚幻商城中安装“Datasmith Twinmotion导入器插件” 安装“面向虚幻引擎的Twinmotion内容” 2. 打开虚幻引擎&#xff0c;在插件中搜索“twinmotion”&#xff0c;勾选如下两个插件&#xff0c;然后重启虚幻引擎 3. 打开Twinmotion&#xff0c;随便添加一个物体 导出…

【阿里云系列】-ACK的Java应用POD无法访问云数据库Redis

问题介绍 如下图所示&#xff0c;是ACK集群的POD访问阿里云的云数据库Redis&#xff0c;如何实现访问呢 配置步骤 要实现ACK集群内的所有POD都可以访问云数据库Redis&#xff0c;则需要在Redsi的白名单里增加源IP或网段&#xff0c;如下图所示 注意&#xff1a; 以上添加…

PHP 伪协议详解

PHP 伪协议是一种特殊的 URL 格式&#xff0c;用于访问 PHP 内置的各种资源&#xff0c;如文件、变量、函数等。它们以 php:// 开头&#xff0c;后面跟着不同的协议标识符和参数。下面是一些常见的 PHP 伪协议及其用法的详解&#xff1a; php://input&#xff1a;用于访问请求…

网络套接字-UDP服务器

一 预备知识 1 端口号和进程id 主机间的数据传输本质是两个进程在通信&#xff0c;就像是我们打开抖音刷视频&#xff0c;视频不是都保存在手机上的&#xff0c;而是服务器发送给你的&#xff0c;这里就是用到了网络。 那如何保证把数据给指定进程呢? 就是用端口号去标识主机中…

Pytorch学习 day13(完整的模型训练步骤)

步骤一&#xff1a;定义神经网络结构 注意&#xff1a;由于一次batch_size的大小为64&#xff0c;表示一次放入64张图片&#xff0c;且Flatten()只会对单张图片的全部通道做拉直操作&#xff0c;也就是不会将batch_size合并&#xff0c;但是一张图片有3个通道&#xff0c;在Ma…

【MODBUS】j2mod java类库的介绍

目录 一、j2mod介绍 二、版本发布 三、已知issues 四、依赖 五、maven导入 j2mod库 一、j2mod介绍 这个项目是j2mod库的一个分支&#xff0c;j2mod最初是jamod。对这个库进行了大量的重构和代码修复&#xff0c;并添加了支持的JUnit测试&#xff0c;以确保该库适合生产使用…