基础概念
基础概念
Sekiro是一个rpc框架,他主要用于将内网环境的一个api功能发布到公开的外网环境,作为一个RPC API应用市场资源被其他业务方调用。
sekiro最初作为一个Android的安全工具,被设计用来给安全研究人员rpc调用Android App的功能,实现数据抓取、加密算法破译、C端api外放等功能。随着sekiro对于各种安全分析工具套件的支持,sekiro已经可以作为安全研究者的一个广泛应用的工具。
场景简述
Sekiro并不是一个常规需求产品,如果您初次接触Sekiro,可能不易理解sekiro具体是个什么东西。sekiro可以提供一些普通程序无法提供的神奇功能, 比如当我们使用微信的时候,如果希望接入微信机器人,让机器人作为微信好友的方式给某些好友发送私信(微信是不提供这个api的),下面我用这个场景简单描述sekiro的工作流程。
- sekiro服务器:运行在公网,为sekiro的中心服务,是sekiro数据流的中转站
- 一台手机:正常安装并登录了微信。
- Lsposed:一个代码注入工具,可以让微信的app运行额外的注入代码,也就是说我们可以写一些代码,让微信执行我们写的代码。此时我们可以控制微信,这样微信的各种可能存在的限制都被Lsposed解放了,我们可以任意二开微信,控制微信。
- SekiroHandler: 通过Lsposed,微信加载了包含sekiro书写的一部分java代码,此代码连接sekiro服务器和微信,SekiroHandler调用微信app中消息发送的功能,并且发布到sekiro公网服务器
- 此时我们在浏览器中传入发送参数(如发送给谁,消息内容等),则请求通过sekiro公网服务器转发到手机中的微信app,然后sekiroHandler因为运行在微信app中,他可以直接调用微信消息发送API,完成消息发送。
- 这样我们就提供了一个微信消息代发的公开接口,只要调用这个接口,我们的微信号就会根据我们的设定发送微信消息。
名词解释
在快速入门章节,我简单演示了各个语言的代码快速接入,快速接入教程中出现了一些名词,这些名词是sekiro的框架定义。为了让大家加深理解,这里对这些框架名词做一些说明。
sekiro-sdk
对于多种语言,sekiro提供编程sdk给用户使用,sekiro-sdk主要用于连接sekiro服务器,并且提供接受服务器调用参数,回写调用结果给服务器的基础能力。sekiro-sdk一般来说都是对socket和线程池的包装。
group
业务类型(接口组),每个业务一个group。group下面可以注册多个终端(SekiroClient),同时Group可以挂载多个Action。 Group指代一个确定的业务,group下注册的client代码需要保持协议的完全一致。如微信机器人为一个group、xxx爬虫为另一个group。sekiro系统中Group全局唯一,同时Sekiro根据Group进行调用转发路由,并认为统一个group下面的所有client能够提供一致性的服务能力.也就是说,对sekiro来说,转发请求的时候,sekiro认为统一个group下的任意一个设备( 手机、浏览器、客户端代码等)都是等价的,转发到任意一个终端都是相同的语义
SekiroClient
服务提供者客户端,主要场景为手机/浏览器等。最终的sekiro调用会转发到SekiroClient。每个client需要有一个惟一的clientId, ClientId最好用户自己生成,并且保证ClientId具备特定含义
action
接口,同一个Group下面可以有多个接口,分别做不同的功能。如视频app,区分用户搜索接口、用户视频接口、直播接口、用户详情接口等。action是为了方便用户开发的时候隔离多个业务进行的抽象,在sekiro层面可以帮你进行一次路由。 这是因为在实际开发过程中可以发现同一个设备,可能可以提供多个接口
clientId
ClientId指代设备,多个设备使用多个机器提供API服务,提供群控能力和负载均衡能力。如在手机上,同一个接口组下面可以挂载多台设备, ClientId大家需要保证每个客户端的ClientId的唯一性。建议使用mac地址、IMEI、ip地址+进程号等真实的物理ID作为ClientId。
使用ClientId可以作为调度策略控制的ID,完成对特定设备的调用管理。