抖音数据采集教程,Android群控黑盒调用,Sekiro使用手册

0x0 前言

之前尝试用过virjar大佬的hermesagent, 起初大佬又迭代出新的基于长链接的Sekiro, 始终想看都被耽误了, 明天正好抽空尝试一下, 顺便写篇笔记, 有谬误的中央大佬们请斧正哈

0x1 Sekiro介绍

SEKIRO 是一个android下的API服务裸露框架,能够用在app逆向、app数据抓取、android群控等场景
 
和其余群控框架相比的特点如下:

  • 对网络环境要求低,sekiro应用长链接治理服务,使得Android手机能够散布于全国各地,甚至寰球各地。手机掺合在普通用户群体,不便实现反抓冲破,更加适宜获取下沉数据。
    不依赖hook框架,就已经的Hermes零碎来说,和xposed框架深度集成,在当今hook框架遍地开花的环境下,框架无奈不便迁徙。所以在Sekiro的设计中,只提供了RPC性能了。
  • 纯异步调用,在Hermes和其余已经呈现过的框架中,根本都是同步调用。尽管说签名计算能够达到上百QPS,然而如果用来做业务办法调用的话,因为调用过程穿透到指标app的服务器,会有大量申请占用线程。零碎吞吐存在上线(hermes零碎达到2000QPS的时候,根本无奈横向扩容和性能优化了)。然而Sekiro全程应用NIO,实践上其吞吐能够把资源占满。
  • client实时状态,在Hermes零碎我应用http进行调用转发,通过手机上报心跳感知手机存活状态。心跳工夫至多20s,这导致服务器调度层面对手机在线状态感知不及时,申请过大的时候大量转发调用因为client掉线timeout。在Sekiro长链接治理下,手机掉线能够实时感知。不再呈现因为框架层面机制导致timeout

Sekiro架构

server:    裸露一个TCP端口和两个HTTP端口    治理通过TCP连贯的client和user发来的http 申请client:    通过TCP和server连贯,响应server发来的申请 工作流程是这样的:    1. client通过TCP和server建设长连贯    2. user发送http申请给server    3. server依据用户发来的http申请的参数,通过TCP将申请转发给client    4. client收到申请并响应server    5. server将从client收到的申请返回给user

具体的能够去看我的项目的readme, 说的十分具体: 我的项目传送门

0x2 服务端部署

  • 克隆我的项目: git clone [https://github.com/virjar/sekiro.git](https://github.com/virjar/sekiro.git)
  • 批改settings.gradle的内容为: include ':sekiro-server', ':sekiro-lib' ,删掉appdemo避免编译它
  • 启动服务器前注意事项
server端在`sekiro-server/src/main/resources/appliation.properties`中能够配置三个服务端端口, 次要服务端安全策略的出入口须要凋谢这个三个端口#tomcat 占用端口server.port=5602#长链接服务占用端口natServerPort=5600# 异步http占用端口natHttpServerPort=5601# websocket占用端口webSocketServerPort=5603 如果自定义端口,client须要调用SekiroClient.start(String serverHost, int serverPort, final String clientID, String group)中去连贯server

执行命令:./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 &启动server

0x3 客户端

  • 先筹备一个测试的Demo, 很简略就是个加法, 留神Demo必须有加android.permission.INTERNET权限
public class MainActivity extends AppCompatActivity {   public static int Add(int n1, int n2)  {      return n1 + n2;  }   @Override  protected void onCreate(Bundle savedInstanceState) {      super.onCreate(savedInstanceState);      setContentView(R.layout.activity_main);       Toast.makeText(MainActivity.this, "3 + 2 = " + Add(3, 2), Toast.LENGTH_LONG).show();  }}
  • 再筹备的一个Xposed的我的项目, 不会的能够先看我之前写的一篇笔记: AndroidStudio应用Xposed
  • 在app的build.gradle增加依赖 implementation 'com.virjar:sekiro-api:1.0.1'

  • 在Xposed的handleLoadPackage中启动client链接server,并增加处理事件的handler, 用于调用Add函数
Log.i(TAG, "connect server....");//服务端hostString testHost = "your_host";//客户端标识String clientId = UUID.randomUUID().toString();//接口组名称String groupName = "addDemoTest2";//裸露的接口名称String actionName = "myAdd";//拿classloaderclzLoader = lpparam.classLoader; //连贯服务端并且注册解决的handlerSekiroClient.start(testHost, clientId, groupName)        .registerHandler(actionName, new SekiroRequestHandler(){            @Override            public void handleRequest(SekiroRequest sekiroRequest, SekiroResponse sekiroResponse){                 //当服务端分配任务时, 这里解决逻辑, 并把后果返回给服务端, 服务端再返回给调用者                Class<?> clz = XposedHelpers.findClass("com.example.administrator.adddemo.MainActivity", clzLoader);                int arg1  = sekiroRequest.getInt("arg1");                int arg2  = sekiroRequest.getInt("arg2");                Log.i(TAG, String.format("arg1 : %d, arg2 : %d", arg1, arg2));                Object result = XposedHelpers.callStaticMethod(clz, "Add", arg1, arg2);                Log.i(TAG, "result : " + result);                sekiroResponse.success(result);            }         });
  • 编译谬误More than one file was found with OS independent path解决
//build.gradle里android{}增加谬误的path packagingOptions {    exclude 'META-INF/DEPENDENCIES'    exclude 'META-INF/INDEX.LIST'    exclude ('META-INF/io.netty.versions.properties')}

0x4 尝试调用

  • 关上app后, 应用浏览器查看group列表是否注册胜利:
    [your_server_ip]:[server.port]/groupList

  • 调用接口查看后果:
格局: your_server_ip:[natHttpServerPort]/[invoke_type]?group=[group_id]&action=[action_name]&param1=[arg] 例子: https://x.x.x.x:5602/asyncInvoke?group=addDemoTest2&action=myAdd&arg1=300&arg2=300

  • client的调用日志

感激&参考资料

sekiro实际

更多短视频数据实时采集接口,请查看文档: TiToData


免责申明:本文档仅供学习与参考,请勿用于非法用处!否则所有后果自负。