抖音數(shù)據(jù)采集教程,Android群控黑盒調(diào)用,Sekiro使用手冊
0x0 前言
之前嘗試用過virjar大佬的hermesagent, 后來大佬又迭代出新的基于長鏈接的Sekiro , 一直想看都被耽擱了, 今天正好抽空嘗試一下, 順便寫篇筆記, 有錯誤的地方大佬們請指正哈
0x1 Sekiro介紹
SEKIRO 是一個android下的API服務暴露框架,可以用在app逆向、app數(shù)據(jù)抓取、android群控等場景 和其他群控框架相比的特點如下:
- 對網(wǎng)絡環(huán)境要求低,sekiro使用長鏈接管理服務,使得Android手機可以分布于全國各地,甚至全球各地。手機摻合在普通用戶群體,方便實現(xiàn)反抓突破,更加適合獲取下沉數(shù)據(jù)。
不依賴hook框架,就曾經(jīng)的Hermes系統(tǒng)來說,和xposed框架深度集成,在當今hook框架遍地開花的環(huán)境下,框架無法方便遷移。所以在Sekiro的設計中,只提供了RPC功能了。
- 純異步調(diào)用,在Hermes和其他曾經(jīng)出現(xiàn)過的框架中,基本都是同步調(diào)用。雖然說簽名計算可以達到上百Q(mào)PS,但是如果用來做業(yè)務方法調(diào)用的話,由于調(diào)用過程穿透到目標app的服務器,會有大量請求占用線程。系統(tǒng)吞吐存在上線(hermes系統(tǒng)達到2000QPS的時候,基本無法橫向擴容和性能優(yōu)化了)。但是Sekiro全程使用NIO,理論上其吞吐可以把資源占滿。
- client實時狀態(tài),在Hermes系統(tǒng)我使用http進行調(diào)用轉(zhuǎn)發(fā),通過手機上報心跳感知手機存活狀態(tài)。心跳時間至少20s,這導致服務器調(diào)度層面對手機在線狀態(tài)感知不及時,請求過大的時候大量轉(zhuǎn)發(fā)調(diào)用由于client掉線timeout。在Sekiro長鏈接管理下,手機掉線可以實時感知。不再出現(xiàn)由于框架層面機制導致timeout
Sekiro架構(gòu)
server:
暴露一個TCP端口和兩個HTTP端口
管理通過TCP連接的client和user發(fā)來的http 請求
client:
通過TCP和server連接,響應server發(fā)來的請求
工作流程是這樣的:
1. client通過TCP和server建立長連接
2. user發(fā)送http請求給server
3. server根據(jù)用戶發(fā)來的http請求的參數(shù),通過TCP將請求轉(zhuǎn)發(fā)給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的內(nèi)容為:
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需要調(diào)用SekiroClient.start(String serverHost, int serverPort, final String clientID, String group)中去連接server
執(zhí)行命令:./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, 用于調(diào)用Add函數(shù)
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){
//當服務端分配任務時, 這里處理邏輯, 并把結(jié)果返回給服務端, 服務端再返回給調(diào)用者
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 嘗試調(diào)用
- 打開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


感謝&參考資料
sekiro實踐
更多短視頻數(shù)據(jù)實時采集接口,請查看文檔: TiToData
免責聲明:本文檔僅供學習與參考,請勿用于非法用途!否則一切后果自負。
|