本文只作學習研究,禁止用於非法用途,否則後果自負,如有侵權,請告知刪除,謝謝!
瀏覽器打開紅框中的js文件,並將返回的js代碼及藍框中的js代碼內容複製到剛才的sekiro_test.js文件中,如下所示:
配置代碼塊完成之後,打開chrome的reres插件(reres插件可自行搜索下載),進行js文件替換:
根據剛才請求的調用棧,發現整個接口的發送邏輯是通過init(config)調用renderMain(config),然後再在renderMain中調用getWorkList(type),而後又通過getWorkList發送ajax請求實現的:
其中init方法參數config在控制臺顯示為一個object對象:
在sekiro_test.js文件中直接使用registerAction註冊一個getaData接口,傳遞resolve和reject參數調用init方法,做如下配置:
提示代碼錯誤,init方法未找到,因為該方法是在自執行函數中定義的,作用域不同,因此無法調用,此處可通過騷操作來調用,先在外部定義一個init_sekiro對象,然後在自執行函數內部定義init_sekiro = init即可在外部實現調用:
renderMain(config, resolve, reject){...}
getWorkList(type, resolve, reject){...}
在getWorkList中返回數據的位置使用resolve接受數據:輸出結果:
因為我們還沒有調用client服務,因此resolve為undefined,未避免這種情況,加一個判斷即可:
再次刷新頁面,發現沒有再報錯
使用postman遠程調用試下:
可以正常請求到數據,此時console控制臺輸出:
python腳本也能正常返回數據:
當然,操作過程可能返回的數據是這樣的:
有可能是接口後臺沒返回數據,多刷新幾次就可以了,畢竟現在的web端手動查看有時候都不返回數據了。
至此則已實現sekiro框架的遠程調用服務,關鍵點在於找到數據接受和發送的位置,同時修改代碼時儘量不影響原網頁的運行,如有報錯則查看報錯位置的傳參和返回值,缺啥補啥即可,然後在那個地方實現遠程調用,獲取數據。
其中文中的group、client、clientId等都可到github上查看具體含義,在我的理解中,sekiro框架在js中的應用在某方面有點類似frida在安卓hook中的應用,都可以在不影響原網頁或app運行的過程中,將結果hook下來並實現遠程調用,期待後續在安卓群控場景中的應用。github地址:https://github.com/virjar/sekiro僅為測試學習,請勿批量採集,如有商業需求可到github上聯繫原作者virjar。