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…

【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…

分布式搜索elasticsearch(1)

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

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; 以上添加…

网络套接字-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…

YOLOv9改进项目|关于本周更新计划的说明24/3/12

目前售价售价59.9&#xff0c;改进点30个 专栏地址&#xff1a; 专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 日期&#xff1a;24/3/12 本周更新计划说明&#xff1a; 1. 更新华为Gold YOLO中的…

读西游记第一回:西游记世界格局

天地之数&#xff1a; 元&#xff1a;十二万九千六百岁&#xff08;129600年&#xff09; 1元12会&#xff1a;子、丑、寅、卯、巳、午、未、申、酉、戌、亥。每会18000年。与12地支对应。 亥会期&#xff1a;前5400年混沌期&#xff0c;后5400年&#xff0c;盘古开天辟地&am…

论文阅读——Vision Transformer with Deformable Attention

Vision Transformer with Deformable Attention 多头自注意力公式化为&#xff1a; 第l层transformer模块公式化为&#xff1a; 在Transformer模型中简单地实现DCN是一个non-trivial的问题。在DCN中&#xff0c;特征图上的每个元素都单独学习其偏移&#xff0c;其中HWC特征图上…

Mysql数据库学习笔记——第二篇

DML 添加数据 INSERT INTO 表名(字段1,字段2,……) VALUES(值1,值2,……); # 给指定字段添加数据INSERT INTO 表名 VALUES(值1,值2,……); # 给全部字段添加数据INSERT INTO 表名(字段1,字段2,……) VALUES(值1,值2,……),(值1,值2,……),(值1,值2,……); …

【开发】微服务整合Sentinel

目录 前言 1W&#xff1a;什么是Sentinel&#xff1f; 2W&#xff1a;为什么使用Sentinel&#xff1f; 3W&#xff1a;如何使用Sentinel&#xff1f; 1. 在pom.xml中导入Sentinel依赖坐标 2. 配置控制台 3. 访问API接口的任意端点 流量控制 1. 簇点链路 2. 快速入门…

某医院系统未授权访问

开局还是先测一下登录框&#xff0c;弱密码走一波&#xff0c;无果 通过指纹识别出该站是springboot开发&#xff0c;扫描目录查看是否存在泄露 存在泄露&#xff0c;访问地址 很多接口&#xff0c;不可能一个一个手动测试吧&#xff0c;上工具 工具扫描完会生成文档&#xff0…