前端無秘密
直播的逆向抓取說到底是前端的調試和逆向技術,加上部分的dpa(深入包分析,個人能力尚作不到深入,只能作簡單分析)難度較低
目前互聯網直播彈幕主要是兩種技術實現。
1websocket消息通信,js拿到消息再處理到dom中,逆向驗證流程,和服務端建立連接后即可,逆向難度較低,消息分明文和加密兩種情況,前端無秘密,加密也能找到解密的js代碼。如此實現可直接用nodejs,js相關代碼通用,一個比較大的坑是服務端websocket版本不一樣,所需依賴socker.io包的版本也不一樣,要通過各種蛛絲馬跡來最終確定版本。
2flash,逆向難度較高,目前純nodejs后台項目作不到(不支持加載flash文件)
flash支持加載swf文件瀏覽器功能,swf文件類似為js的依賴包,一個模塊,swf實現功能,js引用swf文件,調用api來作上層,js和swf的關系,類似c和匯編編譯的包,scala和java編譯的jar包的關系。
swf包是可以反編譯看源碼的
示例工具如 https://www.free-decompiler.com/flash/download/
這又有兩種情況
1swf只負責消息通信功能(和websocket的定位類似)內部實現消息的發送和接收,對外公開api,js通過這層api拿數據,js再作數據展示。這種相對簡單,在瀏覽器內部(或其他支持flash的環境),注入js代碼,加載swf模塊,注冊回調即可接收彈幕數據。
2swf不和js交互,完全封閉,flash本身就負責視頻流的處理播放,部分網站,彈幕的處理,完全不經過dom,直接由swf處理放到視頻流中。
1和2的區別就在於,swf是否顯示公開了彈幕消息的處理api,提供了好說,不提供的話考慮成本和可行性,基本毫無辦法。
可操作的思路有兩個,說白了是一個(因為都要深入分析swf的源碼)
個人也沒有嘗試過,不保證可行,只是思路
1或許swf實現了,只是沒有顯示的通過js調用,反編譯 swf 文件,找出這個api,這種幾率不大,純碰運氣。
2抽取處理邏輯,修改代碼,公開消息api(或通過其他方式暴露消息,打日志?),編譯替換原swf文件。
注入新swf應該不難,作移動端調試時用過fiddler,mac上抓包的charles應該都有現成方案,實在不行,還有老辦法,nginx主路流量劫持,之前只劫過 http 的,https 的倒是沒試過,可能需要證書按中間人攻擊的思路去作。
swf以actionscript編寫,個人並沒有相關開發和調試經驗,前端逆向依賴的前端調試技術,只能停在js層面,對swf完全無力可施,目前個人只能通過查看swf源碼,對照js代碼作分析。
而actionscript和flash 即將終止支持,非必要,實在不願在其上浪費時間。
如此操作成本很高 基本思路是
1 定制 actionscript 文件,公開一個外部api,暴露需要的數據,編譯為 swf 文件
2 注入swf文件
3 js 訪問 swf 暴露出的 api,獲取需要數據
直播彈幕還是用flash更安全,這倒不全是技術上的優點,市場方面,一項技術從業人員越少,逆向成本越高
非專業逆向人員,技術有限,認知只限於此,若有誤歡迎指出
