1. 程式人生 > 其它 >一個只允許移動端訪問的網站,改user-agent都過不了?

一個只允許移動端訪問的網站,改user-agent都過不了?

一個有意思的網站,使用移動端裝置能訪問

但是使用pc瀏覽器卻404

面對這種問題首先就是想到user-agent,所以我就直接更改了chrome的ua

結果……

然後我就懷疑是不是它獲取了我的視窗大小比例,進而判斷出來我用的是pc,於是我就改了頁面比例,結果……

好傢伙,這都不行,沒辦法了,只能分析程式碼了。

其實可以注意到,這個頁面並不是我們平常所說的“404 error”,因為抓包並沒有抓到404,且能發現有跳轉,因此推斷應該是網站先載入一個判斷指令碼,如果判斷結果為pc端,則跳轉到“404.html”網頁。

因此,我們的思路就很清晰了,先下一個斷點,確定了判斷的函式後hook就可以了,開搞。

我們下script斷點

訪問網站,成功斷掉,可以看到斷在了一個名為browserRedirect的函式上,我們進入這個函式

看到了如下的程式碼

 1 function browserRedirect() {
 2    var sUserAgent = navigator.userAgent.toLowerCase();
 3    var bIsIpad = sUserAgent.match(/ipad/i) == "ipad";
 4    var bIsIphoneOs = sUserAgent.match(/iphone os/i) == "iphone os";
 5    var
bIsMidp = sUserAgent.match(/midp/i) == "midp"; 6 var bIsUc7 = sUserAgent.match(/rv:1.2.3.4/i) == "rv:1.2.3.4"; 7 var bIsUc = sUserAgent.match(/ucweb/i) == "ucweb"; 8 var bIsAndroid = sUserAgent.match(/android/i) == "android"; 9 var bIsCE = sUserAgent.match(/windows ce/i) == "windows ce"; 10 var
bIsWM = sUserAgent.match(/windows mobile/i) == "windows mobile"; 11 if ((navigator.platform.indexOf("Win") != 0)&&(bIsIpad || bIsIphoneOs || bIsMidp || bIsUc7 || bIsUc || bIsAndroid || bIsCE || bIsWM)) { 12 console.log("mobile") 13 14 } else { 15 console.log("pc") 16 window.location.href="/404.html" 17 } 18 }

程式碼沒有進行任何混淆,甚至連基本的壓縮都沒有,可見這個程式設計師有多懶(doge)。我們可以看到else裡面有一個跳轉的指令,所以只需要把這個跳轉刪掉就行了。

我個人比較喜歡在本地overrides,因為如果後面要進一步逆向的話可能需要頻繁地重新整理,這樣會方便些。

本著最少改動原則,我只刪除了

window.location.href="/404.html"

重新整理頁面,可以看到頁面可以正常訪問了

所以為什麼改user-agent不能過咧,注意到,在這個函式中除了上面這一坨對ua的分析,在判斷條件裡面還有一個

navigator.platform.indexOf("Win") != 0

這個程式碼是用來判斷平臺標識的

我們在console中試一下

怪不得,原來之前就是在這一步露餡了。

PS:在我查資料的時候從CSDN上查到了幾乎一毛一樣的程式碼

不過這個程式碼沒有讓人頭疼的平臺標識判斷,所以這個關鍵的判斷條件應該是網站程式設計師在複製的時候自己加上去的,有自己的獨立思考,不戳不戳表揚一下(逃)。