小红书小程序x-sign

本文案例是对小红书小程序的x-sign参数分析,文章内容仅用于学习和技术交流,如有侵权请联系我删除。


小程序如何反编译不具体说了

参数定位

之前通过开发者工具查询关键词找到了包含X-sign的JS文件,这里直接查看xsign.js文件。

DEFAULT_SIGN_HEADER = X-Sign
在这里插入图片描述
继续搜素DEFAULT_SIGN_HEADER

在这里插入图片描述
发现 header[_feApiSign.DEFAULT_SIGN_HEADER] = (0, _feApiSign.encryptFeApiToken)(feApiConfig);

也就是说headers中的X-Sign = (0, _feApiSign.encryptFeApiToken)(feApiConfig);

先查看encryptFeApiToken方法。

function encryptFeApiToken(config) {
      var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_SIGN_VERSION;
      var _config$url = config.url, url = _config$url === undefined ? '' : _config$url;
      var params = config.params, _config$transform = config.transform,
          transform = _config$transform === undefined ? false : _config$transform;
      url = url.slice(url.indexOf(DEFAULT_SIGN_API_PATH), url.length);
      var queryString = '';
      if (params) {
          queryString = getQueryByParams(params, transform)
      }
      queryString = queryString ? '?' + queryString : '';
      if (version === DEFAULT_SIGN_VERSION) {
          return '' + version + (0, _md2.default)(url + queryString + SECRET_KEY)
      }
      return ''
  }
});

直接查看返回的地方,version + (0, _md2.default)(url + queryString + SECRET_KEY)

url是接口地址,queryString是请求参数,SECRET_KEY是"WSUDD"

因为 version === DEFAULT_SIGN_VERSION才会执行,所以version 就是 "X"。

_md2是引入的md5方法。
在这里插入图片描述

那么这一块便是生成X-sign的位置了。

另外在JS中,(0, function)这种表达式可看做(true && function)或(0 ? 0 : function)

这种调用方法可以让function在全局执行。


逻辑分析

根据: version + (0, _md2.default)(url + queryString + SECRET_KEY)

已经知道xsign是由 "X"+ MD5后的url+params+ "WSUDD"。

再细看一下encryptFeApiToken方法,其中url = url.slice(url.indexOf(DEFAULT_SIGN_API_PATH), url.length);

而DEFAULT_SIGN_API_PATH = '/fe_api/'

意思是把在url中找到 '/fe_api/'出现的位置,然后slice去截取该段字符串,等于去掉了 /fe_api/ 之前的字符。

而queryString大概一看就能明白是把请求的参数拼接成字符串。
在这里插入图片描述

所以最后的逻辑就是
当收到请求url为:https://www.xiaohongshu.com/fe_api/burdock/weixin/v2/notes/61238b740000000021037d94/comments

请求参数为: { "pageSize" : 10 ,"endId" : 0}
则先把 url 转成 /fe_api/burdock/weixin/v2/notes/61238b740000000021037d94/comments?
然后把参数转成 pageSize=10&endId=0 ,再和WSUDD一块进行拼接。
最后把拼接的字符串md5加密,然后再加上X

所以最终的x-sign是 : X+md5( "/fe_api/burdock/weixin/v2/notes/61238b740000000021037d94/comments?pageSize=10&endId=0")

这边可以用在线网站生成一下和抓到的包进行对比,返现结果一致。
在这里插入图片描述

接下来可以进行代码还原了。


加密还原

用python代码进行还原:

【温馨提示:此处隐藏内容需要付费订阅后才能查看!】


备注

authorization需要抓包获得。可查看下图:(频繁采集非常容易被封号,且行且珍惜)
在这里插入图片描述


点赞
  1. 千户庄赵二狗说道:
    Google Chrome Windows 10
    authorization现在找不到了,大佬,现在在哪里可以找到啊

发表回复