Windows抓包指南①:Proxifier+Fiddler對第三方程序強制抓包

HOW & WHY

關於Fiddler抓包的文章在網上已經一搜一大把了,但大多數是講對瀏覽器的抓包,主要用於分析WEB站點內容,而本文側重於普通Windows桌面應用程序的HTTP/HTTPS抓包。

網上大部分文章,大多隻告訴你How,沒有告訴你Why。HTTPS不是加密的嗎,爲什麼Fiddler還能抓到包?我按照網上的文章使用Fiddler抓包,爲什麼有的程序抓得到,有的程序抓不到?有的程序可以抓到,但是似乎只能抓到一部分,關鍵的HTTP請求都沒有抓到,這是怎麼回事?我們該怎麼辦?本文儘可能的把How和Why講清楚,並通過後面不斷的更新來完善它,在不斷的學習和積累中,弄清楚更多東西,抓到更多的包。

抓包的重要性

網絡抓包,是軟件逆向分析的重中之重,很多時候我們拿到一個軟件,不知道從何入手分析,往往是從抓包開始,先弄清楚他與服務器通信的內容,如果一目瞭然,我們完全可以照搬,自行寫一個程序來模擬,如果有一些加密字段和隨機字段,也不用擔心,我們可以從抓包中瞭解到一些關鍵的URL和session之類的信息,然後再分析代碼的時候,這些字符串可以幫助我們更快的定位關鍵代碼所在之處。

趨勢

現在的Windows桌面應用程序越來越喜歡直接在窗口上放一個Webbrowser或者CEF,直接使用HTML/CSS/Javascript構建用戶界面,然後使用HTTP/HTTPS協議與服務器通信,如果該軟件同時有WEB界面的話,更是可以直接複用同一個後端,這樣使得客戶端和服務端的開發效率大大提高,同時也有很好的移植型性。對於逆向分析者來說是好事,至少省去了自定義協議分析這一關,尤其是讓人噁心的二進制協議。

Fiddler的使用

Fiddler簡直是HTTP抓包分析的神器,比Chrome等瀏覽器自帶的調試工具高不知道哪去了,瀏覽器自帶的調試工具,基本只能查看包內容,而Fiddler除了查看,還可以針對不同類型的內容進行格式化,觀賞效果真的不要太爽。除了“看”數據包,它還可以一鍵重發HTTP請求,修改請求內容並重發HTTP請求,攔截修改數據包,返回預設的欺騙性內容等,還可以編寫腳本進行更高級的自動化處理。

廢話不多說,到Fiddler官網下載安裝:https://www.telerik.com/fiddler
1
對瀏覽器的抓包,就不再贅述,打開這個軟件就一目瞭然了,本文主要講對普通Windows桌面應用程序的抓包,點擊左下角的兩個小圖標,讓Fiddler進入抓包狀態,而且作用於[All Processes]。實際上這相當於給windows設置了一個HTTP/HTTPS代理,相當於在IE的 [Internet 選項] — [連接] — [局域網設置] — [高級] 中設置了代理 [127.0.0.1:8888],Fiddler在8888端口提供HTTP/HTTPS代理服務。
2
接下來,我們要開啓Fiddler的HTTPS抓包功能,否則只能看到HTTP請求的內容,而HTTPS請求則是密文。
在Fiddler中點擊 [Tools] — [Options] — [HTTPS] 勾選如下設置:
在這裏插入圖片描述
點擊 [Actions] — [Trust Root Certificate] 讓系統信任Fiddler的根證書,這是HTTPS抓包解密的關鍵,Fiddler對HTTPS包解密的原理是中間人攻擊,對客戶端聲稱自己的服務端,對服務端聲稱自己的客戶端,兩頭欺騙。當然要想欺騙成功,前提是讓客戶端信任自己的根證書。接下來就可以愉快的觀看HTTPS請求明文內容了。

抓包的條件

開啓 [All Processes] 抓包後,我們運行第三方程序,會發現有的HTTP/HTTPS包可以抓到,有的抓不到,這是怎麼回事?那是因爲Fiddler的這種設置全局代理的方式,只對以下幾種情況有效:

  • IE Chrome等瀏覽器
  • 程序使用WinInet庫進行HTTP/HTTPS通信
  • 程序內嵌Webbrowser

這也很好理解,如果程序沒有使用Windows提供的WinInet庫進行HTTP通信,而是自帶了一個庫,比如VC程序使用libcurl,JAVA程序使用JDK中的URLConnection或第三方OkHttp,C#使用System.Net.Http等,這些庫在程序內部實現了HTTP包的封裝與拆解,那麼最終他們將直接調用操作系統的socket api發送數據,操作系統當然就沒法給他們設置HTTP/HTTPS代理了。所以Fiddler在這裏其實有很大侷限性,但如果比較幸運,你要分析的第三方程序,使用WinInet通信或者內嵌了Webbrowser,你仍然可以這樣對它進行HTTP/HTTPS抓包分析。

一個典型的例子就是 [招商銀行專業版] PC網銀客戶端,你可以用 [depends] 工具查看它是否依賴WININET.DLL,如果依賴,它很有可能使用它進行HTTP/HTTPS通信。
在這裏插入圖片描述
也可以用VisualStudio自帶的工具 [spy++] 查看是否內嵌Webbrowser控件,如果有內嵌,則Webbrowser中的內容可以用Fiddler抓包。

當然,有的程序也有例外,比如Python的requests包,如果你用Fiddler設置了全局代理,而Python程序使用requests進行通信而沒有在代碼裏設置HTTP/HTTPS代理,則requests默認會使用系統全局代理通信,從而能在Fiddler中看到Python程序的HTTP通信內容。至於其它編程語言和類庫實現的程序,是否會被Fiddler設置的全局代理影響,由於沒法一一去測試,還需要大家的反饋,彙集結果。

抓不到包怎麼辦

不滿足上述條件的第三方程序,沒法用Fiddler抓包,也許我們只能放棄。要知道有一句話叫“抓不住的流沙,學會放手,留不住的人心,學會忘記”。既然抓不住,說明她不屬於你,那麼無論你做什麼事情都是無謂的,搞去搞來,最終你僅僅是感動了自己而已,對於她來說,你從頭到尾什麼都不是,無足輕重,也許離開你的她會更開心。但如果你確信她是你命中註定的那個包,就一定要把她抓住,沒有條件就去創造條件,努力未必會成功,但不努力註定失敗。那如何創造條件去抓住她的包呢?

給它設置代理

上面說到了,Fiddler抓包的原理是在本機的8888端口開啓了HTTP/HTTPS代理,任何通過Fiddler代理的HTTP/HTTPS通信內容都會被解析,那麼只要能給目標程序設置HTTP/HTTPS代理,目標程序的HTTP通訊內容就會乖乖的出現在Fiddler裏。
在這裏插入圖片描述
仔細查看軟件設置,其實有些第三方軟件比如 [百度網盤] 本身是可以設置HTTP/HTTPS代理的,只要設置爲Fiddler的代理端口即可截獲它的HTTP/HTTPS通訊內容。但是有的第三方軟件就是沒有代理功能,怎麼辦?

強行設置代理

強上!得不到的就強上!三年血賺,無期不虧。

既然它不支持設置代理,我們就藉助其它軟件給它設置代理,比如:
Proxifier: https://www.proxifier.com
SocksCap64:https://www.sockscap64.com/sockscap64-official-homepage-chinese

這兩款軟件都可以讓任意程序通過HTTPS/SOCKS5代理訪問網絡,其中SocksCap64使用黑科技API HOOK技術,HOOK了Windows Sockets API,然後把所有的TCP/UDP包通過代理轉發。而Proxifier則是正規軍,使用了Windows提供的正規接口,通過安裝WinSock LSP模塊過濾/轉發TCP/UDP包,當然此處還是推薦Proxifier,穩定性和兼容性更好。SocksCap64依賴API HOOK和DLL注入技術,但不是所有程序都隨便給你注入的,比如騰訊TP保護下的遊戲客戶端,所以兼容性和可用性不如Proxifier。不過Proxifier是收費的商業軟件,不過有30天免費試用,以及網上隨便一搜一大把的激活碼,你懂的。

接下來,我們拿 [網易有道詞典] 開刀,強行給它設置代理,看看它是怎麼和服務器通訊的。
在這裏插入圖片描述
在Proxifier中添加 [127.0.0.1:8888] 這個Fiddler提供的HTTPS代理服務器
在這裏插入圖片描述
設置Proxifier規則,讓 [網易有道詞典] 通過代理訪問網絡

一個重要的設置

在這裏插入圖片描述
在這裏插入圖片描述
還有一點設置通常容易被忽略,就是在Proxifier中,設置 [Profile] — [Name Resolution] — 勾選 [Resolve hostnames through proxy],讓域名解析的工作交給代理服務器,而不是在Proxifier上解析。默認情況下Proxifier自行解析域名,比如www.baidu.com解析爲180.97.33.108,然後發請求給Fiddler:

CONNECT 180.97.33.108:443 HTTP/1.1

這樣Fiddler並不知道它請求的是哪個域名,於是返回給客戶端的僞造證書時,僞造的是爲180.97.33.108頒發的證書,有的客戶端會做校驗,發現這個證書是頒發給180.97.33.108的,而不是頒發給www.baidu.com的,然後報錯處理。
修改Proxifier設置後,把域名解析的工作交給代理服務器,Proxifier會直接向Fiddler發送請求:

CONNECT www.baidu.com:443 HTTP/1.1

這樣Fiddler就知道客戶端請求的是 www.baidu.com,從而返回客戶端僞造的www.baidu.com證書,客戶端不報錯,Fiddler才能順利抓包解密。

抓包效果

接下來就是對 [網易有道詞典] 抓包的結果:
在這裏插入圖片描述

Perfect!

所有HTTP通信內容歷歷在目,點擊 [翻譯] 按鈕,它發送了什麼內容,服務器返回什麼內容清晰可見。接下來稍作分析,就可以用Python直接向這個URL發送HTTP請求,提交翻譯文本,就可以拿到翻譯結果了。

這下,你知道很多程序,官方沒有提供API的情況下是怎麼實現功能的了吧。當然有道翻譯是提供了OpenAPI的,雖然API服務是收費的,但是並不貴。分析有道詞典的通信協議其實意義並不大,但是分析其它各種各樣的第三方軟件呢,這麼大的腦洞,就留給你來填吧,嘿嘿。。。

未完待續

不要高興得太早,如果所有程序都那麼容易分析就好了,顯示中你還會遇到各種各樣莫名其妙的情況,有的第三方軟件,你用這個方法去抓HTTP/HTTPS包,會出現一些意想不到的情況,比如程序表現爲無法聯網、功能不正常,Fiddler中抓到的HTTPS包仍然是加密的,無法解密,等等。這些問題需要根據情況一點一點去分析,在下一篇文章中,我們來講一講常見的一些無法抓包的異常情況,以及處理辦法。。。

《Windows抓包指南②:Fiddler抓不到的包是怎麼回事?》



本文由encoderlee發表於CSDN博客:https://blog.csdn.net/CharlesSimonyi/article/details/90383486 轉載請註明出處

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章