場景
假設一個手機頁面,開發者對其做了限制,導致只能在微信客戶端中打開。而眾所周知手機上非常不利於調試頁面,所以需要能在電腦上打開並進行調試。這里針對常見的三種頁面做一下分析,一一繞過其限制,(當然不要拿去干壞事)
工具准備
1、方便調試的瀏覽器。個人喜歡Chrome,本文基於Chrome 43.0.2357.130 (正式版本) m (32 位)環境;
2、抓包工具,推薦fiddler4,當然你比較喜歡Wireshark的話也可以,反正只要是能抓到cookies就都可以;
3、能編輯cookies的瀏覽器插件。Chrome下我推薦EditThisCookie,Firefox的話試用Firebug自帶的編輯功能即可。
繞過方法
這里針對常見的三種限制方法做了分類(不過我感覺應該也沒有第四類了),其繞過方法難度也是逐漸遞增的。下文將從確認限制方法以及繞過限制兩個角度一一分析。
未做明顯限制
例子:翻滾吧小洛克
這種頁面最多,基本上就是相當於啥也沒做。
檢驗方法
手機里其他瀏覽器也可以打開頁面並正常進行頁面瀏覽
這種頁面在PC上調試只需要開Chrome的模擬器即可。
繞過方法
1、Ctrl+Shift+I打開chrome的開發者中心
2、點擊開發者中心工具條右上角的手機小圖標,如圖:
3、如果發現不能模擬觸屏,則是因為設置里沒開,點擊開發者中心工具條右上角的箭頭小圖標,然后Emulation>Sensors>Emulate touch screen ,將該選項勾上即可。如圖所示:
輕松過關。
檢查UA來限制
例子:多泡游戲-doNotTouchWhite
由於這個站點游戲需要登錄,所以放個公共號測試用,勿濫用。
user:duopaotestdada
pwd:duopaotest
檢測方法
手機瀏覽器打開后會跳轉到開發者自己的其余頁面,或者有彈窗提示,但是不會跳到open.weixin.qq.com域名去。
看着這種就可以肯定十有八九是基於UA(UserAgent)檢測了。所以破解方法很簡單,模擬UA就好。chrome內置了這個功能。
繞過方法
1、開啟瀏覽器的模擬器(方法見上)
2、在模擬器右上角的UA處將以下UA貼進去並重新進入原頁面(不直接刷新是因為有些頁面會根據UA做跳轉)
Mozilla/5.0 (Linux; U; Android 4.1.2; zh-cn; Chitanda/Akari) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 MicroMessenger/6.0.0.58_r884092.501 NetType/WIFI
以上是安卓手機微信的UA,另附一個iOS下的UA:
Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12A365 MicroMessenger/5.4.1 NetType/WIFI
一般情況下這兩個用處都一樣,沒啥區別,實際上根據大部分前端的習慣,哪怕UA里只填一個MicroMessenger字段都是可以繞過去的。
3、上面的方法雖然可以繞過限制了,但是終究不方便,每次都要手動改一次UA。實際上較新版的Chrome瀏覽器是可以自定義Device的。點擊開發者中心右上角的齒輪圖標,然后Devices>Add custom device,即可自行添加一個帶微信UA的模擬器,然后之后在模擬器界面的Device里切換即可。如圖:
利用微信oauth做限制
例子:拯救太平輪
由於上面的游戲鏈接已經失效,所以換個頁面,類型一致,可供各位測試用:幸運大轉盤
上面兩種都是比較常見而且簡單就能繞過限制的,而有些對用戶身份驗證要求比較高的頁面,則會利用微信的OAUTH來拉取openid做驗證,這種就不僅僅是改UA這么容易繞過去了。好在也不是無解。因為身份驗證一般都是存在cookies里的,所以我們可以直接給PC模擬器偽造cookies來讓頁面誤以為我們是在微信內做的驗證。
PS:這里是通用方法,不過目前針對微信內的頁面,微信官方有提供調試支持,可以查看更新的內容。
檢測方法
手機瀏覽器打開后會跳轉到open.weixin.qq.com域名,且頁面提示請在微信客戶端打開鏈接。
如圖:
繞過方法
將瀏覽器UA改為微信的,然后刷新頁面,會發現這個時候不再提示請在微信客戶端打開鏈接了,但是整個頁面一片空白。
打開fiddler,並設置手機wifi連接,確保手機數據都經過了fiddler。
fiddler的配置可以參考這篇文章,https的兩個配置必須要做,不然抓不了微信的包,另外如果確定手機連上了fiddler了但是微信的數據包都沒被抓到,可以先把微信app強行關閉,然后重新開一下即可
在微信里點擊頁面鏈接,使其正常進入頁面,然后fiddler上注意相關域名的記錄,找到Tunnel to open.weixin.qq.com后面那條記錄。會發現這時候原來的鏈接帶上了oauth參數。復制這時候的鏈接
如圖:
在瀏覽器中打開前面復制的鏈接,會發現還是白屏,然后右鍵頁面,選擇EditThisCookies,會發現這個頁面下有兩條cookies了。
也可以在開發者工具的Resources>cookies>wxoauth.wucai.com里查看當前頁面擁有的cookies數量。之所以前面不自己直接創建cookies就是因為cookies除了Value這個屬性外,還有Domain、Path、Expires/Max-Age等等其余屬性需要設置,而這些屬性自己是摸不出來的,只能先依靠頁面服務器創建,然后直接更改Value即可。
回到fiddler,還是剛剛選擇的鏈接,右邊窗口選擇Headers,然后會看到下面有兩條cookies,以及對應的數值。選中一條,然后右鍵Copy Value only,將值復制到前面瀏覽器里打開的EditThisCookies頁面中去。如圖:
需要的注意的是,這里復制出來的是cookies名稱+cookies值的方式,而EditThisCookies里只需要填cookies值即可,所以復制進去后記得將cookies Name =這一部分刪掉。如下圖所示,綠框里的PHPSESSID=是不需要的,刪掉即可。如圖:
重復第五步,將全部cookies值都改完之后,回到之前的瀏覽器頁面,輸入最初的主頁鏈接,成功。
在微信里的話,認證頁面完成后一般是有跳轉的,不過由於這里是手動更改的,所以沒辦法觸發跳轉,需要我們手動模擬一次。而前面的cookies在的緣故,頁面服務器也會當我們已經認證過,所以就直接跳過了。最后成功的截圖:
完成,看起來很復雜,其實也很簡單。個人感覺這個過程最麻煩的地方其實在於第2步:手機連fiddler需要先斷開之前的無線,手動輸一次代理設置到wifi,然后再連接下。所以我覺得現在最需要一個安卓下可以存儲wifi代理鏈接設置的工具= =
更新
更新於2015-10-12,針對第三種要openid驗證的頁面:
除了原先上文提到的抓包取cookies方法外,現在其實還有更簡單的辦法,利用微信官方的tbs調試。
最簡單的辦法就是安裝QQ瀏覽器最新版,然后利用內置的微信調試工具,可以省掉很多麻煩。具體步驟省略。
不喜歡用QQ瀏覽器的話,可以利用官方的tbs插件加上本地inspect的辦法,可以參考此文:微信、手Q、Qzone之x5內核inspect調試解決方案
不過這個方法我個人並沒有嘗試過,因為感覺配置過程過於麻煩。
進去后有部分功能無法正常使用
有時候會發現即使頁面正常進去了,也有些功能不能觸發,比如上傳圖片之類的,但是瀏覽器也沒有報錯。這種情況下一般多是由於對方使用了微信的jssdk內置方法(wx.xx之類的)。因為微信內置的方法不是純webview可以完成的,很多功能都需要微信客戶端的配合,因此達不到預期的效果也是很正常的。可以看微信jssdk的官方demo,你會發現基本上沒一個可以在PC上用。
其他的,想到再補充吧。