Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

我如何用前端技术得到XXOO网站的VIP #62

Open
Wscats opened this issue Dec 24, 2016 · 126 comments
Open

我如何用前端技术得到XXOO网站的VIP #62

Wscats opened this issue Dec 24, 2016 · 126 comments
Labels

Comments

@Wscats
Copy link
Owner

Wscats commented Dec 24, 2016

网页如图,这里只是说明整个网站的一些技术点,所以不该看的地方我都打上马赛克了,让我们揭开这些网站的整个前端工作原理
image
首先刚进去的时候显示一堆乱七八糟的东西,点进去其中一个页面,下面各种虚假评论,然后每隔几秒钟弹出第几几几个会员充值成功,我们先把这个删掉
image
好了,我们继续研究这个网站内部结构了
正常情况每个页面的视频都是试看几十秒就会提醒你充值,当然这是这类网站的常规套路,我们在浏览器的Network观察加载的js,我们可以看到里面这段代码
image
这是一份叫做lsj.mp4.js的代码的其中一部分,我们可以看到里面有个关键的判断,具体就是判断你是否是会员,如果是那就根据类型是否是2返回play_url_arr_oumei数组和play_url_arr数组拼接一个url给你,如果你不是会员的话就进入试看的判断,很清晰的看到有一个url,那就是试看的短视频的路径

var isvip = getCookie('lsjyy');
if(isvip != undefined && isvip != ''  && isvip.match(rgExp)){}else{}

上面这两句还告诉我们第二个关键点就是我们可以根据isvip的cookie值来伪造身份,这个cookie就是保存到我们的本地浏览器上,所以如果我们能成功改写它的话我们就能变成会员绕过这个判断,这份代码已经封装好getCookie,所以我们可以在控制台直接调用来改写cookie值,但是问题来了,我们应该改成什么值才能绕过判断呢,我们继续看源代码搜索答案

function getMp4Url() {
        var play_name = getParam('play_name');
        var type = getParam('type');
        var rgExp =/^(v|V)[i|I|p|P|0-9]{2,3}$/g;
        var isvip = getCookie('lsjyy');
        var pic = $('.movie-pic img').attr('src');
        var html = '<img src="'+pic+'" style="height:auto; width:100%;display: none;">';
        html = '';
        var play_url = '';
        //vip会员
        if(isvip != undefined && isvip != ''  && isvip.match(rgExp))
        {
            var play_mp4 = getCookie('play_mp4');
            if(type == 2)
            {
                play_url = play_url_arr_oumei[play_rand2];

            }else{
                play_url = play_url_arr[play_rand];

            }
        }
        //试看
        else if(( play_name != '')&&(play_name != 'undefined'))
        {
            
            play_pic = 'http://oewx8de7n.qnssl.com/9e0120cv23/images/'+play_name+'.jpg';
            play_url = 'http://oewx8de7n.qnssl.com/9e0120cv23/images/mp4/'+play_name+'.mp4';
        }
        else
            play_url =  "http://su.cywl5.com/sy/h34.mp4";
        return play_url;
}

在lsj.pay.js?v=256这份代码的279行中我们又找到了一个线索,我们从代码看到,如果支付成功会在本地浏览器设置用户的cookie值,有两个关键的值出现了,分别是lsjlsjyy
lsj

setCookie('lsj', pay_tee, 'd730');

lsjyy

setCookie('lsjyy', 'vip', 'd730');

其实我想了很久这个名字跟vip有什么关联,估计这个网站的作者想写的是老司机和老司机YY的意思吧,不过不管它是什么意思,现在只要我们尝试用它封装好的setCookie方法自己改写这两个cookie值,就能在本地顺利成为会员,绕过刚才的判断条件了
lsj.pay.js

function checkOrderStatus() {
    $.post("./pay/ok.php?action=check&uid="+getCookie('user'), function(data) {
        var pay_tee = Number(data);
        if (pay_tee >= 1) 
        {
            ispay = 1;
            ispay = true;
            var lsj = getCookie('lsj');
            if(lsj == null) lsj = 0; 
            if(pay_tee > lsj)
            {    
                setCookie('lsj', pay_tee, 'd730');
            }
        }   
        if ((pay_tee > 0)&&(pay_tee <= s_v1_money)) 
        {
            setCookie('lsjyy', 'vip', 'd730');
        }
        else if ((pay_tee > s_v1_money)&&(pay_tee <= s_v2_money)) 
        {
            setCookie('lsjyy', 'vip2', 'd730');         
        }
        if (pay_tee >= 1) 
        {
            var dt1 =Math.round(new Date().getTime()/1000);
            setCookie('lsjtime', dt1, 'd730');
            setCookie("isPayClick",0, 'd1');
            var isPayClick = getCookie("isPayClick");
            if (isPayClick == 0)
                window.location.reload(); 
        }
       // el_checkpay.hide();
    })
} 

其实往下也可以看到有一个clearVIP函数,更肯定了刚才我们的结论,VIP和非VIP其实就是这两个值在作怪,所以我们默认的值应该就是clearVIP函数设置的值

function clearVIP()
{
    setCookie("lsjyy",0, 's1');
    setCookie("lsj",0, 's1');
}

如下图,我们在浏览器执行这两个函数,执行成功后我们就能看到cookie被成功改写
image
image
在这里我设置lsjyy为vip2,当然我在后面测试的时候发现这两个值貌似没什么区别
image

然后我们可以用lsj.pay.js第179行的showpay函数来检测是否已经是成功变成VIP

function showpay() {
    var rgExp =/^(v|V)[i|I|p|P|0-9]{2,3}$/g;
    var isvip = getCookie('lsjyy');
    if(isvip != undefined && isvip != ''  && isvip.match(rgExp))
    {
        alert('您已经是vip了哦.');
        return false;
    }
   //省略后面的代码
}

如果成功完成上面的步骤,我们在控制台输入showpay()就会看到下图这个弹窗,那证明我们已经成功升级为VIP...
image
我们再次进入其中一个带有视频的网页看看变成VIP会会真的有VIP的"待遇",我们发现页面内容块变成了空白,控制台报了下面这个错,那是提示有一个值叫play_rand没有定义,其实来到这里我们已经发现我们已经绕过了刚才会员判断,进入我们是会员的判断分支,只是因为一个未定义的值停止了代码的运行
image
image
由于这个值我们可以看到是一个数组的索引值,所以我们在控制台全局定义

var play_rand = 1

image
我们把id为play-html节点的元素样式设置diplay为显示,我们就可以看到正常的播放器出来了
image
分析源码得知,它大概的工作原理就是根据url的参数,比如play_nameplay_type,根据你是否VIP然后加载播放器播放拼接完的URL,play_name还含有undefined很不科学,说明有些视频根本只有图没有源
打开play.html查看里面的源代码,可以看到视频的链接源
play.html第21行

<script type="text/javascript">
    var cdn_url = 'http://oewx8de7n.qnssl.com/9e0120cv23';
</script>

往下面看我们可以看到刚才play_rand选取的对应的那个视频,事实上play_url_arr_oumeiplay_url_arr数组已经定义好了VIP可以观看的这十几个视频,所以不管怎么样付钱后都是看这十几个里面的其中一个,在这里其实已经可以自己拼接对应的链接进入相应的视频
play.html第324行

var play_url_arr_oumei=new Array();
    play_url_arr_oumei[1]=cdn_url+"/vip/2/om_1.mp4";
    play_url_arr_oumei[2]=cdn_url+"/vip/2/om_2.mp4";
    play_url_arr_oumei[3]=cdn_url+"/vip/2/om_3.mp4";
    play_url_arr_oumei[4]=cdn_url+"/vip/2/om_4.mp4";
    play_url_arr_oumei[5]=cdn_url+"/vip/2/om_5.mp4";
    play_url_arr_oumei[6]=cdn_url+"/vip/2/om_6.mp4";
    play_url_arr_oumei[7]=cdn_url+"/vip/try7.mp4";
    play_url_arr_oumei[8]=cdn_url+"/vip/try8.mp4";
    play_url_arr_oumei[9]=cdn_url+"/vip/try9.mp4";
    play_url_arr_oumei[10]=cdn_url+"/vip/try10.mp5";
    var play_url_arr=new Array();
    play_url_arr[1]=cdn_url+"/vip/try1.mp4";
    play_url_arr[2]=cdn_url+"/vip/try2.mp4";
    play_url_arr[3]=cdn_url+"/vip/try3.mp4";
    play_url_arr[4]=cdn_url+"/vip/try4.mp4";
    play_url_arr[5]=cdn_url+"/vip/try5.mp4";
    play_url_arr[6]=cdn_url+"/vip/try6.mp4";
    play_url_arr[7]=cdn_url+"/vip/try7.mp4";
    play_url_arr[8]=cdn_url+"/vip/try8.mp4";
    play_url_arr[9]=cdn_url+"/vip/try9.mp4";
    play_url_arr[10]=cdn_url+"/vip/try10.mp4";

当然我们为了证明我们刚才上面的推测,我们可以在控制台把lsj.mp4.jsgetMp4Url函数执行一次

image

我们可以看到一个可用的链接就这样出现了
当然你可以再执行如下代码,让它在网页端执行,关键就是用playHtml3函数加载播放器,并打开拼接好的视频链接,有时候加载的是一张图片,更有时候加载的视频链接也根本无法播放,其实不管是否会员,最后也只是播放在页面最后定义好的那十几个视频,支付变成会员只是它们把数据入库,然后帮你设置个cookie的过程而已
当然这些网站的前端人员的代码和注释还是挺可笑的
image

image
至此,就可以看懂这种网站的工作原理了,所以遇到小心上当了

Last Update 2016.12.26

技术本身不可耻,可耻的是滥用技术的人!
后续更多内容可关注作者本人@Wscats或者Star本文

@Wscats Wscats added the notes label Dec 24, 2016
@chaoren1641
Copy link

哈哈哈,666~~~

@weigram
Copy link

weigram commented Dec 24, 2016

谢谢博主拉住了我

@Nico-M
Copy link

Nico-M commented Dec 24, 2016

推上掘金了,目测要火,赶紧占座!

@Lnybb
Copy link

Lnybb commented Dec 24, 2016

火钳留名

@L807217649
Copy link

厉害了我的哥

@ericjee
Copy link

ericjee commented Dec 25, 2016

厉害了word哥

@webchenzj
Copy link

咸鱼666

@ontoone
Copy link

ontoone commented Dec 25, 2016

66666,现在就没有地方不能开车!老哥,稳

@dongcanliang
Copy link

这车开的稳!

@flippancy
Copy link

厉害

@gywgithub
Copy link

666

@xzjs
Copy link

xzjs commented Dec 26, 2016

学习了,好人一生平安

@forzalianjunting
Copy link

forzalianjunting commented Dec 26, 2016

老哥稳,真心为技术

@Jevirs
Copy link

Jevirs commented Dec 26, 2016

污污污~~~开火车喽,哪个网站?

@xCss
Copy link

xCss commented Dec 26, 2016

厉害了,word哥!

@xbini
Copy link

xbini commented Dec 26, 2016

老哥稳,上车了

@nerona
Copy link

nerona commented Dec 26, 2016

老司机

@xsank
Copy link

xsank commented Dec 26, 2016

到最后博主也没一声叹息,果然是为了技术!

@warpcgd
Copy link

warpcgd commented Dec 26, 2016

老哥稳!

@keyus
Copy link

keyus commented Dec 26, 2016

我在想,博主的初忠是什么?
应该只是为了技术....唉

@hezhongfeng
Copy link

@20141125
发车了

@zlab
Copy link

zlab commented Dec 26, 2016

厉害

@my19940202
Copy link

其实有那么几个瞬间 我也想这么搞来着 不过几分钟过后 就进入贤者时间

@HankBu
Copy link

HankBu commented Dec 26, 2016

问个问题,为什么不直接用chrome插件editthiscookie直接修改cookie,这样不是来的更快?

@HankBu 不用插件的原因是执行纯前端的JS方法在Console(即控制台)修改其实来得更快更直接,并且我也没装editthiscookie这个插件,安装这个插件还要_FQ_,所以就嫌这个麻烦了,宁愿敲多几行代码,不大习惯可视化了,不过还是谢谢您的建议~From @Wscats

@w5a2n02016
Copy link

w5a2n02016 commented Dec 26, 2016

恕我直言 真的稳
可以百度wapyy 668
(╭ ̄3 ̄)╭♡

@crushjjl
Copy link

吓得我赶紧收藏了,毕竟这种好技术要多看,多学

@ghost
Copy link

ghost commented Dec 26, 2016

66666

@hechunhi
Copy link

w(゚Д゚)w 。。。

不堪入目啊~~ (¯﹃¯)

@orsiro
Copy link

orsiro commented Jan 5, 2017

老哥稳

@yangzicheng
Copy link

厉害厉害

@suwenzhou
Copy link

老司机,稳!

@svkd9
Copy link

svkd9 commented Jan 12, 2017

有网址么,我想试验,不能只学不练成不了老司机

@imizao
Copy link

imizao commented Jan 17, 2017

回家试试,滴滴滴,下班卡

@cdll
Copy link

cdll commented Feb 6, 2017

滴!斯里兰卡~

@jiayechao
Copy link

老司机,等等我,现在上车还来得及吗?

@ahzseven
Copy link

技术决定命运,哈哈

@xingchangzhu
Copy link

要火了

@lexlin
Copy link

lexlin commented Feb 21, 2017

如果只是讨论学术问题就算了,但如果是为了释放资源,我就不得不说了,你们都不想想,当你脑子一热,想LU个痛快的时候,还要看源码,查JS,调试,试想一下,当你忙完这一堆东西后,还有LU的激情吗,你们还是对着代码LU吧.... 学学我,我都是直接百度:我们立足于美利坚合众国,受xxx保护,

@Thinking80s
Copy link

技术决定命运,上车了

@littlefish13
Copy link

厉害了

@littlefish13
Copy link

do u know who i am?

@zhangzs000
Copy link

no

@carrykingdow
Copy link

滴~老年卡

@littlefish13
Copy link

老人免费卡

@kokpapa
Copy link

kokpapa commented Sep 5, 2017

技术决定命运!

@yunyu950908
Copy link

这么说一些教育类的网站怕不是也可能这么看收费视频,emmmmmmmm 感谢分享~

@iinmylife93
Copy link

人才... 那个注释笑尿了

@xialei520
Copy link

牛皮

@SoulHall
Copy link

ly真牛比

@shanjixiaboss
Copy link

打卡,我是读书人🤨

@2674098063
Copy link

我要把你这篇文章放在我浏览器的书签栏

@jsThin
Copy link

jsThin commented May 19, 2020

大牛

@guapi233
Copy link

绝了

@MrZWH
Copy link

MrZWH commented Aug 5, 2021

九折

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests