其他分享
首页 > 其他分享> > 一个只允许移动端访问的网站,改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上查到了几乎一毛一样的代码

 

不过这个代码没有让人头疼的平台标识判断,所以这个关键的判断条件应该是网站程序员在复制的时候自己加上去的,有自己的独立思考,不戳不戳表扬一下(逃)。

标签:pc,sUserAgent,agent,访问,404,user,跳转,var,match
来源: https://www.cnblogs.com/rm-fr/p/16284534.html