逆向日期:2024.02.20
使用工具:Node.js、python、Redis
加密方法:md5标准库
文章全程已做去敏处理!!! 【需要做的可联系我】
AES解密处理(直接解密即可)(crypto-js.js 标准算法):在线AES加解密工具
【点赞 收藏 关注 】仅供学习,仅供学习,此文章不提供源码,只提供 代码图、逻辑和过程讲解!!!!
1、打开某某网站(请使用文章开头的AES在线工具解密):99Lp55WUF/d7WIKTTODahbNWMWI/iO0K9bnAJp5+P0Y=
2、打开网站后,向下滚动,翻到页面底部让他自动翻页,控制台看接口,没错,今天要逆向这个sing
3、老样子,全局搜索大法,搜这个【sing】,搜到的全部打上断点,然后再次触发翻页,幺幺幺,断住了,分析的内容都在下面图里!!
4、直接直接先把代码在本地模拟搞一下,所有的参数都先按照网页里所展示的参数填写,看看结果是否一样,如果得出的结果一样,则表示我们的思路和他的算法是对的,,,看下面图
5、既然算法是一样的,那我们就开始进行整理代码,看哪里还需要动态生成,,除了一个时间戳改成动态生成的,还有一个token不知道是随机的还是固定的,我们全局搜索一下看看
6、找到了,在cookie里,他这个token不是本地生成的,是通过服务端传过来的,如果这个token过期了,就不能访问数据了,当然,本地的token过期后,会请求服务器返回一个新的token
7、我们要想获取那个token,就要先整理思路,token过期会重新颁发,那我直接把token清除掉不久可以获取新的token了吗,直接全部清除,然后刷新此页面
8、然后在找到新出来的api接口,刷新网站的时候,我们是没有任何信息的,也没有token,当这个接口访问数据的时候,后端发现你没有这个token验证令牌,,就会给你重新颁发一个token令牌,并重新发起请求,根据这个原理,我们python直接模拟一下
9、python请求后,可以看到,返回了token
10、有了token了,我们就已经掌握了sign,那我们就去python模拟抓取数据了
11、经过我多次的测试,将不需要的内容全部去除,然后运行了一下,发现令牌过期了,那我们就去重新生成一下就好了
12、代码我进行了一个优化,并且添加了Redis库,刚好也可以给大家讲一下整个逻辑关系
【文件:01cac2e7f8ba5fef.js】首先,我把js代码进行了优化打包,方便待会python的调用,其主要作用就是将我们的一个token和一个数据传递到js里,进行加密,然后返回给python,返回的值是一个【sign】和【t】,【t】就是一个时间戳,这个时间戳主要作为python的请求参数传递给服务器,服务器接收到后会进行验证,验证你这个sign是不是正确的令牌,看看有没有过期,也看看你的请求的所有信息都对不对,如果不对就不返回给你信息
【文件:new1.py】这里我做了一个class类,把所有内容都放了进去,运行逻辑也很简单,首先我们传递参数给到【data】运行,然后获取token,这个token会先在我们本地的redis数据库获取,如果存在就返回token。不存在则会请求服务器获取这个token,并存储到Redis数据库然后设置一个过期时间,方便我们分布式或多线程的调用,不会占用太多的资源。
有了token后就要取请求数据了,在请求数据前会先通过我们传递【data】和 [token]获取一个【sign】和【t】时间戳,然后融入到我们python请求里进行请求。
13、我们接下来运行一下看看
运行第二次
换参数运行 我们把页数改为7页,ok全部成功