首页
论坛
专栏
课程

[原创] sekiro 基于长链接的RPC群控框架

2019-10-8 23:12 1712

[原创] sekiro 基于长链接的RPC群控框架

2019-10-8 23:12
1712

sekiro

SEKIRO 是一个android下的API服务暴露框架,可以用在app逆向、app数据抓取、android群控等场景。

Sekiro是我之前设计的群控系统Hermes的升级版,和其他群控框架相比的特点如下:

对网络环境要求低,sekiro使用长链接管理服务,使得Android手机可以分布于全国各地,甚至全球各地。手机掺合在普通用户群体,方便实现反抓突破,更加适合获取下沉数据。

不依赖hook框架,就曾经的Hermes系统来说,和xposed框架深度集成,在当今hook框架遍地开花的环境下,框架无法方便迁移。所以在Sekiro的设计中,只提供了RPC功能了。

纯异步调用,在Hermes和其他曾经出现过的框架中,基本都是同步调用。虽然说签名计算可以达到上百QPS,但是如果用来做业务方法调用的话,由于调用过程穿透到目标app的服务器,会有大量请求占用线程。系统吞吐存在上线(hermes系统达到2000QPS的时候,基本无法横行扩容和性能优化了)。但是Sekiro全程使用NIO,理论上其吞吐可以把资源占满。

等等

部署流程

部署区分服务器端部署和客户端部署,服务器使用SpringBoot实现,占三个端口(server.port: http管理端,同步http|natServerPort:手机nat穿透端,和手机长链接|natHttpServerPort:NIO的http服务端,只提供RPC调用入口) 手机端一般附加在apk代码逻辑中。

服务端部署

两种方式,基于源码部署和jar包运行

源码部署服务器

执行脚本./runProd.sh即可,不过在服务器,由于gradle项目存在Android端,所以需要配置Androidsdk环境

#安装sdkman
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
#安装gradle
sdk install gradle 4.4

#下载并解压android sdk
wget http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
tar -zvxf android-sdk_r24.4.1-linux.tgz
#设置环境变量

echo "export ANDROID_HOME=path/to/android-sdk-linux" >> /etc/profile
echo "export PATH=$ANDROID_HOME/tools:$PATH"
source /etc/profile

#安装sdk
android list sdk --all
android update sdk -u --all --filter 7  #选择对应sdk的编号,我这边装的27.0.3 对应编号7

# 如果出现
# Failed to install the following Android SDK packages as some licences have not been accepted.
#      build-tools;28.0.3 Android SDK Build-Tools 28.0.3
#   To build this project, accept the SDK license agreements and install the missing components using the Android Studio SDK Manager.
#   Alternatively, to transfer the license agreements from one workstation to another, see http://d.android.com/r/studio-ui/export-licenses.html
# 那么执行
android update sdk -u --all --filter itemId(在--all里面,缺少那个选择那个)

之后再次执行脚本./runProd.sh即可

jar包部署

当前目录执行代码:./gradlew sekiro-server:bootJar即可在sekiro-server/build/libs/sekiro-server-0.0.1-SNAPSHOT.jar找到all-in-one的jar包

通过命令nohup java -jar sekiro-server/build/libs/sekiro-server-0.0.1-SNAPSHOT.jar >/dev/null 2>&1 &即可启动服务器

端口配置

在sekiro-server/src/main/resources/appliation.properties中可以配置三个服务端端口

client使用

目前API发布在maven快照仓库,通过如下方式添加依赖:

repositories {
    maven {
        name "aliyunmaven"
        url "https://maven.aliyun.com/repository/public"
    }
}

dependencies {
    implementation 'com.virjar:sekiro-api:1.0.0'
}

然后即可在apk代码中书写调用服务逻辑:

SekiroClient.start("sekiro.virjar.com",clientId,"sekiro-demo")
        .registerHandler("clientTime",new SekiroRequestHandler(){
            @Override
            public void handleRequest(SekiroRequest sekiroRequest,SekiroResponse sekiroResponse){
                    sekiroResponse.success(" now:"+System.currentTimeMillis()+ " your param1:" + sekiroRequest.getString("param1"));
            }
        });

安装apk到手机,并打开,然后可以通过服务器访问这个接口

http://sekiro.virjar.com/channelList

{"status":0,"message":null,"data":["sekiro-demo"],"clientId":null,"ok":true}


http://sekiro.virjar.com/natChannelStatus?group=sekiro-demo
{"status":0,"message":null,"data":["2e77bbfa_869941041217576"],"clientId":null,"ok":true}


http://sekiro.virjar.com/invoke?group=sekiro-demo&action=clientTime&param1=%E8%87%AA%E5%AE%9A%E4%B9%89%E5%8F%82%E6%95%B0

{"clientId":"2e77bbfa_869941041217576","data":"process: com.virjar.sekiro.demoapp : now:1570546873170 your param1:自定义参数","ok":true,"status":0}

client demo在app-demo子工程可以看到,直接运行app-demo,即可在 sekiro.virjar.com看到你的设备列表

在类似xposed的代码注入框架中使用Sekiro

Sekiro本身不提供代码注入功能,不过Sekiro一般需要和代码注入框架配合产生作用,如和Xposed配合,可以方便调用app内部私有API,一般情况下,在Xposed入口启动Sekiro,然后接受服务器指令,并将参数转发到app内部。

Sekiro调用真实apk的例子稍后提供

服务器异步http 暂未实现




[公告]安全服务和外包项目请将项目需求发到看雪企服平台:https://qifu.kanxue.com

最后于 6天前 被virjar编辑 ,原因:
最新回复 (12)
roysue 3 2019-10-8 23:50
2
0
666
飞飞fei 2019-10-8 23:54
3
0
star先
Editor 2019-10-9 09:35
4
0
mark!感谢分享!
爱吃菠菜 1 2019-10-9 10:44
5
0
TQL
wangzehua 2019-10-9 10:47
6
0
mark一记!
blanke 2019-10-9 23:00
7
0
谢谢开源,感谢分享
流星暴雨 2019-10-9 23:13
8
0
支持一下
9
0
我懂了 就是手机内部架起服务器接收数据,配合服务器执行相关操作。
所以具体的操作还是要依赖类似adb 无障碍或者xpsoed对吧
virjar 1 6天前
10
0
小黄鸭爱学习 我懂了 就是手机内部架起服务器接收数据,配合服务器执行相关操作。 所以具体的操作还是要依赖类似adb 无障碍或者xpsoed对吧
不是adb,无障碍。依赖的框架如:xposed,virtualApp,frida,太极,异或源码定制。这些算是代码注入框架。
我们也有一款代码注入的产品:http://git.virjar.com/ratel/ratel-doc

然后手机内部没有架设服务器,是一个长链接的客户端,可以理解为Android推送通道的客户端。只是用起来有点像服务器一样。因为手机没有固定ip,只能做到看起来像服务器
11
0
嗯 你们有内部交流群吗,我想进群交流。包括后面这个免root hook框架
12
0
virjar 不是adb,无障碍。依赖的框架如:xposed,virtualApp,frida,太极,异或源码定制。这些算是代码注入框架。 我们也有一款代码注入的产品:http://git.virjar.com/ ...
嗯 你们有内部交流群吗,我想进群交流。包括后面这个免root hook框架
莫灰灰 8 3天前
13
0
感觉很牛逼啊。
游客
登录 | 注册 方可回帖
返回