在获取作品列表时,以https://cp.kuaishou.com/rest/cp/works/v2/video/pc/photo/list?__NS_sig3=xxxxxxxxxxx为例,我们发现__NS_sig3是一个由异步回调生成的值。
具体的加密逻辑如下:
s().call("$encode", [...])
-
s().call("$encode", [...]):这部分表示调用对象s()上的call方法,并将$encode作为第一个参数。s()可能表示某个对象或函数的调用,它返回了一个具有call方法的对象。
-
"$encode":这是传递给call方法的第一个参数。
-
[i, { ... }]:这是传递给call方法的第二个参数,是一个数组。数组的第一个元素i是要加密的原数据。第二个元素是一个包含suc和err回调函数的对象。
通过打断点到s()这里,我们可以看到i的具体数值。
进一步发现i也是一个加密的值,类似于md5加密后的样式。我们再往上寻找i的生成地方,发现i是通过m(t, e, n)生成的。
在函数m的内部,我们发现e被JSON序列化后加入到d(i)后面,最终通过a()(s)进行加密。因此,我们需要对i进行处理,并从中理解生成__NS_sig3的过程。
从逻辑上来看,i处理完毕后,我们就可以继续向下进行。由于__NS_sig3是通过s().call()生成的,我们需要确定s()的定义位置。
找到s的定义:s = n.n(o),然后找到o的定义:o = n(7606),我们发现7606是webpack,接下来开始解析webpack。
最后,验证结果。
验证通过后,尝试在Python中运行结果。
-
先用错误的sig看一下效果。
-
再试试我们自己生成的sig的结果。
运行完毕~
此部分算法与app中的某部分相似。
**本文仅供学习参考,如有问题询问或有需要可留言,或加q 1018866051 **请备注算法交流