(轉)我如何利用前端技術獲得 XXOO 網站的 VIP

網頁如圖,這裏只是說明整個網站的一些技術點,因此不應看的地方我都打上馬賽克了,讓咱們揭開這些網站的整個前端工做原理
image
首先剛進去的時候顯示一堆亂七八糟的東西,點進去其中一個頁面,下面各類虛假評論,而後每隔幾秒鐘彈出第幾几几個會員充值成功,咱們先把這個刪掉
image
好了,咱們繼續研究這個網站內部結構了
正常狀況每一個頁面的視頻都是試看幾十秒就會提醒你充值,固然這是這類網站的常規套路,咱們在瀏覽器的Network觀察加載的js,咱們能夠看到裏面這段代碼
image
這是一份叫作lsj.mp4.js的代碼的其中一部分,咱們能夠看到裏面有個關鍵的判斷,具體就是判斷你是不是會員,若是是那就根據類型是不是2返回play_url_arr_oumei數組和play_url_arr數組拼接一個url給你,若是你不是會員的話就進入試看的判斷,很清晰的看到有一個url,那就是試看的短視頻的路徑javascript

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

上面這兩句還告訴咱們第二個關鍵點就是咱們能夠根據isvip的cookie值來僞造身份,這個cookie就是保存到咱們的本地瀏覽器上,因此若是咱們能成功改寫它的話咱們就能變成會員繞過這個判斷,這份代碼已經封裝好getCookie,因此咱們能夠在控制檯直接調用來改寫cookie值,可是問題來了,咱們應該改爲什麼值才能繞過判斷呢,咱們繼續看源代碼搜索答案php

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值,有兩個關鍵的值出現了,分別是lsj和lsjyy
lsjhtml

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

lsjyy前端

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

其實我想了好久這個名字跟vip有什麼關聯,估計這個網站的做者想寫的是老司機和老司機YY的意思吧,不過無論它是什麼意思,如今只要咱們嘗試用它封裝好的setCookie方法本身改寫這兩個cookie值,就能在本地順利成爲會員,繞過剛纔的判斷條件了
lsj.pay.jsjava

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函數設置的值git

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

以下圖,咱們在瀏覽器執行這兩個函數,執行成功後咱們就能看到cookie被成功改寫
image
image
在這裏我設置lsjyy爲vip2,固然我在後面測試的時候發現這兩個值貌似沒什麼區別
imagegithub

而後咱們能夠用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_name和play_type,根據你是否VIP而後加載播放器播放拼接完的URL,play_name還含有undefined很不科學,說明有些視頻根本只有圖沒有源
打開play.html查看裏面的源代碼,能夠看到視頻的連接源
play.html第21行cookie

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

往下面看咱們能夠看到剛纔play_rand選取的對應的那個視頻,事實上play_url_arr_oumei和play_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.js的getMp4Url函數執行一次

image

咱們能夠看到一個可用的連接就這樣出現了
固然你能夠再執行以下代碼,讓它在網頁端執行,關鍵就是用playHtml3函數加載播放器,並打開拼接好的視頻連接,有時候加載的是一張圖片,更有時候加載的視頻連接也根本沒法播放,其實無論是否會員,最後也只是播放在頁面最後定義好的那十幾個視頻,支付變成會員只是它們把數據入庫,而後幫你設置個cookie的過程而已
固然這些網站的前端人員的代碼和註釋仍是挺好笑的
image

image
至此,就能夠看懂這種網站的工做原理了,因此遇到當心上當了

【本文由「遊戲撕裂者」發佈,2017年1月21日】

相關文章
相關標籤/搜索