共计 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]¶m1=[arg]
例子: https://x.x.x.x:5602/asyncInvoke?group=addDemoTest2&action=myAdd&arg1=300&arg2=300
- client 的调用日志
感激 & 参考资料
sekiro 实际
更多短视频数据实时采集接口,请查看文档:TiToData
免责申明:本文档仅供学习与参考,请勿用于非法用处!否则所有后果自负。
正文完