国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

爬蟲逆向?qū)崙?zhàn)(六)--猿人學(xué)第四題

這篇具有很好參考價(jià)值的文章主要介紹了爬蟲逆向?qū)崙?zhàn)(六)--猿人學(xué)第四題。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、數(shù)據(jù)接口分析

主頁地址:猿人學(xué)第四題

1、抓包

通過抓包可以發(fā)現(xiàn)數(shù)據(jù)接口是api/match/4
爬蟲逆向?qū)崙?zhàn)(六)--猿人學(xué)第四題,爬蟲逆向?qū)崙?zhàn),爬蟲

2、判斷是否有加密參數(shù)

  1. 請求參數(shù)是否加密?
  2. 請求頭是否加密?
  3. 響應(yīng)是否加密?
    響應(yīng)數(shù)據(jù)無加密,但是返回的卻是html代碼
  4. cookie是否加密?

二、處理位置定位

1、看啟動(dòng)器

查看啟動(dòng)器發(fā)現(xiàn)有一個(gè)request調(diào)用堆棧,點(diǎn)進(jìn)去查看 爬蟲逆向?qū)崙?zhàn)(六)--猿人學(xué)第四題,爬蟲逆向?qū)崙?zhàn),爬蟲
可以發(fā)現(xiàn)此處是ajax請求,對響應(yīng)的處理就在下方成功的回調(diào)函數(shù)中,通過分析可以得出,對響應(yīng)內(nèi)容的處理是根據(jù)響應(yīng)中的keyvalue進(jìn)行處理生成一個(gè)j_key,然后將響應(yīng)中class屬性為j_key的圖片隱藏,將剩下的其他圖片進(jìn)行展示。
爬蟲逆向?qū)崙?zhàn)(六)--猿人學(xué)第四題,爬蟲逆向?qū)崙?zhàn),爬蟲

三、獲取數(shù)據(jù)

將定位到的j_key生成代碼扣出來,然后缺啥補(bǔ)啥,將代碼補(bǔ)全。
源代碼:

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


function safe_add(x, y) {
    var lsw = (x & 0xFFFF) + (y & 0xFFFF);
    var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
    return (msw << 16) | (lsw & 0xFFFF)
}

function bit_rol(num, cnt) {
    return (num << cnt) | (num >>> (32 - cnt))
}

function md5_cmn(q, a, b, x, s, t) {
    return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
}

function md5_ff(a, b, c, d, x, s, t) {
    return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)
}

function md5_gg(a, b, c, d, x, s, t) {
    return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)
}

function md5_hh(a, b, c, d, x, s, t) {
    return md5_cmn(b ^ c ^ d, a, b, x, s, t)
}

function md5_ii(a, b, c, d, x, s, t) {
    return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
}

function str2binl(str) {
    var bin = Array();
    var mask = (1 << chrsz) - 1;
    for (var i = 0; i < str.length * chrsz; i += chrsz)
        bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << (i % 32);
    return bin
}

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

function binl2hex(binarray) {
    var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
    var str = "";
    for (var i = 0; i < binarray.length * 4; i++) {
        str += hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8 + 4)) & 0xF) + hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8)) & 0xF)
    }
    return str
}


function hex_md5(s) {
    return binl2hex(core_md5(str2binl(s), s.length * chrsz))
}

function get_key(key, value) {
    var j_key = hex_md5(btoa(key + value).replace(/=/g, ''))
    return j_key
}

此時(shí),雖然我們已經(jīng)可以生成j_key了,但是還有一個(gè)難題,就是數(shù)據(jù)是圖片,如何才能獲取到圖片拼接的數(shù)字。
原本我是準(zhǔn)備將base64轉(zhuǎn)成圖片,然后識(shí)別圖片中的數(shù)字進(jìn)行拼接然后相加,但是有一個(gè)問題就是響應(yīng)返回的圖片中會(huì)使用style="left:11.5px"重新排序,我沒有想到很好的辦法去處理。最后我就只能是將響應(yīng)的內(nèi)容寫入到html文件中進(jìn)行展示,然后自己再去計(jì)算展示出的所有數(shù)字的和。如果有大佬有好的辦法,可以私信或者評(píng)論教我一下。
python源代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-653457.html

"""
Email:912917367@qq.com
Date: 2023/8/1 11:08
"""
import execjs
import lxml.etree
from lxml.html import tostring
import requests


headers = {
    "authority": "match.yuanrenxue.cn",
    "referer": "https://match.yuanrenxue.cn/match/4",
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36",
}
url = "https://match.yuanrenxue.cn/api/match/4"

with open('get_key.js', 'r', encoding='utf-8') as f:
    js_obj = execjs.compile(f.read())


for page in range(1, 6):
    params = {
        "page": str(page)
    }
    if page >= 4:
        headers['user-agent'] = 'yuanrenxue.project'
    response = requests.get(url, headers=headers, params=params)

    data = response.json()
    key = js_obj.call('get_key', data['key'], data['value'])

    html_obj = lxml.etree.HTML(data['info'])

    td_list = html_obj.xpath('//td')
    with open('img.html', 'a') as f:
        f.write('<tr>')
        for td_index, td in enumerate(td_list):
            f.write('<td>')
            img_list = td.xpath('./img')
            for img_index, img in enumerate(img_list):
                if key in img.xpath('./@class')[0]:
                    continue
                img_str = tostring(img, encoding="utf-8").decode("utf-8")
                f.write(img_str)
            f.write('</td>')
        f.write('</tr>')

到了這里,關(guān)于爬蟲逆向?qū)崙?zhàn)(六)--猿人學(xué)第四題的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • js逆向第16例:猿人學(xué)第12題入門級(jí)js

    js逆向第16例:猿人學(xué)第12題入門級(jí)js

    任務(wù):抓取這5頁的數(shù)字,計(jì)算加和并提交結(jié)果 既然是入門級(jí),那肯定很簡單了 控制臺(tái)查看請求數(shù)據(jù), m 值應(yīng)該就是關(guān)鍵參數(shù)了 進(jìn)入堆棧 馬上定位到了 m 值 \\\"m\\\": btoa(\\\'yuanrenxue\\\' + window.page) 如下圖:btoa就是base64編碼,window.page就是頁碼

    2024年02月02日
    瀏覽(23)
  • Python爬蟲猿人學(xué)逆向系列——第六題

    Python爬蟲猿人學(xué)逆向系列——第六題

    題目:采集全部5頁的彩票數(shù)據(jù),計(jì)算全部中獎(jiǎng)的總金額(包含一、二、三等獎(jiǎng)) 地址:https://match.yuanrenxue.cn/match/6 本題比較簡單,只是容易踩坑。話不多說請看分析。 兩個(gè)參數(shù),一個(gè)m一個(gè)f,與cookie無關(guān),但是這里會(huì)遇到第一個(gè)坑,在響應(yīng)數(shù)據(jù)中。 可以發(fā)現(xiàn)只有三等獎(jiǎng)的金

    2024年02月11日
    瀏覽(18)
  • JS逆向之猿人學(xué)爬蟲第20題-wasm

    JS逆向之猿人學(xué)爬蟲第20題-wasm

    第20題被置頂?shù)搅说?頁,題目難度 寫的是中等 算法很簡單,就一個(gè)標(biāo)準(zhǔn)的md5算法,主要是鹽值不確定, 而鹽值就在wasm里面,可以說難點(diǎn)就在于wasm分析 加密的就是sign,sign長度是32位,這個(gè)盲猜可能就是個(gè)md5 直接跟棧的request發(fā)包位置 進(jìn)去之后可以清晰的看到sign生成位置

    2024年02月15日
    瀏覽(28)
  • JS逆向系列之猿人學(xué)爬蟲第8題-驗(yàn)證碼-圖文點(diǎn)選

    JS逆向系列之猿人學(xué)爬蟲第8題-驗(yàn)證碼-圖文點(diǎn)選

    本題的難點(diǎn)就在于驗(yàn)證碼的識(shí)別,沒啥js加密,只要識(shí)別對了攜帶坐標(biāo)就給返回?cái)?shù)據(jù) 回過頭來看驗(yàn)證碼 這里復(fù)雜的字體比較多,人看起來都有點(diǎn)費(fèi)勁(感覺可能對紅綠色盲朋友不太又好)#x

    2024年02月13日
    瀏覽(22)
  • JS逆向系列之猿人學(xué)爬蟲第14題-備而后動(dòng)-勿使有變

    JS逆向系列之猿人學(xué)爬蟲第14題-備而后動(dòng)-勿使有變

    題目難度標(biāo)的是困難,主要難在js混淆部分。 初始抓包有無限debugger反調(diào)試,可以直接hook 函數(shù)構(gòu)造器過掉無限debugger

    2024年02月13日
    瀏覽(29)
  • 【猿人學(xué)WEB題目專解】猿人學(xué)第18題

    【猿人學(xué)WEB題目專解】猿人學(xué)第18題

    ??據(jù)說,看我文章時(shí) 關(guān)注、點(diǎn)贊、收藏 的 帥哥美女們 心情都會(huì)不自覺的好起來。 前言: ??作者簡介:大家好我是 user_from_future ,意思是 “ 來自未來的用戶 ” ,寓意著未來的自己一定很棒~ ?個(gè)人主頁:點(diǎn)我直達(dá),在這里肯定能找到你想要的~ ??專欄介紹:猿人學(xué)WEB題

    2024年02月16日
    瀏覽(43)
  • 【猿人學(xué)WEB題目專解】猿人學(xué)第6題

    【猿人學(xué)WEB題目專解】猿人學(xué)第6題

    ??據(jù)說,看我文章時(shí) 關(guān)注、點(diǎn)贊、收藏 的 帥哥美女們 心情都會(huì)不自覺的好起來。 前言: ??作者簡介:大家好我是 user_from_future ,意思是 “ 來自未來的用戶 ” ,寓意著未來的自己一定很棒~ ?個(gè)人主頁:點(diǎn)我直達(dá),在這里肯定能找到你想要的~ ??專欄介紹:猿人學(xué)WEB題

    2024年02月08日
    瀏覽(20)
  • 吾愛2023新年紅包題第四題

    吾愛2023新年紅包題第四題

    吾愛論壇2023年春節(jié)紅包安卓題,隨便玩一玩; https://www.52pojie.cn/thread-1738015-1-1.html 第四題:https://www.52pojie.cn/home.php?mod=taskdo=viewid=23 首先我們下載后,打開apk看下界面提示情況; 看界面是用到了, 你的吾愛uid 以及計(jì)算出來的flag 進(jìn)行效驗(yàn); 先定位到方法,我們又看到,用到

    2024年02月12日
    瀏覽(21)
  • 軟件設(shè)計(jì)師_算法——下午題(第四題)

    軟件設(shè)計(jì)師_算法——下午題(第四題)

    解析:分析題干:queen[i]表示第i個(gè)皇后的位置,表示 第i個(gè)皇后放置在第i行的第queen[i]列 ; (1): queen[i]==queen[j] ;這里的需求是檢查已擺放的皇后是否在同一列或者是同一斜線上,||后面的abs(queen[i]-queen[j]==(j-i))查看已擺放的皇后是否在同一斜線上,代碼的意思是,第i個(gè)皇

    2024年02月08日
    瀏覽(21)
  • CCF-CSP 30次 第四題【電力網(wǎng)絡(luò)】

    20分,六重循環(huán)看不懂 計(jì)算機(jī)軟件能力認(rèn)證考試系統(tǒng)

    2024年02月09日
    瀏覽(83)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包