Python爬虫猿人学逆向系列——第六题

这篇具有很好参考价值的文章主要介绍了Python爬虫猿人学逆向系列——第六题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目:采集全部5页的彩票数据,计算全部中奖的总金额(包含一、二、三等奖)

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

地址:https://match.yuanrenxue.cn/match/6

本题比较简单,只是容易踩坑。话不多说请看分析。

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

两个参数,一个m一个f,与cookie无关,但是这里会遇到第一个坑,在响应数据中。

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

可以发现只有三等奖的金额,并没有一等奖和二等奖的金额。所以我们需要找到三者的关系。直接来到source中查看。

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

直接搜索value,一共17个结果,一个一个观察。在第12个时,其相关的内容。

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

这里意思是总金额为三等奖的24倍,具体是不是这样呢,我们来验证一下。

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

还真是,那么就是说总中奖金额就是总三等奖金额的24倍。第一个坑解决。接下来开始逆向参数,刚刚已经知道了需要的参数就两个,m和q,传书的是parmas参数,所以我们直接来跟栈。

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

跟到请求时的栈,代码非常简单,如下:

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

找到之后直接打上断点,先看m的值。

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

这里就是入口函数,可以看到当window.o的值大于等于6的时候就会重新加载页面,那估计这个window.o可能是会增加的,并且有可能和页数有关。

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

现在它的值为1,访问下一页看看。

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

果然,变成2了,那也就是说我们在本地运行的时候他不可能大于等于6,因为我们最多就循环五次爬个五页,根本不说手抖戳它这么多下。所以这里的代码我们就可以稍微简化一下不要r函数了,直接一步到位到z函数。

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

z函数其实熟悉js的话一看就知道这就是webpack的调用的方式。翻到最上方

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

果然,就是一个webpack,那还不简单,模块加载器如此的标准,我都不好意思去删删改改了,直接全部copy。接下来就调用z函数看看会出现什么样的问题了。

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

window没有定义,那我们就给他定义一个window。在最开头加上一个var window = global;然后再执行,就会发现一样的错误,这个时候大家就会发现了,报的是window.o = 1这个位置的window没有定义。那问题来了,大家ctrl+f搜索看看,这代码里面有没有window.o呢?答案是没有。

所以,window.o在肯定是在代码中,至于为什么搜不到,那当然就是被混淆了,所以我们就来看看混淆的代码,就在最开头的位置,一个很明显的AA混淆,将它还原一下,这种混淆由专门的工具还原,手动还原的话就直接去掉最后的括号然后执行就可以了。

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

去掉最后的括号后可以看到这混淆的代码就是一个匿名函数,这个函数的逻辑就是给window.o进行赋值,值为1,所以我们将这段混淆代码替换成window.o = 1就可以了。

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

接下来就是下一个错误了,关键词ASN1,这个相当于也是考了一下对js的熟悉程度,就看大家平时经验的积累了,ASN1就是一个js的解码器,它能够解码任何有效的base64的编码或者十六进制编码的DER或BER结构,这个玩意儿在浏览器中一般都是存在的,但问题是nodejs不存在啊。所以,既然这个问题出现了,那肯定就是代码中出现了nodejs无法解码的存在了,那我们就来慢慢找一下这些代码都在什么地方。一直翻一直翻。

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

找到了,1161行,大家和我的误差应该就几行的误差,自己找很废时间,反正我眼睛看瞎了已经。这很明显又是一段混淆代码,jsfuck的混淆,老规矩,还原一下。直接全部复制到console中执行一下看看结果是什么。

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

就是一个false…那就直接替换了吧。再执行代码,会发现还是这个错误。

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

那证明这里面可能还有,已经找到过一次有经验了,知道了是jsfuck混淆,那我们就搜一下特殊符号![

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

果然,又来了。直接还原替换

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

啥也不是,那就直接删掉。然后再执行,还是会报了这个错误,但是这个时候代码中已经没有混淆代码了,那问题来了,什么原因导致的呢,定位到报错的2559行,看下能不能删除这个逻辑?

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

好吧,根本删不掉,关联度太高。那问题来了,从这里来看的话ASN1是在本地赋值进去的,那么就是说就算本地nodejs本身没有的话这里应该也赋值进去了,为啥还会报这样的错呢?那就是说window.ASN1压根没有去赋值,要么就是直接没有window了。那就有点意思了,我们来搜索一下window。

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

一共是14个,但是…webpack里面那个window是来捣乱的吧。前面先用了window.o要我们先赋值了,你自执行里面又要置空?这不闹呢嘛?直接删掉。

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

完事,直接出结果。这里其实就涉及的是浏览器的环境和nodejs环境的不同,在浏览器中window是不能被重新赋值的,所以webpack中的这个置空并没有任何意义,但是在nodejs中就不一样了,window可以被重新赋值,因此就直接导致了上方我们看到的错误信息了。

搞定之后我们来对比一下浏览器中的值和本地执行的结果是否能够匹配上了。将浏览器中传入的参数复制下来运行一下(刷新了下页面重新获取的两个参数值)。

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

两个结果完全一致,那么到这里参数m就完成了。

接下来就是q参数,q参数从逻辑来看

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

就是其拼接出来的格式就是1-1692867522000|这样的,但是这里需要注意,由于我们会话并没有保持,相当于每一次都是一个新的请求,同时浏览器中window.o能够每次执行js代码的时候自增,但本地可不会,所以我们就按照每次都是全新的请求来实现参数q,如果是浏览器中那样的格式的话最终会将前面的值拼接起来,如下:

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

但我们本地的话就不能再拼接了,否则是会触发这个页面的风控的,接下来就给大家看一下这两种情况在本地的时候的结果,一个能够成功获取值,一个则触发风控。先来写一个js代码的入口函数。

function run(o) {
    t = Date.parse(new Date())
    res = z(t, o);
    return {
        'm': res,
        't': t,
    }
}

第一种情况,触发风控。

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

这就是按照浏览器模式来实现q值时的结果,所以直接全新请求即可,不用拼接前面的值。

Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

最后将所有的value加起来再乘以24就获取到正确答案了,答案为6883344
Python爬虫猿人学逆向系列——第六题,猿人学竞赛题,爬虫,python,ajax

完整代码请转https://gitee.com/shuailiuquan/spider-code/tree/master文章来源地址https://www.toymoban.com/news/detail-672769.html

到了这里,关于Python爬虫猿人学逆向系列——第六题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 爬虫逆向实战(六)--猿人学第四题

    主页地址:猿人学第四题 1、抓包 通过抓包可以发现数据接口是api/match/4 2、判断是否有加密参数 请求参数是否加密? 无 请求头是否加密? 无 响应是否加密? 响应数据无加密,但是返回的却是html代码 cookie是否加密? 无 1、看启动器 查看启动器发现有一个 request 调用堆栈,

    2024年02月12日
    浏览(43)
  • JS逆向之猿人学爬虫第20题-wasm

    第20题被置顶到了第1页,题目难度 写的是中等 算法很简单,就一个标准的md5算法,主要是盐值不确定, 而盐值就在wasm里面,可以说难点就在于wasm分析 加密的就是sign,sign长度是32位,这个盲猜可能就是个md5 直接跟栈的request发包位置 进去之后可以清晰的看到sign生成位置

    2024年02月15日
    浏览(59)
  • web爬虫第五弹 - JS逆向入门(猿人学第一题)

    0- 前言 爬虫是一门需要实战的学问。 而对于初学者来说,要想学好反爬,js逆向则是敲门砖。今天给大家带来一个js逆向入门实例,接下来我们一步一步来感受下入门的逆向是什么样的。该案例选自猿人学练习题。猿人学第一题 1- 拿到需求 进入页面拿到需求我们先不要急着

    2024年02月14日
    浏览(37)
  • 2023 年全国大学生数学建模竞赛题D 题 圈养湖羊的空间利用率思路详解+Python源码(二)

    昨天已经将E题第一二问的详解和思路源码都写了出来,大家如果想从E题下手的话推荐参考本人文章,个人认为E题在建模上是优于D题的,毕竟有给出数据而且有明确的建模思路,E题我直接提供了Python源码直接可以运行即可: 2023全国大学生数学建模竞赛-E 题思路详解+Python代

    2024年02月09日
    浏览(95)
  • 【数学建模竞赛】优化类赛题常用算法解析

    问题理解和建模:首先,需要深入理解问题,并将问题抽象为数学模型。这包括确定问题的目标函数、约束条件和决策变量。 模型分析和求解方法选择:对建立的数学模型进行分析,可以使用数学工具和方法,例如最优化算法、梯度下降法、遗传算法、模拟退火等。根据问题

    2024年02月09日
    浏览(45)
  • 2023年宜昌市中等职业学校技能大赛 “网络搭建与应用”竞赛题-1

    2023年宜昌市中等职业学校技能大赛   “网络搭建与应用”竞赛题 一、竞赛内容分布 “网络搭建及应用”竞赛共分二个部分,其中: 第一部分:企业网络搭建部署项目,占总分的比例为50%; 第二部分:企业网络服务配置及应用项目,占总分的比例为50%; 某集团公司新建公

    2024年02月04日
    浏览(40)
  • 2023年第二十届五一数学建模竞赛赛题浅析

    我们带来五一赛题的一个c题解析这个的目的,就是为了帮助大家更好的选题,简单的看一下这个几个题目就可以。然后我们题目给出的这个文件夹就是包括三个赛题,还有我们各个赛题的论文规范模板,这三个我们论文写作的时候才会用到。主要是看一下我们三个赛题,我们

    2024年02月01日
    浏览(54)
  • 2023 年第三届长三角高校数学建模竞赛赛题浅析

    为了更好地让大家本次长三角比赛选题,我将对本次比赛的题目进行简要浅析。数模模型通常分为优化、预测、评价三类,而本次数学题目就正好对应着A、B、C分别为优化、预测、评价。整体难度不大,主要难点在于A题的优化以及B、C的数据收集。稍后,我将为大家收集一些

    2024年02月05日
    浏览(46)
  • 用AI攻克“智能文字识别创新赛题”,这场大学生竞赛掀起了什么风潮?

    中国大学生服务外包创新创业大赛作为服务外包产业领域唯一的国家级赛事,位列“全国普通高校学科竞赛排行榜评估体系”,自2010年以来已连续举办14届,分为区域赛和全国决赛两个阶段。本届大赛吸引了803所全国院校的8006支团队报名参赛,报名团队数再创新高。其中40

    2024年02月12日
    浏览(37)
  • 2023 年高教社杯全国大学生数学建模竞赛题D 题 圈养湖羊的空间利用率

    昨天已经将E题第一二问的详解和思路源码都写了出来,大家如果想从E题下手的话推荐参考本人文章,个人认为E题在建模上是优于D题的,毕竟有给出数据而且有明确的建模思路,E题我直接提供了Python源码直接可以运行即可: 2023全国大学生数学建模竞赛-E 题思路详解+Python代

    2024年02月09日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包