某乎x-zse-96签名算法python重写
# 某乎x-zse-96签名算法python重写具体的分析小小白大佬已经分析的非常详细了,就是按这个方法就可以得到最后的签名算法
```
https://mp.weixin.qq.com/s/sVDHQeRY-774Jw70k7mINQ
```
网站
```
aHR0cHM6Ly93d3cuemhpaHUuY29tL3NlYXJjaD90eXBlPWNvbnRlbnQmcT1weXRob24=
```
## 签名的总体流程
```
source:101_3_2.0+/api/v4/search_v3?t=general&q=office&correction=1&offset=0&limit=20&filter_fields=&lc_idx=0&show_all_topics=0&search_source=Normal+"APAdT9SE4hSPTk_l1utlpb-FN6jTF5TgpSY=|1651578807"
```
`signature:sign(md5(source))`
sign方法
1. `md5(source)` 后的字符串末尾补`\u0000` 通过`charCodeAt`从末尾开始得到3个数字一组的数字
2. 3个数字作为参数通过`4种位运算`得到一个大数m
3. `fixed_str = "RuPtXwxpThIZ0qyz_9fYLCOV8B1mMGKs7UnFHgN3iDaWAJE-Qrk2ecSo6bjd4vl5"`
4个数字一组通过索引固定的字符串得到每组的四个字符, 比如任意一组的4个字符分别是 `fixed_str,fixed_str[(m >> 6) % 64],fixed_str[(m >> 12) % 64],fixed_str[(m >> 18) % 64]`
4. 拼接所有得到的字符串得到最后的签名
四种位运算的方式
```python
def m1(a, b, c): return ((a ^ 42) | (b << 8)) | (c << 16)
def m2(a, b, c): return (a | ((b ^ 42) << 8)) | (c << 16)
def m3(a, b, c): return (a | (b << 8)) | ((c ^ 42) << 16)
def m4(a, b, c): return (a | (b << 8)) | (c << 16)
```
其中第一组的a,b,c 分别为`a = ord(md5_str) ``b = ord(md5_str) ``c = ord(md5_str)`,后面的以此类推
## 补充知识学习
### 返回字符串字符的 Unicode 编码
```
// JavaScript
string.charCodeAt(index)
```
```
// python
ord(string)
```
### 位运算
| 含义 | 符号 | 例子 |
| ---- | ------ | ------------------- |
| 与 | a & b| 0011 & 1011 = 0011|
| 或 | a \| b | 0011 \| 1011 = 1011 |
| 异或 | a ^ b| 0011 ^ 1011 = 1000|
| 左移 | a <<b| 0011 <<2= 1100|
| 右移 | a >> b | 1100 >> 2 =0011 |
另外发现B站的这个教程把位运算讲的**既明白又有趣**【《算法零基础入门》位运算-哔哩哔哩】 https://b23.tv/k2WoXqR
## 成功留念
## 源码
想了好久要不要放源码,最后放上来好了,不然怎么装一个具体的逼呢!
```
https://github.com/skygongque/Spider/blob/master/09-%E7%9F%A5%E4%B9%8Ex-zse-96(jsvmp%20%E6%8F%92%E6%A1%A9%E8%BF%98%E5%8E%9F%E7%AE%97%E6%B3%95)/main.py
```
注意
**代码仅用于科研学习之用,禁止商用,否则造成的后果与本人无关**
另外除了x-zse-96外,cookie和其他参数可以**短时间固定**,但有时会出现`x-zst-81`参数 大佬“JavaScript逆向系列课+高阶课‘’ 这个帖子的资源能分享一下吗,那个帖子下不能回复了{:1_893:} DD{:1_893:}{:1_893:}厉害 厉害,跟着学习一下,谢谢分享 厉害厉害厉害ING 厉害了,大佬 厉害厉害厉害ING 感谢大佬分享
牛蛙~感谢分享 厉害,学习一下{:301_988:}
页:
[1]
2