首页 > 其他分享 >猿人学第三题 罗生门

猿人学第三题 罗生门

时间:2024-01-08 14:07:36浏览次数:23  
标签:罗生门 第三 window session let jssm page match 猿人


思路

使用开发者工具进行抓包,验证数据请求的方式是什么,这里推荐大家使用浏览器自带的工具。

猿人学第三题 罗生门_bc

我们发现每次的翻页请求都会有一个jssm请求,这里我们先记录一下这个情况,现在观察一下cookie是否有变化。

 

猿人学第三题 罗生门_Windows_02

 

猿人学第三题 罗生门_网络爬虫_03

这个实际上没有发生变化。参数也没有加密,所以直接调试一下源码,这边由于是ajax所以直接xhr分析一下。

 提取这个request中的代吗看一下

猿人学第三题 罗生门_js逆向_04

window.url='/api/match/3';
request = function() {
    var list = {
        "page": window.page,
    };
    $.ajax({
        url: window.url,
        dataType: "json",
        async: false,
        data: list,
        type: "GET",
        beforeSend: function(request) {
            (function() {
                var httpRequest = new XMLHttpRequest();
                var url = '/jssm';
                httpRequest.open('POST', url, false);
                httpRequest.send()
            }
            )()
        },
        success: function(data) {
            let name = ['梦琪', '忆柳', '之桃', 'bai慕青', '问兰', 'du尔岚', '元香', '初夏', '沛菡', '傲珊zhi', '曼文', '乐菱', 'dao痴珊', '恨玉', '惜文', '香寒', '新柔', '语蓉', '海安', '夜蓉', '涵柏', '水桃', '醉蓝', '春儿', '语琴', '从彤', '傲晴', '语兰', '又菱', '碧彤', '元霜', '怜梦', '紫寒', '妙彤', '曼易', '南莲', '紫翠', '雨寒', '易烟', '如萱', '若南', '寻真', '晓亦', '向珊', '慕灵', '以蕊', '寻雁', '映易', '雪柳', '孤岚', '笑霜', '海云', '凝天', '沛珊', '寒云', '冰旋', '宛儿', '绿真', '盼儿', '晓霜', '碧凡', '夏菡', '曼香', '若烟', '半梦', '雅绿', '冰蓝', '灵槐', '平安', '书翠', '翠风', '香巧', '代云', '梦曼', '幼翠', '友巧', '听寒', '梦柏', '醉易', '访旋', '亦玉', '凌萱', '访卉', '怀亦', '笑蓝', '春翠', '靖柏', '夜蕾', '冰夏', '梦松', '书雪', '乐枫', '念薇', '靖雁', '寻春', '恨山', '从寒', '忆香', '觅波', '静曼', '凡旋', '以亦', '念露', '芷蕾', '千兰', '新波', '代真', '新蕾', '雁玉', '冷卉', '紫山', '千琴', '恨天', '傲芙', '盼山', '怀蝶', '冰兰', '山柏', '翠萱', '恨松', '问旋', '从南', '白易', '问筠', '如霜', '半芹', '丹珍', '冰彤', '亦寒', '寒雁', '怜云', '寻文', '乐丹', '翠柔', '谷山', '之瑶', '冰露', '尔珍', '谷雪', '乐萱', '涵菡', '海莲', '傲蕾', '青槐', '冬儿', '易梦', '惜雪', '宛海', '之柔', '夏青', '亦瑶', '妙菡', '春竹', '痴梦', '紫蓝', '晓巧', '幻柏', '元风', '冰枫', '访蕊', '南春', '芷蕊', '凡蕾', '凡柔', '安蕾', '天荷', '含玉', '书兰', '雅琴', '书瑶', '春雁', '从安', '夏槐', '念芹', '怀萍代曼', '幻珊', '谷丝', '秋翠', '白晴', '海露', '代荷', '含玉', '书蕾', '听白', '访琴', '灵雁', '秋春', '雪青', '乐瑶', '含烟', '涵双', '平蝶', '雅蕊', '傲之', '灵薇', '绿春', '含蕾', '从梦', '从蓉', '初丹。听兰', '听蓉', '语芙', '夏彤', '凌瑶', '忆翠', '幻灵', '怜菡', '紫南', '依珊', '妙竹', '访烟', '怜蕾', '映寒', '友绿', '冰萍', '惜霜', '凌香', '芷蕾', '雁卉', '迎梦', '元柏', '代萱', '紫真', '千青', '凌寒', '紫安', '寒安', '怀蕊', '秋荷', '涵雁', '以山', '凡梅', '盼曼', '翠彤', '谷冬', '新巧', '冷安', '千萍', '冰烟', '雅阳', '友绿', '南松', '诗云', '飞风', '寄灵', '书芹', '幼蓉', '以蓝', '笑寒', '忆寒', '秋烟', '芷巧', '水香', '映之', '醉波', '幻莲', '夜山', '芷卉', '向彤', '小玉', '幼南', '凡梦', '尔曼', '念波', '迎松', '青寒', '笑天', '涵蕾', '碧菡', '映秋', '盼烟', '忆山', '以寒', '寒香', '小凡', '代亦', '梦露', '映波', '友蕊', '寄凡', '怜蕾', '雁枫', '水绿', '曼荷', '笑珊', '寒珊', '谷南', '慕儿', '夏岚', '友儿', '小萱', '紫青', '妙菱', '冬寒', '曼柔', '语蝶', '青筠', '夜安', '觅海', '问安', '晓槐', '雅山', '访云', '翠容', '寒凡', '晓绿', '以菱', '冬云', '含玉', '访枫'];
            let com_name = ['元优', '多乾', '巨久', '德祥', '洪仁', '乾富', '隆安', '鑫德', '乾广', '伟复', '耀顺', '同福', '东昌', '洪亚', '盛欣', '元优', '耀佳', '昌益', '欣丰', '乾美', '春信', '贵丰', '东弘', '同富', '飞庆', '万鼎', '隆高', '久协', '德高', '正禄', '如福', '圣耀', '洪昇', '合寿', '宏禄', '如通', '公盈', '春谦', '皇贵', '伟荣', '猿人学', '破釜成', '寒冰射手', '冰冰凉', '凉冰冰', '元优', '多乾', '巨久', '德祥', '洪仁', '乾富', '隆安', '鑫德', '乾广', '伟复', '耀顺', '同福', '东昌', '洪亚', '盛欣', '元优', '耀佳', '昌益', '欣丰', '乾美', '春信', '贵丰', '东弘', '同富', '飞庆', '万鼎', '隆高', '久协', '德高', '正禄', '如福', '圣耀', '洪昇', '合寿', '宏禄', '如通', '公盈', '春谦', '皇贵', '伟荣', '猿人学', '破釜成', '寒冰射手', '冰冰凉', '凉冰冰'];
            data = data.data;
            let html = `<table class="table"><tr><th>申请/注册号</th><th>申请日期</th><th>商标申请人</th><th>申请公司名</th></tr>`;
            let a = `<tr><td class="lwtd0">3472509</td><td class="lwtd0">~申请~</td><td class="lwtd0">马梦启</td><td class="lwtd0">东莞市协和粘胶有限公司</td></tr>`;
            if (window.page) {} else {
                window.page = 1
            }
            let op = 1;
            $.each(data, function(index, val) {
                let dat_year = 2000 + window.page;
                let dat_mou = window.page * 2;
                let dat_day = window.page * 5 + op;
                let dat_result = dat_year + '年' + dat_mou + '月' + dat_day + '日';
                let b = a.replace('3472509', val.value).replace('~申请~', dat_result).replace('马梦启', name[op * window.page]).replace('东莞市协和粘胶有限公司', com_name[op * window.page] + '科技发展公司');
                html += b;
                op += 1
            });
            $('.buwyqrs').text('').append(html + '</table>')
        },
        complete: function() {},
        error: function() {
            alert('数据加载失败,您的网络环境可能不太支持这道题目。请您关闭所有抓包工具后重试。如果还不行请加群反馈问题。您可以在此期间可进行其他题目的尝试');
            alert('您可以扫描二维码加入交流群反馈问题。相遇只为更好~,期待与您的见面');
            $('.page-message').eq(0).addClass('active');
            $('.page-message').removeClass('active');
            window.location.href = "http://match.yuanrenxue.com/list";
        }
    })
}
;
request()

 我们发现,这段代码中httpRequest.send()之前会先请求一次/jssm,这就是为什么我们每次翻页会出现一个jssm。那么,我们试一下不请求jssm的时候会返回什么?

猿人学第三题 罗生门_html_05

返回的是这段js代码,我们直接复制在控制台打开看一下这个是什么

 

猿人学第三题 罗生门_网络爬虫_06

当你多试几次,或者直接子在eval中输出一下返回值你会发现这是一个无限debugger的过程,并且这段信息对我们这个问题是没有帮助的,所以这里我们可以知道,这是我们请求参数出现问题导致的结果。我们对比一下

import requests


url = "https://match.yuanrenxue.cn/api/match/3?page=2"

# 直接请求看一下返回的表头

print(requests.get(url).headers)

猿人学第三题 罗生门_Windows_07

我们发现返回的表头是这个和上面请求成功的表头对比,少了session-id

 

猿人学第三题 罗生门_网络爬虫_08

那么问题这个表头的添加过程应该是请求jssm的过程中加入的。所以请求jssm观察返回

 没有返回session-id,这里我们试着加一些cookie

猿人学第三题 罗生门_Windows_09

这边有一个细节问题,使用request的时候并不能成功获取道请求,使用session的话确实可以的,原因就是request中会自己进行排序请求头,打乱了原先的。

import requests

session = requests.session()

session.headers = {
    'Host': 'match.yuanrenxue.cn',
    'Connection': 'keep-alive',
    'Content-Length': '0',
    'sec-ch-ua': '"Chromium";v="110", "Not A(Brand";v="24", "Google Chrome";v="110"',
    'sec-ch-ua-mobile': '?0',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36',
    'sec-ch-ua-platform': '"Windows"',
    'Accept': '*/*',
    'Origin': 'https://match.yuanrenxue.cn',
    'Sec-Fetch-Site': 'same-origin',
    'Sec-Fetch-Mode': 'cors',
    'Sec-Fetch-Dest': 'empty',
    'Referer': 'https://match.yuanrenxue.cn/match/3',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'cookie': 'Hm_lvt_9bcbda9cbf86757998a2339a0437208e=1680872730; Hm_lvt_c99546cf032aaa5a679230de9a95c7db=1680872730; tk=-5150129943585824243; sessionid=oq9hvhsahjlotanjvu9mxha0fakbierb; Hm_lpvt_9bcbda9cbf86757998a2339a0437208e=1680873632; Hm_lpvt_c99546cf032aaa5a679230de9a95c7db=1680874330',
}
print(session.post('https://match.yuanrenxue.cn/jssm').headers)

 

猿人学第三题 罗生门_网络爬虫_10

出现这个之后我们在进行请求数据,发现是可以成功的,所以直接循环即可,只要每次请求翻页的时候先请求依次jssm就行

import requests
session = requests.session()
session.headers = {
    'Content-Length': '0',
    'Accept': '*/*',
    'Referer': 'https://match.yuanrenxue.cn/match/3',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Cookie': 'sessionid=oq9hvhsahjlotanjvu9mxha0fakbierb',
}

for i in range(1, 6):
    url = f"https://match.yuanrenxue.com/api/match/3?page={i}"
    session.post('https://match.yuanrenxue.cn/jssm')
    print(session.get(url).text)

标签:罗生门,第三,window,session,let,jssm,page,match,猿人
From: https://blog.51cto.com/u_16426526/9143889

相关文章

  • 猿人学12 13 简单的js逆向
    解题过程通过网络抓包工具找到请求页 观察参数,我们会发现中间有一个m是被加密过的由于请求是ajax请求直接进行xhr断点找到m被加密的位置我们发现他的加密是使用btoa函数将页数和yuanrenxue结合加密的。而这个函数在js中是一个内置函数,是通过编码的方式进行加密,所以只需要在js文件......
  • 猿人学第一题 js混淆 双重加密(详解)
    当我们点击分页的时候可以确定这个请求过程是ajax请求,所以直接使用抓包工具找到储存信息的请求。找到这个请求之后,我们明显发现?后面的参数m是一个加密过的由于这个请求属于ajax请求,现在我们可以直接使用xhr断点调试找到位置打上断电之后直接分页请求。进入调试直接在右边堆栈中开......
  • 基于FPGA的数字钟设计---第三版---郝旭帅电子设计团队
    本篇为各位朋友介绍基于FPGA的数字钟设计---第三版。功能说明:在数码管上面显示时分秒(共计六个数码管,前两个显示小时;中间两个显示分钟;最后两个显示秒)。利用按键可以切换24/12小时制(默认24小时制)。led1的亮灭表示24小时制(亮)还是12小时制(灭)。led2的亮灭表示上午(亮)还是下......
  • 第三届陕西省大学生网络安全技能大赛部分WriteUp
    Geek精神战队WriteUp(撰写完成后导出为pdf文件提交至平台)微信公众号:Geek_Team网络建设与运维-网络安全信息安全管理与评估这次的CTF题目还是有点难度的,也没有拿到特别好的成绩(最后半小时被冲烂了),此WP仅供学习参考,大佬勿喷。排名战队名称:第27名解题思路WEBEzRCE<?phperr......
  • 微信小程序直播(二):如何使用第三方直播插件快速实现企业直播间
    ZEGO微信小程序直播SDK可以在微信小程序中提供实时音视频直播服务,从而实现电商直播/在线教育/在线问诊/视频客服等各种业务场景。但是由于微信小程序的官方限制,在某些场景下需要额外使用ZEGO提供的小程序直播插件才能实现实时音视频直播功能。本节将介绍需要使用与不需要使用Z......
  • (03)包Package第三方控件安装
     安装第三方控件/包01]安装IDE窗口合并包anchordockingdsgn.lpk02]安装Zconnetion包01]安装IDE窗口合并包anchordockingdsgn.lpkD:\lazarus\components\anchordocking\design\anchordockingdsgn.lpk 一定要选design目录下的anchordockingdsgn.lpk包安装后重启IDE,即可看到Dephi1......
  • 第三章 铺垫
    徐潇坐在了教室里准备好开始上课。今天他会看见几乎所有主课的老师,他满怀期待的想象着老师们会是什么样子。“我就不必自我介绍了吧?”班主任张超是物理老师,也是这天第一节课的老师。“不如,我先给你们讲讲高中物理怎么学吧。”班级内开始骚动,不知道是想听还是不想听。反正,徐潇不喜......
  • [软件测试] 第三部分 黑盒测试
    目录软件测试期末复习系列课件知识点整合:软件测试基础白盒测试黑盒测试PTA习题汇总:软件测试基础白盒测试-逻辑覆盖测试白盒测试-基本路径测试白盒测试-静态测试黑盒测试-等价类划分黑盒测试-边界值测试黑盒测试-场景法概念与定义黑盒测试:又称功能测试、数据......
  • 1-1-04 VIVADO设置VSCODE为第三方编译器
    使用第三方编辑工具可以让开发代码变的更加高效,vscode是非常好用的第三方编辑器,下面我们演示如何vivado中设置vscode为第三方编译器双击打开vivado程序点击设置选择代码编译器"TextEditor"选择编辑器,里面包含Notepad++等各类编译器,但是我们要设置的VSCODE并不包含在里面......
  • 对于第三方接口调用的模板
    1.需要一个基础的Controller,用于读取配置文件里面的信息,比如第三方地址等,还有生成一个HttpPost,用于调用publicclassBaseController{/**appId(对应第三方系统的appId)*/@Value(otherSystem.appId)protectedstringappId;/**signId(对应第三方系......