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

网友投稿 1474 2022-10-20

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

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

一、目标

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

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

​​91fans.com-/post/androi…​​

Sekiro + Xposed 签名解决方案

​​91fans.com-/post/sekiro…​​

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

二、步骤

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

​​91fans.com-/post/smallv…​​

先运行服务器端

官网在这里 ​​github.com/virjar/seki…​​

git clone下来;

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

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

​​oss.virjar.com/sekiro/seki…​​

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

window下运行 sekiro.bat

Linux/mac下运行 sekiro.sh

这样服务器端就跑起来。

firda开发sekiro客户端

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

// 在普通Android应用中使用sekironew 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 来处理调用逻辑。

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状态查看和访问服务

​​ 展示当前系统中注册过的所有 group

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

​​展示特定 group 下,注册过那些客户端/手机。

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

执行一下看看结果

# -*- coding: utf-8 -*-import requestsurl = '= '18913872618'data = { 'group': 'fridaHook_atlasEncrypt', 'action': 'mobile', 'requestData': mobileid }res = requests.post(url,json=data).json()print(res['data'])

结果很完美

3sCt3iAAMzIwOTAxMjA4AM8HAO7Jtk8ia8xTExAAAACFS7z70nRA3Ppgtdz9Kefb

收工上鲜啤

三、总结

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

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

sekiro 官方文档

​​sekiro.virjar.com/sekiro-doc/…​​

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

​​qinless.com/387​​

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:答题酷小程序,适用于考核,评测等场景,分为四大功能:答题,错题集,排名,答题记录;
下一篇:用 koa v2.0 框架和 TypeScript 写的服务器端架构。
相关文章

 发表评论

暂时没有评论,来抢沙发吧~