关于大数据:抖音数据采集教程Android群控黑盒调用Sekiro使用手册

8次阅读

共计 3688 个字符,预计需要花费 10 分钟才能阅读完成。

抖音数据采集教程,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....");
// 服务端 host
String testHost = "your_host";
// 客户端标识
String clientId = UUID.randomUUID().toString();
// 接口组名称
String groupName = "addDemoTest2";
// 裸露的接口名称
String actionName = "myAdd";
// 拿 classloader
clzLoader = lpparam.classLoader;
 
// 连贯服务端并且注册解决的 handler
SekiroClient.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

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

正文完
 0