不知道從什麼時候開始,同事開始在飛秋上發閃屏振動了,後來變本加厲,成了每日一閃。老閃回去也比較麻煩,作為程序猿呢,有沒有什麼偷懶的辦法呢?(同事負責用戶體驗,不大懂編程)。然後嘗試了以下思路:
利用UISpy查看飛秋聊天窗口,悲催的發現找不到發送閃屏振動的按鈕。
准備使用mouse_event發送鼠標事件來模擬閃屏振動的按下。但是一想,每次閃屏振動按鈕所在的位置不一樣,要是移動窗口或者改變窗口布局,都得重新設置坐標,麻煩,遂棄之。
以前就知道WinPcap和Wireshark,恰好前段時間又在博客園看到[c#]記一次實驗室局域網的ARP欺騙 - Yosef Gao - 博客園,了解到C#下也有了相關的解析和發送工具。果斷開始這個方案。
我是知道飛秋聊天是用UDP,端口默認為2425。不知道也沒關系,打開飛秋->設置->網絡設置,然後你就會發現,飛秋已經明白的告訴我們了。
首先打開的WireShark,設置過濾條件為udp.port==2425,然後向測試機發送一個閃屏振動試試看。
發現有兩條消息,其中一條是本機發給對方的,另一條是對方發給本機的。
再發送幾次閃屏振動,我們就可以大致猜出飛秋閃屏振動報文的規律,發送的報文格式為1_lbt6_0#128#(發送方MAC地址,16位)#0#0#0#4001#9:(猜測應該是序號, 具體不清楚):(發送方用戶名):(發送方主機名)209:,收到的報文為1_lbt6_0#128#(發送方MAC地址,16位)#0#0#0#4001#9:(猜測應該是序號, 具體不清楚):(發送方用戶名):(發送方主機名)210:。將發送的閃屏振動報文用WinPcap模擬數據包,居然在測試機上收到了閃屏振動(原先還以為猜測的序號字段會有影響)。
向測試機發送一條信息後,發現有幾條消息。
經過比較報文長度和來源之後,猜測其他幾條較短的來自本機的報文為發送正在輸入,停止輸入等消息,而較長的為發送的信息。經過驗證之後,也確實如此。而飛秋的信息報文應該是加過密的,無法直接從中猜出內容。
表情與信息基本類似,但是表情貌似是經過壓縮的。
一般文件都會通過TCP傳輸,經過驗證。發現果然如此,飛秋要發送的文件列表是通過UDP進行傳輸,而具體文件內容是通過TCP傳輸。
在UDP傳輸中,本方發送兩條報文,對方發送兩條報文。基本本方發送的第二條報文可以看到文件名。
在TCP報文中,除了TCP連接建立的三次握手和連接斷開的四次握手以外,在其余的本機發送的報文中,可以清楚的看到報文的內容。
這是文本文件:
這是二進制文件:
二進制文件在UltraEdit查看:
因為主要興趣在研究閃屏振動,對其余功能只是簡單查看了一下,並未深入研究。
最開始做成模擬閃屏振動但不需要填寫任何報文信息,但是登錄用戶名無法通過網絡取得,再加上也可以通過在發送報文字符串中填寫其他從WireShark中復制過來的報文字符串來模擬其他報文(比如信息和表情),就做成了這種形式。
要使用PacketDotNet.dll和SharpPcap.dll,需要安裝WinPcap(我是直接安裝了WireShark,裡面含有WinPcap)。
博客園:FeiqCheater