日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

抖音數(shù)據(jù)采集教程,Android群控黑盒調(diào)用,Sekiro使用手冊

 小樣樣樣樣樣樣 2022-02-16

抖音數(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

  • 調(diào)用接口查看結(jié)果:
格式: 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的調(diào)用日志

感謝&參考資料

sekiro實踐

更多短視頻數(shù)據(jù)實時采集接口,請查看文檔: TiToData


免責聲明:本文檔僅供學習與參考,請勿用于非法用途!否則一切后果自負。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多