前言
上篇介绍了下平头哥的安装使用,这篇再来介绍下渣总的只狼(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'
- 打开网络权限 (AndroidManifest.xml)
<uses-permission android:name="android.permission.INTERNET" />
- 开发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