前端無祕密前端
直播的逆向抓取說究竟是前端的調試和逆向技術,加上部分的dpa(深刻包分析,我的能力尚做不到深刻,只能做簡單分析)難度較低java
目前互聯網直播彈幕主要是兩種技術實現。node
1websocket消息通訊,js拿到消息再處理到dom中,逆向驗證流程,和服務端創建鏈接後便可,逆向難度較低,消息分明文和加密兩種狀況,前端無祕密,加密也能找到解密的js代碼。如此實現可直接用nodejs,js相關代碼通用,一個比較大的坑是服務端websocket版本不同,所需依賴socker.io包的版本也不同,要經過各類蛛絲馬跡來最終肯定版本。nginx
2flash,逆向難度較高,目前純nodejs後臺項目做不到(不支持加載flash文件)web
flash支持加載swf文件瀏覽器功能,swf文件相似爲js的依賴包,一個模塊,swf實現功能,js引用swf文件,調用api來做上層,js和swf的關係,相似c和彙編編譯的包,scala和java編譯的jar包的關係。api
swf包是能夠反編譯看源碼的瀏覽器
示例工具如 https://www.free-decompiler.com/flash/download/安全
這又有兩種狀況websocket
1swf只負責消息通訊功能(和websocket的定位相似)內部實現消息的發送和接收,對外公開api,js經過這層api拿數據,js再做數據展現。這種相對簡單,在瀏覽器內部(或其餘支持flash的環境),注入js代碼,加載swf模塊,註冊回調便可接收彈幕數據。dom
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更安全,這倒不全是技術上的優勢,市場方面,一項技術從業人員越少,逆向成本越高
非專業逆向人員,技術有限,認知只限於此,如有誤歡迎指出