在论坛潜水了这么久,都没发过贴,发现n年前写过一篇某瓣的逆向,里面的东西挺有意思的,就搬来这里了(网站可能已经更新,懒得去看了 😂)
首先来看一下原始数据,可以看到 window.DATA 里面是一大串意义不明的乱码
直接全局搜索 window.__DATA__
然后下断点,刷新页面
进入到 Lt.dispatch
函数内部
这里很明显,r 就是 window.__DATA__
,即原始数据,e(t)(n) 意思是原始数据经过了若干个函数的处理
我们进入到函数内部,看看具体做了什么,以及怎么用python来实现相同的功能
第一个函数
首先是 (n) 函数
可以看到里面有好几处处理,我们一个一个来复现
a = e.from(r, "base64")
原始数据r
经过e.from
函数的处理后,变成了Unit8Array 的数据类型,其实就是对原始数据进行 base64 解码
python主要使用base64
标准库实现
a = list(base64.b64decode(data))
从上图可以看到两个的效果都是一样的
s 和 u
s = Math.max(Math.floor((a.length - 2 * i) / 3), 0)
u = a.slice(s, s + i)
这两个就不用多说了,s是地板除(后面的0可以忽视),u是切片操作,python实现:
s = floor((len(a) - 2 * i) / 3)
u = a[s : s + i]
a = e.concat([a.slice(0, s), a.slice(s + i)])
concat是连接的意思,e.concat
其实就是对两个数组进行合并操作
a = a[0:s] + a[s + i :]
c = Object(o.hash)(e.concat([u, e.from(t)]))
这一步进行了较多操作,首先是 e.concat([u, e.from(t)])
,几次打断点发现 e.from(t)
都是空数组,所以这里结果只有 u数组
然后是 Object(o.hash)
很明显这里是一个ha
支付4UD,阅读全文
还有更多的精彩内容,作者设置为付费后可见