猿人学第12题(题目会不定时更新)

2023-11-12 00:30

本文主要是介绍猿人学第12题(题目会不定时更新),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

猿人学对抗赛系列文章目录

猿人学第13题


猿人学12题为特别简单的难度,很适合js逆向刚刚入门的新手,这里先说思路和该题js逆向的一些小技巧,最后放上博主的代码,但是最好不要直接看代码哦,js逆向的思路才是最重要的。

首先题目网址: 猿人学第12题

如果是练习js逆向的话,可以不注册登录,但是博主建议还是注册一个账号,感受一下解题刷成就的快感,绝对不是打广告(偷偷告诉你们,博主榜上有名哦,看你们能不能猜到我的id),话不多说,直接开始

在这里插入图片描述
进入题目网址,可看见要求,抓取5页数字,前三页数据可见,而后俩页是需要带上特定请求头才能访问,再来看看加密参数。


在这里插入图片描述
可以看到每次请求返回的数据都是动态加载的数据,接口有2个参数值,page很明显是页码,而m就是我们需要破解逆向的参数,现在知道加密参数是什么了,该怎么找到这个加密参数的生成函数在哪里呢?

这里就介绍几种寻找加密参数的方法:

  • 通过header旁的Initiator查看,这里可以看到有很多项,我们这里就直接点request进去了,因为jquery是官方的,基本不会有变态网站会改里面的东西,省下的俩个别问我为什么选request,而不选(anonymous),问就是经验,看起来这个(anonymous)就不太像( •̀ ω •́ )✧

在这里插入图片描述

  • 使用xhr断点寻找加密函数,如下点击+,添加想要断点的xhr关键词,注意宁可少输入,都不能输错了,如这次的数据接口:https://match.yuanrenxue.com/api/match/12page=1&m=eXVhbnJlbnh1ZTE%3D
    就不能输入后面m的参数,因为m是每次都会变的加密参数,很有可能断不到,page也是一样,所以这里用api/match来断点

在这里插入图片描述

  • 当然最简单的办法就是直接ctrl+shift+F在弹出的搜索框直接搜,但是对于加密参数名称过于平常是不适用的,比如本体的m,真就一搜一大把
  • 还可以用hook的方式来寻找,这里就不介绍了,后面会有题目需要hook的时候再详细介绍

通过xhr断点的方式会在这里断住,查看调用栈,瞧瞧,是不是很熟悉,又是你们几个,这里直接点进去request,或者是Initiator点进来,都会在这里跳到这里

在这里插入图片描述
在这里插入图片描述
瞧瞧,这参数不都明摆着出来了,虽然断点在723行,但是往上看可以看见window.page就是页码,m则是btoa('yuanrenxue' + window.page),熟悉js的同学就知道了,btoa是一个常见方法,就是对其中的字符串转换为base64,这里给一个在线转换的网址:链接: https://www.bejson.com/enc/base64/

在这里插入图片描述


确定了加密参数的生成,到这里js逆向的过程就结束了,是不是很简单,接下来就是用python实现js的功能的时候了,代码如下

import base64
import json
import requestskv = {'User-Agent': 'yuanrenxue.project', 'cookie': 'sessionid={}'.format(你自己的sessionid)}
def jie(o):c = 'yuanrenxue' + str(o)encode_str = base64.encodebytes(c.encode('utf8'))  # 转为base64return encode_str.decode()def main(u1):global nume = jie(u1)r = requests.get(f'http://match.yuanrenxue.com/api/match/12?page={u1}&m={e}',headers=kv).textl = json.loads(r)for i in l['data']:num += i['value']if __name__ == "__main__":num = 0for i in range(1, 6):main(i)print(num)

总结

12题只是稍微处理了一下参数,而且并没有任何阻挠js逆向的手段,还是非常简单的,对于一些文章中的知识名词啥的不是很了解的话可以看看我的这篇文章:

js逆向学习必备技巧 (还没写完(~ ̄▽ ̄)~)

这篇关于猿人学第12题(题目会不定时更新)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/393860

相关文章

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

Python Flask实现定时任务的不同方法详解

《PythonFlask实现定时任务的不同方法详解》在Flask中实现定时任务,最常用的方法是使用APScheduler库,本文将提供一个完整的解决方案,有需要的小伙伴可以跟随小编一起学习一下... 目录完js整实现方案代码解释1. 依赖安装2. 核心组件3. 任务类型4. 任务管理5. 持久化存储生产环境

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

linux安装、更新、卸载anaconda实践

《linux安装、更新、卸载anaconda实践》Anaconda是基于conda的科学计算环境,集成1400+包及依赖,安装需下载脚本、接受协议、设置路径、配置环境变量,更新与卸载通过conda命令... 目录随意找一个目录下载安装脚本检查许可证协议,ENTER就可以安装完毕之后激活anaconda安装更

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

MySQL 定时新增分区的实现示例

《MySQL定时新增分区的实现示例》本文主要介绍了通过存储过程和定时任务实现MySQL分区的自动创建,解决大数据量下手动维护的繁琐问题,具有一定的参考价值,感兴趣的可以了解一下... mysql创建好分区之后,有时候会需要自动创建分区。比如,一些表数据量非常大,有些数据是热点数据,按照日期分区MululbU

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景