前些日子同事在給同學做測試的時候,使用了一個叫IEC的工具,他是一個IE表單的攔截和篡改工具,可以攔截HTTP請求,並篡改其中的GET或者POST數據,然后再將篡改后的數據提交給服務器。這個功能有點意思,下面我們就來自己實現一個,同時分析分析一下他的實現原理。
- HTTP代理實現請求報文的攔截與篡改1--開篇
- HTTP代理實現請求報文的攔截與篡改2--功能介紹+源碼下載
- HTTP代理實現請求報文的攔截與篡改3--代碼分析開始
- HTTP代理實現請求報文的攔截與篡改4--從客戶端讀取請求報文並封裝
- HTTP代理實現請求報文的攔截與篡改5--將請求報文轉發至目標服務器
- HTTP代理實現請求報文的攔截與篡改6--從目標服務器接收響應報文並封裝
- HTTP代理實現請求報文的攔截與篡改7--將接收到的響應報文返回給客戶端
- HTTP代理實現請求報文的攔截與篡改8--自動設置及取消代理+源碼下載
- HTTP代理實現請求報文的攔截與篡改8補--自動設置及取消ADSL拔號連接代理+源碼下載
- HTTP代理實現請求報文的攔截與篡改9--實現篡改功能后的演示+源碼下載
- HTTP代理實現請求報文的攔截與篡改10--大結局 篡改部分的代碼分析
實現這個功能的方法很多。可以使用WINPCAP,直接從網卡截包然后篡改,也可以HOOK住SEND函數,或者其它相關的網絡API。至於IEC這個軟件使用的技術我還不太清楚,不過從他只可以截IE的數據來看,應該是BHO或者異步可插入協議(Asynchronous Pluggable Protocols),具體就不研究了,說實話,VB P-CODE模式下編譯的程序就是個虛擬機, 在匯編層面,分析VB虛擬機里執行的P-CODE代碼,實在是太麻煩。
使用WINPCAP實現這個功能,有點牛刀殺雞了,而使用HOOK技術,又不是太安全,基本上帶主動防御,智能行為分析的殺軟,HOOK用到的幾個函數都是被嚴密監控的。所以在這里,以上兩種技術我們都不采用 。
我們采用的是第三種技術--代理攔截技術,看到代理兩個字,稍稍有點計算機知識的人,第一時間反應的詞語應該都是代理服務器,是的,代理攔截技術,正是基於代理服務器技術實現的。
下面,我們先來看看代理服務器的基本知識 。
一般情況下的HTTP請求與響應,如下圖所示。
加入代理服務器后,如下圖所示
有沒有看出來什么門道,是的,當你使用代理服務器后,所有的HTTP請求,都是先發到代理服務器,然后由代理服務器重新包裝后,再發給目標(實際)服務器,響應也是如此,代理服務器先接收來自目標(實際)服務器的響應,然后包裝后發給客戶機。到這里,實現方式,是不是已經很明顯了。
我們可以自己實現一個代理服務器,然后,將本機的代理服務器設置成指向我們自己實現的代理服務器,這樣,當本機的瀏覽器發出去請求的時候,其實都是發送到了我們自己實現的代理服務器上,如此請求的攔截就算實現了,攔截實現后,下一步就是篡改了。剛才也講了,發到代理服務器的的請求,是經過代理服務器重新包裝后,再轉發給目標(實際)服務器的,代理服務器是我們自己實現的,那么請求不就是隨我們自己的意進行“包裝”嗎 :)這樣篡改也就沒有什么問題了 。