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

一、目标

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

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

window下运行 sekiro.bat

Linux/mac下运行 sekiro.sh

这样服务器端就跑起来。

firda开发sekiro客户端

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

1// 在普通Android应用中使用sekiro 2new SekiroClient("test-android", UUID.randomUUID().toString()) 3 .setupSekiroRequestInitializer(new SekiroRequestInitializer() { 4 @Override 5 public void onSekiroRequest(SekiroRequest sekiroRequest, HandlerRegistry handlerRegistry) { 6 handlerRegistry.registerSekiroHandler(new ClientTimeHandler()); 7 } 8 }).start();

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

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

1function initSekiro() { 2 const SekiroClient = Java.use('com.virjar.sekiro.business.api.SekiroClient'); 3 const ActionHandler = Java.use('com.virjar.sekiro.business.api.interfaze.ActionHandler'); 4 const SekiroRequestInitializer = Java.use('com.virjar.sekiro.business.api.interfaze.SekiroRequestInitializer'); 5 6 // 注册一个ClientTimeHandler类,继承 ActionHandler 7 const ClientTimeHandler = Java.registerClass({ 8 name: 'ClientTimeHandler', 9 implements: [ActionHandler], 10 methods: { 11 action: function () { 12 return 'mobile'; 13 }, 14 handleRequest: function (sekiroRequest, sekiroResponse) { 15 const requestJsonData = sekiroRequest.getJsonModel(); 16 const requestData = JSON.parse(requestJsonData)['requestData']; 17 18 if(!requestData){ 19 sekiroResponse.failed(JavaString.$new('requestData 不能为空')); 20 }else{ 21 try{ 22 sekiroResponse.success(callMobile(requestData)); 23 }catch(error){ 24 sekiroResponse.failed(JavaString.$new(error.stack)); 25 throw error; 26 } 27 } 28 } 29 } 30 }) 31 32 // 注册一个 SekiroRequestDefault类, 继承SekiroRequestInitializer 33 const SekiroRequestDefault = Java.registerClass({ 34 name: "SekiroRequestDefault", 35 implements: [SekiroRequestInitializer], 36 methods: { 37 onSekiroRequest: function (sekiroRequest, handlerRegistry) { 38 handlerRegistry.registerSekiroHandler(ClientTimeHandler.$new()); 39 } 40 } 41 }); 42 43 const clientID = guid(); 44 const group = 'fridaHook_atlasEncrypt'; 45 const ip = '110.42.246.110'; 46 47 // 服务端端口号 默认是 conf/config.properties 里面配置5620, 这里改成了 8989 48 const sekiro = SekiroClient.$new(group, clientID, ip, 8989); 49 sekiro.setupSekiroRequestInitializer(SekiroRequestDefault.$new()); 50 sekiro.start(); 51}

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

sekiro状态查看和访问服务

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

{"data":["fridaHook_atlasEncrypt"],"ok":true,"status":0}

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

{"data":["65c8e8b5-1a67-2036-5b38-769cb670aeb3"],"ok":true,"status":0}

执行一下看看结果

1# -*- coding: utf-8 -*- 2 3import requests 4 5url = 'http://110.42.246.110:8989/business-demo/invoke' 6 7mobileid = '18913872618' 8 9data = { 10 'group': 'fridaHook_atlasEncrypt', 11 'action': 'mobile', 12 'requestData': mobileid 13 } 14 15res = requests.post(url,json=data).json() 16print(res['data'])

结果很完美

3sCt3iAAMzIwOTAxMjA4AM8HAO7Jtk8ia8xTExAAAACFS7z70nRA3Ppgtdz9Kefb

收工上鲜啤

三、总结

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

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

sekiro 官方文档

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

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

https://www.qinless.com/387

ffshow.jpeg

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

TIP: 本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系,本文涉及到的代码项目可以去 奋飞的朋友们 知识星球自取,欢迎加入知识星球一起学习探讨技术。有问题可以加我wx: fenfei331 讨论下。

关注微信公众号: 奋飞安全,最新技术干货实时推送

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

IOS 某电商App签名算法解析(二) Frida RPC调用

一、目标Android下用frida来做rpc调用计算签名,我们已经玩的很熟练了。今天介绍在IOS下的玩法。要点如下:参数类型确认NSDictionaryNSArray等ObjectC对象的构造和复制ObjectC类方法和对象方法的调用附送福利,ObjectC的nil参数如何构造二、步骤参考Android下的玩法参照某段子App协议分

IOS 联真机签名解决方案

一、目标我们之前介绍过和。那么他们搭配起来能解决什么问题呢?在Android联真机签名方案中,我们提到过Fridarpc方案的缺点:frida不是很稳定,偶尔会崩溃出退frida启动需要连PC(不过这个缺点已经被给解决了)那么在Ios下有没有类似Xposed的东东?是的,就是Tweak。二、步骤GCDWebServerGCDWebS