前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >手把手教你搭个Frida + Sekiro Rpc框架

手把手教你搭个Frida + Sekiro Rpc框架

原创
作者头像
奋飞安全
发布于 2022-05-22 07:42:21
发布于 2022-05-22 07:42:21
1.6K0
举报
文章被收录于专栏:奋飞安全奋飞安全

一、目标

联手机签名是个比较取巧的方案,之前我们介绍过

android连真机签名公网ip更新方案

http://91fans.com.cn/post/androidipsend/

Sekiro + Xposed 签名解决方案

http://91fans.com.cn/post/sekiroone/

现在frida用的比较多,并且Sekiro也升级了新版本,我们今天就来手把手教你搭个 Frida + Sekiro Rpc框架。

二、步骤

我们以这个手机号加密算法为例

http://91fans.com.cn/post/smallvideosignthr/

先运行服务器端

官网在这里 https://github.com/virjar/sekiro

git clone下来;

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

如果是windows,或者不想自己构建,可以在这里直接下载

https://oss.virjar.com/sekiro/sekiro-demo

把zip包传到服务器上去解压

sekirorun.png
sekirorun.png

window下运行 sekiro.bat

Linux/mac下运行 sekiro.sh

这样服务器端就跑起来。

firda开发sekiro客户端

sekiro是个相当牛X的库,基本上就是开箱即用了。

代码语言:txt
AI代码解释
复制
// 在普通Android应用中使用sekiro
new SekiroClient("test-android", UUID.randomUUID().toString())
        .setupSekiroRequestInitializer(new SekiroRequestInitializer() {
            @Override
            public void onSekiroRequest(SekiroRequest sekiroRequest, HandlerRegistry handlerRegistry) {
                handlerRegistry.registerSekiroHandler(new ClientTimeHandler());
            }
        }).start();

在Android代码里面这样一条api就可以了,然后在ClientTimeHandler类里面写逻辑

frida使用就稍稍有点复杂,复杂的点就在于要创建一个java类 ClientTimeHandler 来处理调用逻辑。

代码语言:txt
AI代码解释
复制
function initSekiro() {
    const SekiroClient = Java.use('com.virjar.sekiro.business.api.SekiroClient');
    const ActionHandler = Java.use('com.virjar.sekiro.business.api.interfaze.ActionHandler');
    const SekiroRequestInitializer = Java.use('com.virjar.sekiro.business.api.interfaze.SekiroRequestInitializer');

	//  注册一个ClientTimeHandler类,继承 ActionHandler
    const ClientTimeHandler = Java.registerClass({
        name: 'ClientTimeHandler',
        implements: [ActionHandler],
        methods: {
            action: function () {
                return 'mobile';
            },
            handleRequest: function (sekiroRequest, sekiroResponse) {
				const requestJsonData = sekiroRequest.getJsonModel();
				const requestData = JSON.parse(requestJsonData)['requestData'];

				if(!requestData){
					sekiroResponse.failed(JavaString.$new('requestData 不能为空'));
				}else{
					try{
						sekiroResponse.success(callMobile(requestData));
					}catch(error){
						sekiroResponse.failed(JavaString.$new(error.stack));
						throw error;
					}
				}
            }
        }
    })
	
  // 注册一个 SekiroRequestDefault类, 继承SekiroRequestInitializer
    const SekiroRequestDefault = Java.registerClass({
        name: "SekiroRequestDefault",
        implements: [SekiroRequestInitializer],
        methods: {
            onSekiroRequest: function (sekiroRequest, handlerRegistry) {
                handlerRegistry.registerSekiroHandler(ClientTimeHandler.$new());
            }
        }
    });

    const clientID = guid();
    const group = 'fridaHook_atlasEncrypt';
    const ip = '110.42.246.110';

	 // 服务端端口号 默认是 conf/config.properties 里面配置5620, 这里改成了 8989
    const sekiro = SekiroClient.$new(group, clientID, ip, 8989);
    sekiro.setupSekiroRequestInitializer(SekiroRequestDefault.$new());
    sekiro.start();
}

这就可以了,挂上frida跑起来

sekiro状态查看和访问服务

http://110.42.246.110:8989/business-demo/groupList 展示当前系统中注册过的所有 group

代码语言:txt
AI代码解释
复制
{"data":["fridaHook_atlasEncrypt"],"ok":true,"status":0}

http://110.42.246.110:8989/business-demo/clientQueue?group=fridaHook_atlasEncrypt 展示特定 group 下,注册过那些客户端/手机。

代码语言:txt
AI代码解释
复制
{"data":["65c8e8b5-1a67-2036-5b38-769cb670aeb3"],"ok":true,"status":0}

执行一下看看结果

代码语言:txt
AI代码解释
复制
# -*- coding: utf-8 -*-

import requests

url = 'http://110.42.246.110:8989/business-demo/invoke'

mobileid = '18913872618'

data = {
    'group': 'fridaHook_atlasEncrypt',
    'action': 'mobile',
    'requestData': mobileid
    }

res = requests.post(url,json=data).json()
print(res['data'])

结果很完美

代码语言:txt
AI代码解释
复制
3sCt3iAAMzIwOTAxMjA4AM8HAO7Jtk8ia8xTExAAAACFS7z70nRA3Ppgtdz9Kefb

收工上鲜啤

三、总结

基本上java的库,frida都可以无缝利用。比Xposed玩起来方便多了。

有个小小的问题是 frida hook的app有崩溃的几率, 这个就需要搞个看门狗来实现了。

sekiro 官方文档

https://sekiro.virjar.com/sekiro-doc/index.html

frida 加载 sekiro dex 文件 实现与服务端交互

https://www.qinless.com/387

这才知道我全部的努力,不过是完成了普通的生活。

TIP: 本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
Hangfire Redis 实现秒级定时任务、使用 CQRS 实现动态执行代码
本文示例项目仓库:https://github.com/whuanle/HangfireDemo
痴者工良
2025/04/19
890
Hangfire Redis 实现秒级定时任务、使用 CQRS 实现动态执行代码
.NET 纯原生实现 Cron 定时任务执行,未依赖第三方组件 (Timer 优化版)
在上个月写过一篇 .NET 纯原生实现 Cron 定时任务执行,未依赖第三方组件 的文章,当时 CronSchedule 的实现是使用了,每个服务都独立进入到一个 while 循环中,进行定期扫描是否到了执行时间来实现的,但是那个逻辑有些问题,经过各位朋友的测试,发现当多个任务的时候存在一定概率不按照计划执行的情况。
乌拉栋
2022/10/28
3800
.NET 纯原生实现 Cron 定时任务执行,未依赖第三方组件 (Timer 优化版)
vue3Cron表达式组件
no-vue3-cron仓库地址:https://github.com/wuchuanpeng/no-vue3-cron
风花一世月
2024/03/19
8220
golang cron 定时任务
最开始接触定时任务的概念是在大二的一个计算机操作系统设计的实验课上,当时老师给了五个任务要求,自己任选三个小组完成。
李海彬
2019/05/08
12.3K0
读猿码系列——5.解析Golang常用定时任务库gron和cron
在实际开发环境中,我们经常会接触到定时任务的概念,比如每6个月清理一次历史日志,每天0点推送卡片消息或者每天凌晨2点重启服务等多种场景。在Linux系统中用crontab就可以搞定,你只需要简单的语法控制就能实现定时的语义,具体用法可以参考下在线工具:https://crontab.guru/。
才浅Coding攻略
2022/12/12
1.7K0
读猿码系列——5.解析Golang常用定时任务库gron和cron
Vue3项目-生成Cron表达式组件
  最近做的一个vue3项目过程中,需要用到cron表达式功能,而对于普通业务人员,他们是不懂cron表达式规则的,所以需要做一个可手动配置生成cron表达式的功能。从网上查找了一些相关资料,然后结合vue3+Element Plus,改造成适合自己项目的组件。记录代码如下:
用户1174387
2022/12/18
5.6K9
Vue3项目-生成Cron表达式组件
.NET7 Preview4 之OpenAPI swagger改进
在MiniAPI系列中,《.NET6之MiniAPI(十八):OpenAPI swagger》介绍了swagger在MiniAPI框架中的使用,当时留下很多不足,随着.NET7 Preview4的推出,这方面得到了很大的改进,我还是使用“十八”这篇文章的案例。 如果想参看原来文章,见下面引用: 此次对OpenAPI的提升主要是通过命名空间Microsoft.AspNetCore.OpenApi带来的。
张哥编程
2024/12/13
650
.NET7 Preview4 之OpenAPI swagger改进
ASP.NET Core+Quartz.Net实现web定时任务
作为一枚后端程序狗,项目实践常遇到定时任务的工作,最容易想到的的思路就是利用Windows计划任务/wndows service程序/Crontab程序等主机方法在主机上部署定时任务程序/脚本。
有态度的马甲
2020/04/16
2.8K0
ASP.NET Core+Quartz.Net实现web定时任务
Quartz3.0定时任务学习之异步调度器
1,Quartz3将它的资源类库拆的更细了,比如,想使用Quartz3开发,最少要引用Quartz,Quartz.Jobs,Quartz.Plugins这三个类库。
Kiba518
2020/05/25
9700
Quartz3.0定时任务学习之异步调度器
python 解析 crontab配置
接触python一段时间了,最近要用py做个 监控功能,需要解析crontab中的配置信息, 本想偷懒一下,直接 百度/谷哥出来,无奈半天没找着,只好自己写一个,实现代码及使用 实例如下,望各位路过的大虾大神不吝赐教,能指点得到更优的处理办法:
py3study
2020/01/08
1.1K0
linux下使用crontab命令配置定时任务
crontab -u root -e 打开crontab的配置文件,并编辑完成 Ctrl + O 写入内容, 出现File name to Write …,输入Enter Ctrl +X 保存并输出,保存完成 配置定时任务时间介绍: 每一分钟执行 */1 * * * * 每五小时执行 0 */5 * * * 每天执行 0 0 * * * 每周执行 0 0 * * 0 每月执行 0 0 1 * * 每年执行 0 0 1 1 * 界面如下: 编写脚本的时候,一定要导入python环境变量, 要不容易不执行,这里我卡好久才最后发现是环境变量的问题,要么就是脚本权限的问题
懿曲折扇情
2022/08/24
8150
linux下使用crontab命令配置定时任务
免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)
彭泽0902
2018/01/04
2.5K0
c#之 quartz的学习
还有从 JobExecutionContext’s merged JobDataMap 中获取值的方式
Vincent-yuan
2019/09/11
7210
用abp vNext快速开发Quartz.NET定时任务管理界面
今天这篇文章我将通过实例代码带着大家一步一步通过abp vNext这个asp.net core的快速开发框架来进行Quartz.net定时任务调度的管理界面的开发。大伙最好跟着一起敲一下代码,当然源码我会上传到github上,有兴趣的小伙伴可以在文章底部查看源码链接。
依乐祝
2019/03/11
2.4K0
用abp vNext快速开发Quartz.NET定时任务管理界面
Go 每日一库之 cron
cron一个用于管理定时任务的库,用 Go 实现 Linux 中crontab这个命令的效果。之前我们也介绍过一个类似的 Go 库——gron。gron代码小巧,用于学习是比较好的。但是它功能相对简单些,并且已经不维护了。如果有定时任务需求,还是建议使用cron。
用户7731323
2020/09/08
2.8K0
Android Compose 新闻App(三)网络数据Compose UI显示加载、Room和DataStore使用
  现在数据已经有了,现在主要就是Compose UI的设计。完成本篇文章,效果图如下:
晨曦_LLW
2022/04/15
3.2K0
Android Compose 新闻App(三)网络数据Compose UI显示加载、Room和DataStore使用
Linux-使用cron执行定时任务
cron在linux中主要用于处理定时任务, 分为crond和crontab.crond主要用于系统进程, 而我们主要使用crontab
打铁读书郎
2024/04/11
6580
Go组件学习——cron定时器
  反而,前几天在写Java的时候,发现Java怎么启动这么慢,Java怎么能够容忍这些用不到的代码还理直气壮的躺在那……等等,这些话在哪听过类似的???
JackieZheng
2019/07/30
2.1K0
Go组件学习——cron定时器
java 获取当前时间的三种方法
1.通过Util包中的Date获取 Date date = new Date(); SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd :hh:mm:ss"); System.out.println(dateFormat.format(date)); 2.通过Util包的Calendar 获取 Calendar calendar= Calendar.getInstance(); SimpleDateFormat dateForm
botkenni
2019/11/04
45.9K0
推荐几种Java任务调度的实现
原文:http://www.ibm.com/developerworks/cn/java/j-lo-taskschedule/
瑾诺学长
2018/09/21
2.1K0
推荐阅读
相关推荐
Hangfire Redis 实现秒级定时任务、使用 CQRS 实现动态执行代码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档