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 {

    @Override
    public 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("", "");

    @Override
    protected 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() {
            @Override
            public 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 {

    @Override
    public 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("", "");

    @Override
    protected 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() {
            @Override
            public 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->";

    @AutoBind
    private Integer page;
    private final ClassLoader mClassLoader;
    public SignHandler(ClassLoader classLoader){
        mClassLoader = classLoader;
    }

    @Override
    public 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->";

    @Override
    public 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() {
                @Override
                public 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
在这里插入图片描述

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Ratel平头哥是一款用于Android系统的hook工具。它可以实现对Android应用程序的动态调试和修改。 这款工具可以在不修改应用程序源代码的情况下,对应用程序进行hook操作。具体来说,Ratel平头哥可以用来修改应用程序中的参数、方法和对象等。同时,它还支持一些高级的hook技术,如Inline Hook和Xposed Hook。 除了hook功能外,Ratel平头哥还具有一些实用的辅助功能,如应用程序稳定性监测、Crash日志收集等。这些功能可以帮助开发者更好地了解应用程序的运行状况,更快地排查和修复bug。 需要注意的是,使用Ratel平头哥进行hook操作需要一定的专业知识和技能。此外,它仅适用于Android系统,对于iOS系统的应用程序无法使用。因此,在使用该工具时,需要谨慎、理性地进行操作,以免影响应用程序的正常运行。 ### 回答2: Ratel平头哥是一款针对Android系统的hook工具,可以帮助开发者在不修改应用程序源代码的情况下,对应用程序进行二次开发和定制化。Ratel平头哥采用了一种名为“沙箱”技术的方式,从而实现了对应用程序的hook。沙箱是指在操作系统中运行的一种隔离环境,它可以模拟硬件环境、网络环境等,从而确保应用程序在沙箱环境中运行时不会影响到操作系统的正常运行。这种技术不仅保护了操作系统的安全性,同时也提高了应用程序的运行效率和稳定性。 Ratel平头哥可以对应用程序的各种相关操作进行hook,例如调用系统API、读取文件、访问网络等等。通过hook这些操作,开发者可以实现对应用程序的加密、优化、广告屏蔽等功能,并抵御恶意攻击、防止反编译等。同时,Ratel平头哥还支持插件化开发,用户可以自己编写插件来完成特定的任务。由于Ratel平头哥具有较强的兼容性,用户无需担心修改后的应用程序会出现各种奇怪的问题。 总之,Ratel平头哥是一款很实用的hook工具,为安卓系统提供了更多的二次开发空间,可以助力开发者快速定制化自己的应用程序。它不仅具有强大的功能,而且还很容易上手,是一款非常值得尝试的工具。 ### 回答3: Ratel平头哥是一种流行的Android Hook工具,它能够助力在Android应用中实现不同的挂钩操作。它支持多种应用中检测活动的方法,如onCreate、onStart、onResume和onPause等。这些都可以被编程人员作为钩子使用,以便更好地分析内存和线程操作,并跟踪应用的运行情况。 Ratel平头哥还支持沙箱技术,并能够用于修改应用程序的原始代码。这些代码可以用于修复应用程序的漏洞,或者用于帮助应用程序中的其他开发人员进行测量和调试操作。平头哥工具旨在为开发人员提供一种简单的方法,以便轻松地重载不同的类,添加自定义函数,或者随时监视应用程序中发生的任何事件。 总的来说,Ratel平头哥是一个功能丰富且易于使用Android Hook工具,它为开发人员提供了许多有用的功能,并且可以用于监视应用程序的运行和调试过程。使用该工具还可以加速开发过程,提高开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是花臂不花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值