python爬虫 - js逆向之某评的逆向分析笔记

前言

 

最近长期混迹在很多技术交流群里,大部分时间都是在看,很少参与讨论,发现里面大佬太多了,像他们那样的大佬每天都在学习,是真的觉得自愧不如啊,某数,某美,各大滑块,某易,某迅,某验,jsl,还有国外的akamai,cloudflare(俗称5秒盾),obfuscator,jsfuck,啥啥全都不用费太大力就能搞定。

 

前面说的还是web端的逆向,app端的逆向就更多骚操作了,唉,卷不动啊。

 

天天打开各种交流群,氛围感太强了,是真的很荣幸跟他们在一个群的。

 

如果我上面说的你都不知道?用公众号“咸鱼学python”的号主鱼哥的话,知道瑞数的,不用多说,不知道瑞数的,更不用多说(大概这个意思,原话想不起了)。

 

最近是真的光看他们的聊天记录都能学到很多东西,有时候是真的觉得我还是太菜了,没法,多研究吧

 

目标

闲话多了,来,干吧,今天的网站是:

aHR0c{防查找,删除我,包括花括号}HM6Ly9tLmR{防查找,删除我,包括花括号}pYW5waW{防查找,删除我,包括花括号}5nLmNvbS8=

 

打开之后,点击“美食”栏,然后会进入一个列表页

 

 

今天的目标就是需要搞定接口里的_token,和logan_session_token两个参数

 

 

分析

 

首先,很容易找到接口:

 

aHR0cHM{防查找,删除我,包括花括号}6Ly9tLmRpYW5{防查找,删除我,包括花括号}waW5nLmNvbS9p{防查找,删除我,包括花括号}c29hcGkvbW9kdWxl

 

先看logan_session_token

 

这个是在请求里的cookie需要的东西:

 

 

 

 

先盲目一顿搜:
找到有个common.js的:

 

 

 

打上断点,再搜COOKIENAME_SESSION_TOKEN

 

 

 

把相关的都打上断点

 

然后,把cookie的这个值清理一下,不然的话,没法跟进去看生成逻辑,因为cookie肯定是生成一次,在一定有效期内都可以用的

 

 

 

 

刷新页面,发现不太使用,直接全删了吧,clear site data

 

 

刷新,果然走到了这里:

 

 

这看语法,就知道这里就是生成逻辑了,有set了,那么后面这个一定就是调用函数了,在控制台执行看看:

 

 

果然了,那么核心逻辑就是这个generateRandomBytes里了,跟进去,单步执行,走到这里:

 

 

 

 

出去以后,就有值了,那可以100%确定是这里了

 

 

 

把扣除逻辑哪里,定义一个函数执行看看,这时可以新开一个标签,然后在控制台执行:

 

 

 

 

 果然了。

如果你感觉我操作有点快了,可以再在刚才抠出逻辑哪里,重新打上断点看看,这里我就不掩饰了。

 

那么怎么验证我们扣除来的值可用呢?很简单,把上面这个yf6....的值,直接在application菜单栏里,覆盖存储

修改之前:

 

 

 

覆盖,双击值,粘贴,回车:

 

 

然后刷新页面,只要这个并没有重新生成,那就说明没问题,这个逻辑就不多介绍了

 

页面已经刷新了,值确实可以用

 

 

 

 

 

再看_token

 

因为刚才的接口里,请求参数有个_token:

 

 

 搜索:

 

 

 

大胆猜测也在common里面

一查,果然:

 

 

打上断点,刷新页面,发现c出现了,然后看到上面的变量 i 也是相同的值

 

 

 

 

那这就有点奇怪了,到底哪个才是呢?复制出来看下:

 

"undefined" != typeof window && Rohr_Opt && Rohr_Opt.reload && (c = Rohr_Opt.reload(i.a.fetchUrl))

 

 

c && e && e.body && (e.body = JSON.stringify(Object.assign(JSON.parse(e.body), {
_token: c
})))

 

到底哪个才是,看哈,后面这个才是实际的c的赋值,

 

 

所以,那就是这里了,把这段copy出来执行,果然是了

 

 

那这个怎么模拟,console里看下:

 

 

那现在就差这个reload函数了,双击这个区域进去

 

 来到这里:

 

 把之前的断点都删了,重新打上断点:

 

 

 

这里就是调用逻辑:

 

 还得找到核心逻辑

 

先看c()吧:

 

 

跟进去发现到了这里:

 

 

 

 

 

看下e:

 

 

 

 

 

调试发现:

 

 

 

实际走的逻辑是框住的地方

 

 

 

 

 

最后我调试了半天,执行,canvas报错

 

 

 

 html5的canvas,里面有很多指纹检测的,顿时感觉乏力啊,为啥,因为国外有名的云防护akamai就是基于canvas识别指纹的。所以我觉得目前的我还不够完全处理,虽然有点眉目,但是没法完全搞定。

 

那怎么办?网上找了两个方案

 

第一个:

 

 

 

 

 

 

1
2
3
4
5
6
7
def get_token():
    import base64, zlib, time
    info = str(
        {"rId": "", "ts": int(time.time() * 1000), "cts": int(time.time() * 1000) + 1000000, "brVD": [], "brR": [],
         "bI": [], "mT": [], "kT": [], "aT": [], "tT": [], "sign": "eJwDAAAAAAE="}).encode()
    token = base64.b64encode(zlib.compress(info)).decode()
    print(token)

  


经过我的测试,这个是能用的,虽然长度看着差了很多

 

 

 

 

第二个:

 

这个的长度看着就很够

 

 

  

node.js自行安装了,就不多介绍了

 

测试发现,也是可以的

 

 

ok,这快就算过了,canvs相关的,放一放,目前能用就行了,后续再专项研究

 

图片去水印

 

然后还有个问题 ,水印,这个,因为该平台的机制,图片都是有水印的,然后根据我的分析发现,在某接口(这个接口暂时不透漏,因为这个接口反爬频率很强,不能超高频次访问,正在寻求其他思路)下,请求到的数据的图片地址是超清大全图,然后去掉图片地址的某个位置:     玖{}  

 

   ④{}

 

也就是,最开始的地址就是,下面的第一个链接,去掉之后,变成第二个链接

 

然后他就是无水印的原图了 

 

不信?我随机找了个,下载到本地,如下:

 

 好的,over,一小会儿的功夫就跑几百张图:

 

 

相关的数据也都有,但是就不能展示了,原因你懂的。

 

后记

canvas最近正在研究,后续出系统的教程

滑块正在破解

其实挺简单的,最稳的还是直接走app端,但是app前期的逆向工程估计会消耗很多时间

 

posted @   Eeyhan  阅读(1442)  评论(1编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示