猿人学第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

相关文章

Oracle 通过 ROWID 批量更新表的方法

《Oracle通过ROWID批量更新表的方法》在Oracle数据库中,使用ROWID进行批量更新是一种高效的更新方法,因为它直接定位到物理行位置,避免了通过索引查找的开销,下面给大家介绍Orac... 目录oracle 通过 ROWID 批量更新表ROWID 基本概念性能优化建议性能UoTrFPH优化建议注

Django之定时任务django-crontab的实现

《Django之定时任务django-crontab的实现》Django可以使用第三方库如django-crontab来实现定时任务的调度,本文主要介绍了Django之定时任务django-cront... 目录crontab安装django-crontab注册应用定时时间格式定时时间示例设置定时任务@符号

Redis中6种缓存更新策略详解

《Redis中6种缓存更新策略详解》Redis作为一款高性能的内存数据库,已经成为缓存层的首选解决方案,然而,使用缓存时最大的挑战在于保证缓存数据与底层数据源的一致性,本文将介绍Redis中6种缓存更... 目录引言策略一:Cache-Aside(旁路缓存)策略工作原理代码示例优缺点分析适用场景策略二:Re

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

Pandas利用主表更新子表指定列小技巧

《Pandas利用主表更新子表指定列小技巧》本文主要介绍了Pandas利用主表更新子表指定列小技巧,通过创建主表和子表的DataFrame对象,并使用映射字典进行数据关联和更新,实现了从主表到子表的同... 目录一、前言二、基本案例1. 创建主表数据2. 创建映射字典3. 创建子表数据4. 更新子表的 zb

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J

MySQL更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -