猿人學內部練習平臺第21、22、24、29、34題

脱下长日的假面發表於2024-06-01

第21題 一個套了輕ob的webpack

觀察介面請求引數可以發現,需要我們逆向引數 s,經過檢視呼叫堆疊,很容易找到引數位置,如下:

可以看到,這是一個 webpack 檔案,此時有兩種處理方式,第一種是直接複製該檔案到本地,將引數暴露到全域性,根據報錯修補環境;第二種是先將載入器函式複製出來,然後根據入口模組一個個修補模組。
先看第一種方式:
將此 webpack.js 複製到本地,然後在關鍵引數部分新增如下程式碼,將所需引數暴露至全域性:

然後執行,報如下錯誤:

將報錯位置的 window 改為 global,繼續執行,系統報如下錯誤,並彈出警告視窗:

先將 $['ajax'] 那部分程式碼刪掉,然後在上文 p = global 那裡打上斷點,一步步調式,發現彈出警告視窗的程式碼是這一行:

也就是生成我們所需逆向的引數 s 的生成函式里,進入繼續單步除錯,最終發現是如下程式碼導致的彈窗:

刪除該行 eval,繼續執行,發現系統不停的輸出內容,且彈窗無限迴圈出現,推測是設定了 setInterval,在檔案首行將該函式置空 setInterval = function () {},再次執行,程式終於沒有報錯了,接著就是在程式最後新增列印:

console.log(global.t)
console.log(global.s)

執行,發現沒有任何輸出,這時我們可以列印一個常量看看,比如 console.log(123),發現還是沒有輸出,斷點除錯也經過了此行程式碼,說明系統對 console.log 做了手腳,此時可以在程式首行自定義一個輸出變數,如 h_log = console.log,透過該變數列印:

h_log(global.t)
h_log(global.s)

再次執行,可以看到,成功輸出了對應引數:

這時,就可以在 python 中呼叫了:

import subprocess

result = subprocess.check_output(['node', '1.js']).decode().split('\n')
print(result[0], result[1])

第二種方式,透過入口模組一個個修補模組
首先找到 webpack 中的載入器部分,如下:

!function(_0x33909e) {
    var _0x56b1f7 = function() {
        var _0x2f2759 = !![];
        return function(_0x68fc69, _0x575f66) {
            var _0x1686f2 = _0x2f2759 ? function() {
                if (_0x575f66) {
                    var _0x1aef1e = _0x575f66['apply'](_0x68fc69, arguments);
                    return _0x575f66 = null,
                    _0x1aef1e;
                }
            }
            : function() {}
            ;
            return _0x2f2759 = ![],
            _0x1686f2;
        }
        ;
    }();
    function _0xe63c45(_0xd5a17c) {
        var _0x291e45 = _0x56b1f7(this, function() {
            var _0x45b5a7 = function() {
                var _0x476af4;
                try {
                    _0x476af4 = Function('return\x20(function()\x20' + '{}.constructor(\x22return\x20this\x22)(\x20)' + ');')();
                } catch (_0x12f241) {
                    _0x476af4 = window;
                }
                return _0x476af4;
            }
              , _0x2a46ca = _0x45b5a7()
              , _0x43925d = _0x2a46ca['console'] = _0x2a46ca['console'] || {}
              , _0x2d2eeb = ['log', 'warn', 'info', 'error', 'exception', 'table', 'trace'];
            for (var _0x4e73e5 = -0x1 * -0x1840 + -0x2609 + 0xdc9; _0x4e73e5 < _0x2d2eeb['length']; _0x4e73e5++) {
                var _0x56bc6c = _0x56b1f7['constructor']['prototype']['bind'](_0x56b1f7)
                  , _0x16db9f = _0x2d2eeb[_0x4e73e5]
                  , _0xa38bf = _0x43925d[_0x16db9f] || _0x56bc6c;
                _0x56bc6c['__proto__'] = _0x56b1f7['bind'](_0x56b1f7),
                _0x56bc6c['toString'] = _0xa38bf['toString']['bind'](_0xa38bf),
                _0x43925d[_0x16db9f] = _0x56bc6c;
            }
        });
        _0x291e45();
        if (_0x2e44f1[_0xd5a17c])
            return _0x2e44f1[_0xd5a17c]['exports'];
        var _0xfaa4fe = _0x2e44f1[_0xd5a17c] = {
            'i': _0xd5a17c,
            'l': !(0x1822 + 0x55d * 0x3 + -0xb * 0x3a8),
            'exports': {}
        };
        return _0x33909e[_0xd5a17c]['call'](_0xfaa4fe['exports'], _0xfaa4fe, _0xfaa4fe['exports'], _0xe63c45),
        _0xfaa4fe['l'] = !(-0x854 + 0x493 * 0x1 + 0x1 * 0x3c1),
        _0xfaa4fe['exports'];
    }
    var _0x2e44f1 = {};
    _0xe63c45['m'] = _0x33909e,
    _0xe63c45['c'] = _0x2e44f1,
    _0xe63c45['i'] = function(_0x4bed3d) {
        return _0x4bed3d;
    }
    ,
    _0xe63c45['d'] = function(_0x2973c5, _0x1b81bd, _0xea4905) {
        var _0x5d151a = {};
        _0x5d151a['configurable'] = !(-0x1969 + 0x10f3 + 0x877),
        _0x5d151a['enumerable'] = !(0xb * 0x7a + -0x6fd * -0x3 + 0x1 * -0x1a35),
        _0x5d151a['get'] = _0xea4905,
        _0xe63c45['o'](_0x2973c5, _0x1b81bd) || Object['defineProperty'](_0x2973c5, _0x1b81bd, _0x5d151a);
    }
    ,
    _0xe63c45['n'] = function(_0x4d1715) {
        var _0x4b2239 = _0x4d1715 && _0x4d1715['__esModule'] ? function() {
            return _0x4d1715['default'];
        }
        : function() {
            return _0x4d1715;
        }
        ;
        return _0xe63c45['d'](_0x4b2239, 'a', _0x4b2239),
        _0x4b2239;
    }
    ,
    _0xe63c45['o'] = function(_0x111524, _0xb34723) {
        return Object['prototype']['hasOwnProperty']['call'](_0x111524, _0xb34723);
    }
    ,
    _0xe63c45['p'] = '',
    _0xe63c45(_0xe63c45['s'] = -0x1 * -0x2a5 + 0x24d8 + -0xb * 0x38d);
}()

主要是函式 _0xe63c45,可以在如下位置新增列印:

直接執行,報如下錯誤,缺少模組 110,將該模組複製過去:

再次執行,如下,缺少 512 模組,再將該模組複製過去:

再次執行,缺哪個模組,就複製哪個模組過去,最終如下:

接著要處理的和第一種方式一樣,setInterval 和 h_log 的處理,以及相關 eval 的刪除,最終輸出如下:

也成功的列印了引數。

第22題 牛奶我只喝特侖蘇

該題主要考察的是 tls 指紋的校驗,首先寫一個基本的請求程式:

import requests

headers = {
    'cookie': 'sessionid=改為自己的sessionid; Hm_lvt_337e99a01a907a08d00bed4a1a52e35d=1714980899,1717168110,1717210903; no-alert=true; Hm_lpvt_337e99a01a907a08d00bed4a1a52e35d=1717225550; __yr_token__=b301cDGEbIHYnURYVQVdFfwRCKAgDQCw8PAwEfDwOMzwFLSQLT1d6ZGF7BgklZVkeUAYgNV5QMwAmZDVCP1EhRWJzaB8bG0NfThwbe19hVmIQPRF7XDI4SANuWAZYF3ZrXAZPABUMG3kJWQNBYRY=',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0',
}

data = {
  'page': '2'
}

response = requests.post('https://www.python-spider.com/api/challenge22', headers=headers, data=data)
print(response.status_code, response.text)

執行後返回 403,因為 requests 庫的 tls 指紋與瀏覽器的指紋特徵是不同的,目前已經有一些 python 庫支援自處理 tls,如 curl_cffi,https://github.com/yifeikong/curl_cffi,透過 pip 安裝 pip install curl_cffi,以及 tls-client,(pip install tls-client),以 curl_cffi 為例,程式碼改為如下:

from curl_cffi import requests

headers = {
    'cookie': 'sessionid=改為自己的sessionid; Hm_lvt_337e99a01a907a08d00bed4a1a52e35d=1714980899,1717168110,1717210903; no-alert=true; Hm_lpvt_337e99a01a907a08d00bed4a1a52e35d=1717225550; __yr_token__=b301cDGEbIHYnURYVQVdFfwRCKAgDQCw8PAwEfDwOMzwFLSQLT1d6ZGF7BgklZVkeUAYgNV5QMwAmZDVCP1EhRWJzaB8bG0NfThwbe19hVmIQPRF7XDI4SANuWAZYF3ZrXAZPABUMG3kJWQNBYRY=',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0',
}

data = {
  'page': '2'
}

response = requests.post('https://www.python-spider.com/api/challenge22', headers=headers, data=data, impersonate='chrome120')
print(response.status_code, response.text)

再次執行,可以成功獲取對應資料。

第24題 萬籟俱寂

抓包發現,沒有任何加密引數,直接requests請求,返回 403,檢視抓包資訊可以發現,是 http2.0 請求,且該網站會檢測請求是否為 http2:

requests 庫是不支援 http2 的,此時可以使用 httpx 或者 22 題提到的 curl_cffi 請求,就可以獲取到資料了。

第29題 濃縮特侖蘇

校驗 tls 指紋,解法同 22 題

第34題 js加課例題1


首先清除除 sessionid 外的cookie,重新整理頁面,檢視介面:


可以看到,頁面首先請求了一次 https://www.python-spider.com/challenge/34,返回了一段包裹 js 程式碼的html,然後載入了 h1.js 和 h2.js 兩個檔案,接著再次請求了 https://www.python-spider.com/challenge/34,第二次請求正常響應了資料,第一次請求返回的內容大致如下:

可以看到,宣告瞭兩個變數 rind 和 rnns,然後呼叫了 sEnc 方法,此時檢視 cookie,可以看到新生成了兩個cookie,yuanrenxue34 和 iloveu,就是我們要模擬生成的cookie。
yuanrenxue34 在第一次請求頁面時透過 Set-Cookie 返回,iloveu 則是透過js加密得到的。
接下來我們再次清除 cookie,在如下所示位置打上斷點,重新重新整理載入頁面:

點選執行按鈕,直至執行至 34 頁面,單步除錯至 sEnc 方法處:

進入該方法,可以看到,位於 h2.js 中:

經過除錯可知,該方法就是生成 iloveu 引數的方法。
將 h1.js 和 h2.js 的內容複製到本地同一個檔案中,並刪除相關環境檢測程式碼,合併相同變數,經過一步步除錯修改,最終程式碼如下:

var __Oxb76f0 = ["", "\x6C\x65\x6E\x67\x74\x68", "\x63\x6F\x6E\x63\x61\x74", "\x63\x68\x61\x72\x43\x6F\x64\x65\x41\x74", "\x77\x65\x62\x64\x72\x69\x76\x65\x72", "\x75\x73\x65\x72\x41\x67\x65\x6E\x74", "\x63\x61\x6E\x76\x61\x73", "\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74", "\x67\x65\x74\x43\x6F\x6E\x74\x65\x78\x74", "\x77\x65\x62\x67\x6C", "\x57\x45\x42\x47\x4C\x5F\x64\x65\x62\x75\x67\x5F\x72\x65\x6E\x64\x65\x72\x65\x72\x5F\x69\x6E\x66\x6F", "\x67\x65\x74\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E", "\x67\x65\x74\x50\x61\x72\x61\x6D\x65\x74\x65\x72", "\x42\x72\x69\x61\x6E\x20\x50\x61\x75\x6C", "\x43\x68\x72\x6F\x6D\x65", "\x69\x6E\x64\x65\x78\x4F\x66", "\x41\x6E\x64\x72\x6F\x69\x64", "\x70\x6C\x75\x67\x69\x6E\x73", "\x6C\x61\x6E\x67\x75\x61\x67\x65", "\x6C\x61\x6E\x67\x75\x61\x67\x65\x73", "\x75\x73\x65\x72\x4C\x61\x6E\x67\x75\x61\x67\x65", "\x46\x69\x72\x65\x66\x6F\x78", "\x57\x65\x62\x4B\x69\x74", "\x6F\x6E\x6C\x6F\x61\x64", "\x69\x6D\x61\x67\x65\x73", "\x77\x69\x64\x74\x68", "\x77\x72\x69\x74\x65", "\x53\x74\x6F\x70", "\x65\x78\x65\x63\x43\x6F\x6D\x6D\x61\x6E\x64", "\x73\x74\x6F\x70", "\x66\x72\x6F\x6D\x43\x68\x61\x72\x43\x6F\x64\x65", "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x41\x42\x43\x44\x45\x46", "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x61\x62\x63\x64\x65\x66", "\x63\x68\x61\x72\x41\x74", "\x73\x75\x62\x73\x74\x72\x69\x6E\x67", "\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7A\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2B\x2F", "\x75\x6E\x64\x65\x66\x69\x6E\x65\x64", "\x6C\x6F\x67", "\u5220\u9664", "\u7248\u672C\u53F7\uFF0C\x6A\x73\u4F1A\u5B9A", "\u671F\u5F39\u7A97\uFF0C", "\u8FD8\u8BF7\u652F\u6301\u6211\u4EEC\u7684\u5DE5\u4F5C", "\x6A\x73\x6A\x69\x61", "\x6D\x69\x2E\x63\x6F\x6D"];
var __Oxbb794 = ["", "\x6C\x65\x6E\x67\x74\x68", "\x63\x6F\x6E\x63\x61\x74", "\x3B\x20", "\x73\x70\x6C\x69\x74", "\x63\x6F\x6F\x6B\x69\x65", "\x3D", "yuanrenxue34", "iloveu=", "\x64\x6F\x6D\x61\x69\x6E", "\x2E", "\x72\x65\x70\x6C\x61\x63\x65", "\x67\x65\x74\x54\x69\x6D\x65", "\x73\x65\x74\x54\x69\x6D\x65", "\x3B\x20\x65\x78\x70\x69\x72\x65\x73\x3D", "\x74\x6F\x47\x4D\x54\x53\x74\x72\x69\x6E\x67", "\x3B\x20\x70\x61\x74\x68\x3D\x2F", "\x3B\x20\x64\x6F\x6D\x61\x69\x6E\x3D", "\x63\x68\x61\x72\x43\x6F\x64\x65\x41\x74", "\x66\x72\x6F\x6D\x43\x68\x61\x72\x43\x6F\x64\x65", "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x41\x42\x43\x44\x45\x46", "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x61\x62\x63\x64\x65\x66", "\x63\x68\x61\x72\x41\x74", "\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7A\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2B\x2F", "\x75\x6E\x64\x65\x66\x69\x6E\x65\x64", "\x6C\x6F\x67", "\u5220\u9664", "\u7248\u672C\u53F7\uFF0C\x6A\x73\u4F1A\u5B9A", "\u671F\u5F39\u7A97\uFF0C", "\u8FD8\u8BF7\u652F\u6301\u6211\u4EEC\u7684\u5DE5\u4F5C", "\x6A\x73\x6A\x69\x61", "\x6D\x69\x2E\x63\x6F\x6D"];

var hexcase = 0;
var b64pad = "";
var chrsz = 8;

function hex_1(_0x1b98x5, rnns, rind) {
    return binl2hex(core_md5(str2binl(_0x1b98x5), _0x1b98x5[__Oxb76f0[0x1]] * chrsz), rnns, rind)
}

function b64_md5(_0x1b98x5) {
    return binl2b64(core_md5(str2binl(_0x1b98x5), _0x1b98x5[__Oxb76f0[0x1]] * chrsz))
}

function str_md5(_0x1b98x5) {
    return binl2str(core_md5(str2binl(_0x1b98x5), _0x1b98x5[__Oxb76f0[0x1]] * chrsz))
}

function hex_hmac_md5(_0x1b98x9, _0x1b98xa) {
    return binl2hex(core_hmac_md5(_0x1b98x9, _0x1b98xa))
}

function b64_hmac_md5(_0x1b98x9, _0x1b98xa) {
    return binl2b64(core_hmac_md5(_0x1b98x9, _0x1b98xa))
}

function str_hmac_md5(_0x1b98x9, _0x1b98xa) {
    return binl2str(core_hmac_md5(_0x1b98x9, _0x1b98xa))
}

function core_md5(_0x1b98xe, _0x1b98xf) {
    _0x1b98xe[_0x1b98xf >> 5] |= 0x80 << ((_0x1b98xf) % 32);
    _0x1b98xe[(((_0x1b98xf + 64) >>> 9) << 4) + 14] = _0x1b98xf;
    var _0x1b98x10 = 1732584193;
    var _0x1b98x11 = -271733879;
    var _0x1b98x12 = -1732584194;
    var _0x1b98x13 = 271733878;
    for (var _0x1b98x14 = 0; _0x1b98x14 < _0x1b98xe[__Oxb76f0[0x1]]; _0x1b98x14 += 16) {
        var _0x1b98x15 = _0x1b98x10;
        var _0x1b98x16 = _0x1b98x11;
        var _0x1b98x17 = _0x1b98x12;
        var _0x1b98x18 = _0x1b98x13;
        _0x1b98x10 = md5_ff(_0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98xe[_0x1b98x14 + 0], 7, -680876936);
        _0x1b98x13 = md5_ff(_0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98xe[_0x1b98x14 + 1], 12, -389564586);
        _0x1b98x12 = md5_ff(_0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98xe[_0x1b98x14 + 2], 17, 606105819);
        _0x1b98x11 = md5_ff(_0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98xe[_0x1b98x14 + 3], 22, -1044525330);
        _0x1b98x10 = md5_ff(_0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98xe[_0x1b98x14 + 4], 7, -176418897);
        _0x1b98x13 = md5_ff(_0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98xe[_0x1b98x14 + 5], 12, 1200080426);
        _0x1b98x12 = md5_ff(_0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98xe[_0x1b98x14 + 6], 17, -1473231341);
        _0x1b98x11 = md5_ff(_0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98xe[_0x1b98x14 + 7], 22, -45705983);
        _0x1b98x10 = md5_ff(_0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98xe[_0x1b98x14 + 8], 7, 1770035416);
        _0x1b98x13 = md5_ff(_0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98xe[_0x1b98x14 + 9], 12, -1958414417);
        _0x1b98x12 = md5_ff(_0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98xe[_0x1b98x14 + 10], 17, -42063);
        _0x1b98x11 = md5_ff(_0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98xe[_0x1b98x14 + 11], 22, -1990404162);
        _0x1b98x10 = md5_ff(_0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98xe[_0x1b98x14 + 12], 7, 1804603682);
        _0x1b98x13 = md5_ff(_0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98xe[_0x1b98x14 + 13], 12, -40341101);
        _0x1b98x12 = md5_ff(_0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98xe[_0x1b98x14 + 14], 17, -1502002290);
        _0x1b98x11 = md5_ff(_0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98xe[_0x1b98x14 + 15], 22, 1236535329);
        _0x1b98x10 = md5_gg(_0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98xe[_0x1b98x14 + 1], 5, -165796510);
        _0x1b98x13 = md5_gg(_0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98xe[_0x1b98x14 + 6], 9, -1069501632);
        _0x1b98x12 = md5_gg(_0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98xe[_0x1b98x14 + 11], 14, 643717713);
        _0x1b98x11 = md5_gg(_0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98xe[_0x1b98x14 + 0], 20, -373897302);
        _0x1b98x10 = md5_gg(_0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98xe[_0x1b98x14 + 5], 5, -701558691);
        _0x1b98x13 = md5_gg(_0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98xe[_0x1b98x14 + 10], 9, 38016083);
        _0x1b98x12 = md5_gg(_0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98xe[_0x1b98x14 + 15], 14, -660478335);
        _0x1b98x11 = md5_gg(_0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98xe[_0x1b98x14 + 4], 20, -405537848);
        _0x1b98x10 = md5_gg(_0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98xe[_0x1b98x14 + 9], 5, 568446438);
        _0x1b98x13 = md5_gg(_0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98xe[_0x1b98x14 + 14], 9, -1019803690);
        _0x1b98x12 = md5_gg(_0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98xe[_0x1b98x14 + 3], 14, -187363961);
        _0x1b98x11 = md5_gg(_0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98xe[_0x1b98x14 + 8], 20, 1163531501);
        _0x1b98x10 = md5_gg(_0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98xe[_0x1b98x14 + 13], 5, -1444681467);
        _0x1b98x13 = md5_gg(_0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98xe[_0x1b98x14 + 2], 9, -51403784);
        _0x1b98x12 = md5_gg(_0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98xe[_0x1b98x14 + 7], 14, 1735328473);
        _0x1b98x11 = md5_gg(_0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98xe[_0x1b98x14 + 12], 20, -1926607734);
        _0x1b98x10 = md5_hh(_0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98xe[_0x1b98x14 + 5], 4, -378558);
        _0x1b98x13 = md5_hh(_0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98xe[_0x1b98x14 + 8], 11, -2022574463);
        _0x1b98x12 = md5_hh(_0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98xe[_0x1b98x14 + 11], 16, 1839030562);
        _0x1b98x11 = md5_hh(_0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98xe[_0x1b98x14 + 14], 23, -35309556);
        _0x1b98x10 = md5_hh(_0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98xe[_0x1b98x14 + 1], 4, -1530992060);
        _0x1b98x13 = md5_hh(_0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98xe[_0x1b98x14 + 4], 11, 1272893353);
        _0x1b98x12 = md5_hh(_0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98xe[_0x1b98x14 + 7], 16, -155497632);
        _0x1b98x11 = md5_hh(_0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98xe[_0x1b98x14 + 10], 23, -1094730640);
        _0x1b98x10 = md5_hh(_0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98xe[_0x1b98x14 + 13], 4, 681279174);
        _0x1b98x13 = md5_hh(_0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98xe[_0x1b98x14 + 0], 11, -358537222);
        _0x1b98x12 = md5_hh(_0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98xe[_0x1b98x14 + 3], 16, -722521979);
        _0x1b98x11 = md5_hh(_0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98xe[_0x1b98x14 + 6], 23, 76029189);
        _0x1b98x10 = md5_hh(_0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98xe[_0x1b98x14 + 9], 4, -640364487);
        _0x1b98x13 = md5_hh(_0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98xe[_0x1b98x14 + 12], 11, -421815835);
        _0x1b98x12 = md5_hh(_0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98xe[_0x1b98x14 + 15], 16, 530742520);
        _0x1b98x11 = md5_hh(_0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98xe[_0x1b98x14 + 2], 23, -995338651);
        _0x1b98x10 = md5_ii(_0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98xe[_0x1b98x14 + 0], 6, -198630844);
        _0x1b98x13 = md5_ii(_0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98xe[_0x1b98x14 + 7], 10, 1126891415);
        _0x1b98x12 = md5_ii(_0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98xe[_0x1b98x14 + 14], 15, -1416354905);
        _0x1b98x11 = md5_ii(_0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98xe[_0x1b98x14 + 5], 21, -57434055);
        _0x1b98x10 = md5_ii(_0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98xe[_0x1b98x14 + 12], 6, 1700485571);
        _0x1b98x13 = md5_ii(_0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98xe[_0x1b98x14 + 3], 10, -1894986606);
        _0x1b98x12 = md5_ii(_0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98xe[_0x1b98x14 + 10], 15, -1051523);
        _0x1b98x11 = md5_ii(_0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98xe[_0x1b98x14 + 1], 21, -2054922799);
        _0x1b98x10 = md5_ii(_0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98xe[_0x1b98x14 + 8], 6, 1873313359);
        _0x1b98x13 = md5_ii(_0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98xe[_0x1b98x14 + 15], 10, -30611744);
        _0x1b98x12 = md5_ii(_0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98xe[_0x1b98x14 + 6], 15, -1560198380);
        _0x1b98x11 = md5_ii(_0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98xe[_0x1b98x14 + 13], 21, 1309151649);
        _0x1b98x10 = md5_ii(_0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98xe[_0x1b98x14 + 4], 6, -145523070);
        _0x1b98x13 = md5_ii(_0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98xe[_0x1b98x14 + 11], 10, -1120210379);
        _0x1b98x12 = md5_ii(_0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98xe[_0x1b98x14 + 2], 15, 718787259);
        _0x1b98x11 = md5_ii(_0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98x10, _0x1b98xe[_0x1b98x14 + 9], 21, -343485551);
        _0x1b98x10 = safe_add(_0x1b98x10, _0x1b98x15);
        _0x1b98x11 = safe_add(_0x1b98x11, _0x1b98x16);
        _0x1b98x12 = safe_add(_0x1b98x12, _0x1b98x17);
        _0x1b98x13 = safe_add(_0x1b98x13, _0x1b98x18)
    }
    ;
    return Array(_0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98x13)
}

function md5_cmn(_0x1b98x1a, _0x1b98x10, _0x1b98x11, _0x1b98xe, _0x1b98x5, _0x1b98x1b) {
    return safe_add(bit_rol(safe_add(safe_add(_0x1b98x10, _0x1b98x1a), safe_add(_0x1b98xe, _0x1b98x1b)), _0x1b98x5), _0x1b98x11)
}

function md5_ff(_0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98xe, _0x1b98x5, _0x1b98x1b) {
    return md5_cmn((_0x1b98x11 & _0x1b98x12) | ((~_0x1b98x11) & _0x1b98x13), _0x1b98x10, _0x1b98x11, _0x1b98xe, _0x1b98x5, _0x1b98x1b)
}

function md5_gg(_0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98xe, _0x1b98x5, _0x1b98x1b) {
    return md5_cmn((_0x1b98x11 & _0x1b98x13) | (_0x1b98x12 & (~_0x1b98x13)), _0x1b98x10, _0x1b98x11, _0x1b98xe, _0x1b98x5, _0x1b98x1b)
}

function md5_hh(_0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98xe, _0x1b98x5, _0x1b98x1b) {
    return md5_cmn(_0x1b98x11 ^ _0x1b98x12 ^ _0x1b98x13, _0x1b98x10, _0x1b98x11, _0x1b98xe, _0x1b98x5, _0x1b98x1b)
}

function md5_ii(_0x1b98x10, _0x1b98x11, _0x1b98x12, _0x1b98x13, _0x1b98xe, _0x1b98x5, _0x1b98x1b) {
    return md5_cmn(_0x1b98x12 ^ (_0x1b98x11 | (~_0x1b98x13)), _0x1b98x10, _0x1b98x11, _0x1b98xe, _0x1b98x5, _0x1b98x1b)
}

function core_hmac_md5(_0x1b98x9, _0x1b98xa) {
    var _0x1b98x21 = str2binl(_0x1b98x9);
    if (_0x1b98x21[__Oxb76f0[0x1]] > 16) {
        _0x1b98x21 = core_md5(_0x1b98x21, _0x1b98x9[__Oxb76f0[0x1]] * chrsz)
    }
    ;var _0x1b98x22 = Array(16)
        , _0x1b98x23 = Array(16);
    for (var _0x1b98x14 = 0; _0x1b98x14 < 16; _0x1b98x14++) {
        _0x1b98x22[_0x1b98x14] = _0x1b98x21[_0x1b98x14] ^ 0x36363636;
        _0x1b98x23[_0x1b98x14] = _0x1b98x21[_0x1b98x14] ^ 0x5C5C5C5C
    }
    ;var _0x1b98x24 = core_md5(_0x1b98x22[__Oxb76f0[0x2]](str2binl(_0x1b98xa)), 512 + _0x1b98xa[__Oxb76f0[0x1]] * chrsz);
    return core_md5(_0x1b98x23[__Oxb76f0[0x2]](_0x1b98x24), 512 + 128)
}

function safe_add(_0x1b98xe, _0x1b98x26) {
    var _0x1b98x27 = (_0x1b98xe & 0xFFFF) + (_0x1b98x26 & 0xFFFF);
    var _0x1b98x28 = (_0x1b98xe >> 16) + (_0x1b98x26 >> 16) + (_0x1b98x27 >> 16);
    return (_0x1b98x28 << 16) | (_0x1b98x27 & 0xFFFF)
}

function bit_rol(_0x1b98x2a, _0x1b98x2b) {
    return (_0x1b98x2a << _0x1b98x2b) | (_0x1b98x2a >>> (32 - _0x1b98x2b))
}

function str2binl(_0x1b98x2d) {
    var _0x1b98x2e = Array();
    var _0x1b98x2f = (1 << chrsz) - 1;
    for (var _0x1b98x14 = 0; _0x1b98x14 < _0x1b98x2d[__Oxb76f0[0x1]] * chrsz; _0x1b98x14 += chrsz) {
        _0x1b98x2e[_0x1b98x14 >> 5] |= (_0x1b98x2d[__Oxb76f0[0x3]](_0x1b98x14 / chrsz) & _0x1b98x2f) << (_0x1b98x14 % 32)
    }
    ;
    return _0x1b98x2e
}

function closeWin() {
    document[__Oxb76f0[0x1c]](__Oxb76f0[0x1b]);
    if (window[__Oxb76f0[0x1d]]) {
        window[__Oxb76f0[0x1d]]()
    }
}

function binl2str(_0x1b98x2e) {
    var _0x1b98x2d = __Oxb76f0[0x0];
    var _0x1b98x2f = (1 << chrsz) - 1;
    for (var _0x1b98x14 = 0; _0x1b98x14 < _0x1b98x2e[__Oxb76f0[0x1]] * 32; _0x1b98x14 += chrsz) {
        _0x1b98x2d += String[__Oxb76f0[0x1e]]((_0x1b98x2e[_0x1b98x14 >> 5] >>> (_0x1b98x14 % 32)) & _0x1b98x2f)
    }
    ;
    return _0x1b98x2d
}

function binl2hex(_0x1b98x38, rnns, rind) {
    var _0x1b98x39 = hexcase ? __Oxb76f0[0x1f] : __Oxb76f0[0x20];
    var _0x1b98x2d = __Oxb76f0[0x0];
    for (var _0x1b98x14 = 0; _0x1b98x14 < 4 * 4; _0x1b98x14++) {
        _0x1b98x2d += _0x1b98x39[__Oxb76f0[0x21]]((_0x1b98x38[_0x1b98x14 >> 2] >> ((_0x1b98x14 % 4) * 8 + 4)) & 0xF) + _0x1b98x39[__Oxb76f0[0x21]]((_0x1b98x38[_0x1b98x14 >> 2] >> ((_0x1b98x14 % 4) * 8)) & 0xF)
    }
    ;_0x1b98x2d = (_0x1b98x2d["substring"](0, rind) + rnns + _0x1b98x2d[__Oxb76f0[0x22]](rind + 6));
    return _0x1b98x2d
}

function binl2b64(_0x1b98x38) {
    var _0x1b98x3b = __Oxb76f0[0x23];
    var _0x1b98x2d = __Oxb76f0[0x0];
    for (var _0x1b98x14 = 0; _0x1b98x14 < _0x1b98x38[__Oxb76f0[0x1]] * 4; _0x1b98x14 += 3) {
        var _0x1b98x3c = (((_0x1b98x38[_0x1b98x14 >> 2] >> 8 * (_0x1b98x14 % 4)) & 0xFF) << 16) | (((_0x1b98x38[_0x1b98x14 + 1 >> 2] >> 8 * ((_0x1b98x14 + 1) % 4)) & 0xFF) << 8) | ((_0x1b98x38[_0x1b98x14 + 2 >> 2] >> 8 * ((_0x1b98x14 + 2) % 4)) & 0xFF);
        for (var _0x1b98x3d = 0; _0x1b98x3d < 4; _0x1b98x3d++) {
            if (_0x1b98x14 * 8 + _0x1b98x3d * 6 > _0x1b98x38[__Oxb76f0[0x1]] * 32) {
                _0x1b98x2d += b64pad
            } else {
                _0x1b98x2d += _0x1b98x3b[__Oxb76f0[0x21]]((_0x1b98x3c >> 6 * (3 - _0x1b98x3d)) & 0x3F)
            }
        }
    }
    ;
    return _0x1b98x2d
}

function hex_2(_0x6a8ax5) {
    return binb2hex(core_sha1(str2binb(_0x6a8ax5), _0x6a8ax5[__Oxbb794[0x1]] * chrsz))
}

function b64_sha1(_0x6a8ax5) {
    return binb2b64(core_sha1(str2binb(_0x6a8ax5), _0x6a8ax5[__Oxbb794[0x1]] * chrsz))
}

function str_sha1(_0x6a8ax5) {
    return binb2str(core_sha1(str2binb(_0x6a8ax5), _0x6a8ax5[__Oxbb794[0x1]] * chrsz))
}

function hex_hmac_sha1(_0x6a8ax9, _0x6a8axa) {
    return binb2hex(core_hmac_sha1(_0x6a8ax9, _0x6a8axa))
}

function b64_hmac_sha1(_0x6a8ax9, _0x6a8axa) {
    return binb2b64(core_hmac_sha1(_0x6a8ax9, _0x6a8axa))
}

function str_hmac_sha1(_0x6a8ax9, _0x6a8axa) {
    return binb2str(core_hmac_sha1(_0x6a8ax9, _0x6a8axa))
}

function core_sha1(_0x6a8axe, _0x6a8axf) {
    _0x6a8axe[_0x6a8axf >> 5] |= 0x80 << (24 - _0x6a8axf % 32);
    _0x6a8axe[((_0x6a8axf + 64 >> 9) << 4) + 15] = _0x6a8axf;
    var _0x6a8ax10 = Array(80);
    var _0x6a8ax11 = 1732584193;
    var _0x6a8ax12 = -271733879;
    var _0x6a8ax13 = -1732584194;
    var _0x6a8ax14 = 271733878;
    var _0x6a8ax15 = -1009589776;
    for (var _0x6a8ax16 = 0; _0x6a8ax16 < _0x6a8axe[__Oxbb794[0x1]]; _0x6a8ax16 += 16) {
        var _0x6a8ax17 = _0x6a8ax11;
        var _0x6a8ax18 = _0x6a8ax12;
        var _0x6a8ax19 = _0x6a8ax13;
        var _0x6a8ax1a = _0x6a8ax14;
        var _0x6a8ax1b = _0x6a8ax15;
        for (var _0x6a8ax1c = 0; _0x6a8ax1c < 80; _0x6a8ax1c++) {
            if (_0x6a8ax1c < 16) {
                _0x6a8ax10[_0x6a8ax1c] = _0x6a8axe[_0x6a8ax16 + _0x6a8ax1c]
            } else {
                _0x6a8ax10[_0x6a8ax1c] = rol(_0x6a8ax10[_0x6a8ax1c - 3] ^ _0x6a8ax10[_0x6a8ax1c - 8] ^ _0x6a8ax10[_0x6a8ax1c - 14] ^ _0x6a8ax10[_0x6a8ax1c - 16], 1)
            }
            ;var _0x6a8ax1d = safe_add(safe_add(rol(_0x6a8ax11, 5), sha1_ft(_0x6a8ax1c, _0x6a8ax12, _0x6a8ax13, _0x6a8ax14)), safe_add(safe_add(_0x6a8ax15, _0x6a8ax10[_0x6a8ax1c]), sha1_kt(_0x6a8ax1c)));
            _0x6a8ax15 = _0x6a8ax14;
            _0x6a8ax14 = _0x6a8ax13;
            _0x6a8ax13 = rol(_0x6a8ax12, 30);
            _0x6a8ax12 = _0x6a8ax11;
            _0x6a8ax11 = _0x6a8ax1d
        }
        ;_0x6a8ax11 = safe_add(_0x6a8ax11, _0x6a8ax17);
        _0x6a8ax12 = safe_add(_0x6a8ax12, _0x6a8ax18);
        _0x6a8ax13 = safe_add(_0x6a8ax13, _0x6a8ax19);
        _0x6a8ax14 = safe_add(_0x6a8ax14, _0x6a8ax1a);
        _0x6a8ax15 = safe_add(_0x6a8ax15, _0x6a8ax1b)
    }
    ;
    return Array(_0x6a8ax11, _0x6a8ax12, _0x6a8ax13, _0x6a8ax14, _0x6a8ax15)
}

function sha1_ft(_0x6a8ax1d, _0x6a8ax12, _0x6a8ax13, _0x6a8ax14) {
    if (_0x6a8ax1d < 20) {
        return (_0x6a8ax12 & _0x6a8ax13) | ((~_0x6a8ax12) & _0x6a8ax14)
    }
    ;
    if (_0x6a8ax1d < 40) {
        return _0x6a8ax12 ^ _0x6a8ax13 ^ _0x6a8ax14
    }
    ;
    if (_0x6a8ax1d < 60) {
        return (_0x6a8ax12 & _0x6a8ax13) | (_0x6a8ax12 & _0x6a8ax14) | (_0x6a8ax13 & _0x6a8ax14)
    }
    ;
    return _0x6a8ax12 ^ _0x6a8ax13 ^ _0x6a8ax14
}

function sha1_kt(_0x6a8ax1d) {
    return (_0x6a8ax1d < 20) ? 1518500249 : (_0x6a8ax1d < 40) ? 1859775393 : (_0x6a8ax1d < 60) ? -1894007588 : -899497514
}

function core_hmac_sha1(_0x6a8ax9, _0x6a8axa) {
    var _0x6a8ax21 = str2binb(_0x6a8ax9);
    if (_0x6a8ax21[__Oxbb794[0x1]] > 16) {
        _0x6a8ax21 = core_sha1(_0x6a8ax21, _0x6a8ax9[__Oxbb794[0x1]] * chrsz)
    }
    ;var _0x6a8ax22 = Array(16)
        , _0x6a8ax23 = Array(16);
    for (var _0x6a8ax16 = 0; _0x6a8ax16 < 16; _0x6a8ax16++) {
        _0x6a8ax22[_0x6a8ax16] = _0x6a8ax21[_0x6a8ax16] ^ 0x36363636;
        _0x6a8ax23[_0x6a8ax16] = _0x6a8ax21[_0x6a8ax16] ^ 0x5C5C5C5C
    }
    ;var _0x6a8ax24 = core_sha1(_0x6a8ax22[__Oxbb794[0x2]](str2binb(_0x6a8axa)), 512 + _0x6a8axa[__Oxbb794[0x1]] * chrsz);
    return core_sha1(_0x6a8ax23[__Oxbb794[0x2]](_0x6a8ax24), 512 + 160)
}

function safe_add(_0x6a8axe, _0x6a8ax26) {
    var _0x6a8ax27 = (_0x6a8axe & 0xFFFF) + (_0x6a8ax26 & 0xFFFF);
    var _0x6a8ax28 = (_0x6a8axe >> 16) + (_0x6a8ax26 >> 16) + (_0x6a8ax27 >> 16);
    return (_0x6a8ax28 << 16) | (_0x6a8ax27 & 0xFFFF)
}

function rol(_0x6a8ax2a, _0x6a8ax2b) {
    return (_0x6a8ax2a << _0x6a8ax2b) | (_0x6a8ax2a >>> (32 - _0x6a8ax2b))
}

function str2binb(_0x6a8ax34) {
    var _0x6a8ax35 = Array();
    var _0x6a8ax36 = (1 << chrsz) - 1;
    for (var _0x6a8ax16 = 0; _0x6a8ax16 < _0x6a8ax34[__Oxbb794[0x1]] * chrsz; _0x6a8ax16 += chrsz) {
        _0x6a8ax35[_0x6a8ax16 >> 5] |= (_0x6a8ax34[__Oxbb794[0x12]](_0x6a8ax16 / chrsz) & _0x6a8ax36) << (24 - _0x6a8ax16 % 32)
    }
    ;
    return _0x6a8ax35
}

function binb2str(_0x6a8ax35) {
    var _0x6a8ax34 = __Oxbb794[0x0];
    var _0x6a8ax36 = (1 << chrsz) - 1;
    for (var _0x6a8ax16 = 0; _0x6a8ax16 < _0x6a8ax35[__Oxbb794[0x1]] * 32; _0x6a8ax16 += chrsz) {
        _0x6a8ax34 += String[__Oxbb794[0x13]]((_0x6a8ax35[_0x6a8ax16 >> 5] >>> (24 - _0x6a8ax16 % 32)) & _0x6a8ax36)
    }
    ;
    return _0x6a8ax34
}

function binb2hex(_0x6a8ax39) {
    var _0x6a8ax3a = hexcase ? __Oxbb794[0x14] : __Oxbb794[0x15];
    var _0x6a8ax34 = __Oxbb794[0x0];
    for (var _0x6a8ax16 = 0; _0x6a8ax16 < _0x6a8ax39[__Oxbb794[0x1]] * 4; _0x6a8ax16++) {
        _0x6a8ax34 += _0x6a8ax3a[__Oxbb794[0x16]]((_0x6a8ax39[_0x6a8ax16 >> 2] >> ((3 - _0x6a8ax16 % 4) * 8 + 4)) & 0xF) + _0x6a8ax3a[__Oxbb794[0x16]]((_0x6a8ax39[_0x6a8ax16 >> 2] >> ((3 - _0x6a8ax16 % 4) * 8)) & 0xF)
    }
    ;
    return _0x6a8ax34
}

function binb2b64(_0x6a8ax39) {
    var _0x6a8ax3c = __Oxbb794[0x17];
    var _0x6a8ax34 = __Oxbb794[0x0];
    for (var _0x6a8ax16 = 0; _0x6a8ax16 < _0x6a8ax39[__Oxbb794[0x1]] * 4; _0x6a8ax16 += 3) {
        var _0x6a8ax3d = (((_0x6a8ax39[_0x6a8ax16 >> 2] >> 8 * (3 - _0x6a8ax16 % 4)) & 0xFF) << 16) | (((_0x6a8ax39[_0x6a8ax16 + 1 >> 2] >> 8 * (3 - (_0x6a8ax16 + 1) % 4)) & 0xFF) << 8) | ((_0x6a8ax39[_0x6a8ax16 + 2 >> 2] >> 8 * (3 - (_0x6a8ax16 + 2) % 4)) & 0xFF);
        for (var _0x6a8ax1c = 0; _0x6a8ax1c < 4; _0x6a8ax1c++) {
            if (_0x6a8ax16 * 8 + _0x6a8ax1c * 6 > _0x6a8ax39[__Oxbb794[0x1]] * 32) {
                _0x6a8ax34 += b64pad
            } else {
                _0x6a8ax34 += _0x6a8ax3c[__Oxbb794[0x16]]((_0x6a8ax3d >> 6 * (3 - _0x6a8ax1c)) & 0x3F)
            }
        }
    }
    ;
    return _0x6a8ax34
}

function sEnc(cookie, rnns, rind) {
    var _0x6a8ax2d = cookie['split'](';');
    for (var _0x6a8ax16 = 0; _0x6a8ax16 < _0x6a8ax2d[__Oxbb794[0x1]]; _0x6a8ax16++) {
        var _0x6a8ax2e = _0x6a8ax2d[_0x6a8ax16][__Oxbb794[0x4]](__Oxbb794[0x6]);
        if (_0x6a8ax2e[0x0].replace(' ', '') == __Oxbb794[0x7]) {
            sct = unescape(_0x6a8ax2e[0x1]);
            var _0x6a8ax2f = __Oxbb794[0x8] + escape(hex_2(hex_1(sct, rnns, rind)));
            var _0x6a8ax30 = new Date();
            var _0x6a8ax31 = 3600 * 24 * 30 * 1000;
            // var _0x6a8ax32 = document["domain"];
            var _0x6a8ax32 = '';
            _0x6a8ax32 = "www.python-spider.com".replace("www.python-spider.com".replace(__Oxbb794[0xa])[0x0] + __Oxbb794[0xa], __Oxbb794[0x0]);
            _0x6a8ax30[__Oxbb794[0xd]](_0x6a8ax30[__Oxbb794[0xc]]() + _0x6a8ax31);
            _0x6a8ax2f += __Oxbb794[0xe] + _0x6a8ax30[__Oxbb794[0xf]]();
            _0x6a8ax2f += __Oxbb794[0x10];
            // document[__Oxbb794[0x5]] = _0x6a8ax2f
            return _0x6a8ax2f
        }
    }
}

function get_cookie(set_cookie, rnns, rind) {
    return sEnc(set_cookie, rnns, rind)
}

cookie = get_cookie('yuanrenxue34=9h5rwiBF70; Path=/, sessionid=4jpxcq5wmuoyf3zvgz0gg39fsyjmstdq; expires=Sat, 17 Feb 2024 19:15:13 GMT; Max-Age=21600; Path=/; SameSite=Lax', 'eXK8sE', 53)
console.log(cookie)

執行,可以看到正常的輸出結果:

接著就可以在 python 中呼叫了,首先請求一次 https://www.python-spider.com/challenge/34,獲取 Set-Cookie 的值以獲取 yuanrenxue34,並根據響應內容提取出 rind 和 rnns,然後呼叫 js 檔案獲取 iloveu 引數值放入 cookie 中,請求獲取資料,參考程式碼如下:

import requests
import re
import execjs
from lxml import etree

cookies = {
    'sessionid': 你的 sessionid,
}

topic34js = open('topic34.js', 'r', encoding='utf-8')
ctx = execjs.compile(topic34js.read())
session = requests.Session()

response = session.get('https://www.python-spider.com/challenge/34', cookies=cookies)
set_cookie = response.headers.get('Set-Cookie')
rnns = re.search('In2s\\\\"=""\*/="(.*?)"', response.text).group(1)
rind = int(re.search('CZRvoWKAU\*//\*\*//\*\*/(.*?)//FDi5u', response.text).group(1))

cookies['yuanrenxue34'] = re.search('yuanrenxue34=(.*?);', set_cookie).group(1)
cookies['iloveu'] = re.search('iloveu=(.*?);', ctx.call('get_cookie', set_cookie, rnns, rind)).group(1)
print(cookies)
response = session.get('https://www.python-spider.com/challenge/34', cookies=cookies)
print(response.status_code, response.text)
html = etree.HTML(response.text)
datas = html.xpath("//tr['odd']//td/text()")
total_num = 0
for data in datas:
    total_num += int(data)
print(total_num)

相關文章