sekiro 基于长链接的RPC群控框架
2019-10-09 17:35:42 Author: bbs.pediy.com(查看原文) 阅读量:399 收藏

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"
    }
    maven {
        name "aliyunGoogle"
        url "https://maven.aliyun.com/repository/google"
    }
    maven {
        name "contralSnapshot"
        url "https://oss.sonatype.org/content/repositories/snapshots/"
    }
}

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

然后即可在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看到你的设备列表

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

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

github: https://github.com/virjar/sekiro

[培训]《安卓高级研修班》彻底搞定函数抽取型壳!现在报名得源码和安卓8.1脱壳机!10月20日深圳专场不见不散!


文章来源: https://bbs.pediy.com/thread-254923.htm
如有侵权请联系:admin#unsafe.sh