背景
因爲某寶最近升級,致使朋友買的刷單軟件不能用了;在又付過錢以後,那個刷單軟件供應商居然捐款跑路了...因而,朋友委託我作一個功能同樣的軟件。
功能
他給我描述的軟件功能,是這個樣子的:在網頁登錄個人某寶以後,在【已買到的寶貝】頁面,有待付款、待發貨、待收貨、待評價數量,軟件能夠隨意修改這些數據;頁面下邊還有交易單,軟件還能夠隱藏指定的單據...而後他把以前買的軟件發給我,讓我研究研究...
分析
按照他的描述,我歸納以後,軟件的功能就是修改網頁數據。我先用Reflector打開朋友給個人程序,看看能不能反編譯,要是能反編譯就好辦了,0.0,結果反編譯不了,看來本身得從頭開始找資料...
實現一
工做之餘,開始百度相關信息,無心進入一個網站,有我的上傳了一個工具,名字好像是淘寶數據修改器之類的,他的附件上附帶了一句話,「用BHO實現」!!!而後我趕忙百度【BHO】,百度百科說,BHO(Browser Helper Object,瀏覽器輔助對象,簡稱BHO) BHO是微軟推出的做爲瀏覽器對第三方程序員開放交互接口的業界標準,經過簡單的代碼就能夠進入瀏覽器領域的「交互接口」(INTERACTIVED Interface)。我瞬間兩眼放光,趕忙百度個BHO的例子,這個例子的功能是在打開的網頁上添加3個按鈕。我按照步驟,在個人電腦上跑例子,我第一次打開的是64位的IE瀏覽器,打開網頁以後,網頁仍是原來的樣子;第二次打開的是32位的IE,IE首頁上多了3個按鈕,再打開一個標籤頁,上面也有三個按鈕!!!
能在網頁上添加3個按鈕,就說明它能修改網頁的html數據,那這不就正是我要的麼!
工程都不用新建了,直接在原程序上進行開發,看了程序以後,瞭解了程序的工做原理:首先得在註冊表註冊dll,這個dll必須實現IObjectWithSite接口,IE在啓動的時候,會自動加載已註冊的dll。在SetSite函數裏,能夠獲取到瀏覽器對象,而後就能夠註冊各類事件,修改網頁數據是在DocumentComplete事件裏進行,由於在這個事件以後,DOM才容許修改...
由於是dll,而且是瀏覽器本身加載dll,所以沒有辦法調試,附加到IE的進程裏調試,斷點也不會命中...要是能打個斷點,在斷點處查看HtmlDocument對象多好,如今還得苦逼的打日誌...
如今的工做是怎麼遍歷HtmlDocument找到目標節點,而且修改節點的數據。
我在網上沒有找到遍歷HtmlDocument的資料,只能多輸出點日誌信息分析了。通過分析發現,HtmlDocument是一個樹,而且每一個節點都實現IHtmlElement,每一個節點的子節點集合都實現IHtmlElementCollection,So,知道怎麼遍歷了...我是在嘗試了無數次typeof以後才知道的...必定要把節點轉換爲IHtmlElement以後再用typeof,不然你只會獲得System._ComObject類型...
找到節點以後,修改數量值很好實現,把目標節點的innerHTML改成指定文本就行;隱藏單據就是隱藏一個節點,把節點的Style.Display置爲none就好了。
就這樣,這個BHO版本的實現了,可是在測試過程當中,發現有點不完美:由於我是在DOM完成以後才修改的數據,可是瀏覽器是收到多少數據,就解析多少顯示多少,那麼就在瀏覽器【顯示原始數量數據】以後 到 【整個頁面】完成,這段期間,頁面顯示的將是真實數據,而不是我修改的數據。這個空白期理論上不可消除,除非你的網速達到光速,配置達到天河二號...
我把狀況給朋友說了以後,朋友說在他電腦上跑跑,看看效果。週日晚上,在朋友的電腦上,程序跑起來以後,他進入到已買到的寶貝頁面,刷新再刷新,數據仍是真實的數據,不是修改過的數據,OMG,我登時傻眼了...
朋友:這玩意支持搜狗瀏覽器嗎?刷單不能用IE...
我:不知道,我下個搜狗試試...
我趕忙下個搜狗,跑起來,進入已買到的寶貝頁面,刷新再刷新,KAO,不行...
我立刻對朋友說,這個版本的不行,我下週整個新版本的...
實現二
上次慘敗以後,我又從新分析這個程序到底該怎麼作才能讓它支持各類瀏覽器,而且是在數據達到瀏覽器以前進行修改。
首先想到的是對本地網卡進行抓包,監視全部的包,把符合規則的數據修改以後再放行:抓包好抓,可是分析數據就有難度了,http的還好,https的怎麼辦...
我又去分析朋友給個人軟件,我發現裏面還有3個dll,我嘗試用Reflector打開,頂,所有打開!!!他買的程序居然是用C#開發的,那我確定也能作出來。我分別百度他們,直到輸入fiddler以後,我已經看到勝利的曙光了。
Fiddler是一個http協議調試代理工具,它可以記錄並檢查全部你的電腦和互聯網之間的http通信,設置斷點,查看全部的「進出」Fiddler的數據(指cookie,html,js,css等文件,這些均可以讓你胡亂修改的意思)。 Fiddler 要比其餘的網絡調試器要更加簡單,由於它不只僅暴露http通信還提供了一個用戶友好的格式。
css