前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >最新某手 __NS_sig3算法 (56位) sig3 | js 逆向

最新某手 __NS_sig3算法 (56位) sig3 | js 逆向

原创
作者头像
用户8682787
发布2024-07-11 09:57:13
1561
发布2024-07-11 09:57:13

拿获取作品列表为例

代码语言:http
复制
https://cp.kuaishou.com/rest/cp/works/v2/video/pc/photo/list?__NS_sig3=xxxxxxxxxxx

搜索__NS_sig3

发现__NS_sig3是一个异步回调生成的值

代码语言:js
复制
s().call("$encode", [i, {suc: function(e) {t(`__NS_sig3=${e}`)},err: function(t) {e(t)}}])

具体逻辑就是:

  • s().call("$encode", [...]): 这个部分表示调用对象 s() 上的 call 方法,并传递 $encode 作为第一个参数。这里的 s() 可能是某个对象或函数的调用,它返回了一个对象,该对象具有 call 方法。不明白call方法的可以参考这篇文章https://juejin.cn/post/7158686309211439141
  • "$encode": 这是传递给 call 方法的第一个参数
  • [i, { ... }]: 这是传递给 call 方法的第二个参数,是一个数组。数组的第一个元素 i 就是要加密的原数据。第二个元素是一个包含 sucerr 回调函数的对象。

打断点到s()...这里,看看i是什么

看起来i也是一个加密的值,有点像md5加密之后的样子,往上找i生成的地方

代码语言:js
复制
const i = m(t, e, n);

其中t是json字符串, e是cookies中的kuaishou.web.cp.api_ph的值, n是一个空对象

进到m函数里面发现e被JSON序列化之后有被加到了d(i)后面,最终调用a()(s)被加密出来。看到这里就可以愉快的扣js了,哪里没有补哪里。就不过多赘述了。

搞定i之后就可继续往下走了,既然__NS_sig3是通过s().call()生成的,自然我们就要搞清楚s()是在哪里定义的

找到s的定义s = n.n(o) 再找到o的定义o = n(7606),此时我们发现7606这个东西好眼熟,没错就是我们的老朋友webpack,接下来就开始扣webpack,如何扣webpack的步骤这里就不赘述了,网上的教程一抓一大把。

最后验证一下结果

Nice ,接下来放到python里面跑一下看看是否能成功

  • 先来一个错误的sig看看什么样子
  • 再试试我们自己生成的sig的结果

完美运行~

该部分算法和app中的某部分雷同

本文仅供学习参考,如有问题询问或有需要可留言,或加q 1018866051 请备注算法交流

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档