admin 管理员组

文章数量: 887007

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

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

猿人学第13题


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

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

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


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



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

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

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

  • 使用xhr断点寻找加密函数,如下点击+,添加想要断点的xhr关键词,注意宁可少输入,都不能输错了,如这次的数据接口:=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,这里给一个在线转换的网址:链接: /


确定了加密参数的生成,到这里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'={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题(题目会不定时更新)