淘宝x-sign算法解密分析

2020/07/07 16:52
阅读数 2.9K

淘宝x-sign算法解密分析(更新时间:2020-07-04)

大家都知道只要有了x-sign基本上所有事情都可以干,包括但不仅限于商品信息,商品评价,秒杀活动等等
本文将演示如何获取淘宝商品评价信息,以iphone11为例 https://detail.tmall.com/item.htm?id=602659642364
联系qq: 407507121

抓包分析

通过frida禁用协议+charles手机抓包分析得出评价获取参数为如下几个:
url:https://guide-acs.m.taobao.com/gw/mtop.taobao.rate.detaillist.get/4.0/
参数:data={"hasPic":"1","pageNo":"1","pageSize":"10","auctionNumId":"602659642364"}

头信息:有好多头信息,最重要的x-sign

携带签名的请求头调用

先放一个调用服务获取headers成功请求到数据的图片

使用说明:

  1. 调用get_comment_headers方法,传入要请求的商品id,毫秒级获取携带加密x-sign请求头。调用该方法不限ip和机器,需要准备自己的redis,并可远程连接。
  2. x-sign加签服务部署在windows电脑或服务器,需安装安卓模拟器,不需要手机!x-sign加签服务部署,需要联系QQ获取。
  3. 该服务稳定性高,不限并发。成本极低,技术易掌握,同一版本app加密方法基本一致,参数会有变化,所以该服务同样可应用其他接口,掌握技术可以自己研究。这里只提供商品评价接口技术支持。

参数说明

  1. data:就是参数data, 包含要请求数据原始信息, data是原始值比如"{\"pageSize\":\"10\",\"foldFlag\":\"0\",\"hasPic\":\"1\",\"pageNo\":\"1\",\"auctionNumId\":\"602659642364\"}"。
  2. appKey:默认"21646297",且只能是"21646297",不管你是其他什么值,即使传了其他值也会被换掉,也就是说可以不传这个参数
  3. pv:默认"5.1"
  4. 如有其他疑问,或者需要帮助的请联系qq: 407507121

返回值说明

返回值就是一个请求头,字典类型,字段都不能少,发送http请求,携带该请求头,即可获取数据,简单易用。可用于requests 或者scrapy.

python 版本demo

运行条件: python3 + requests 库

import datetime
import urllib
import time
import requests
import redis
requests.packages.urllib3.disable_warnings()


redis_config = {
 'host': '*',
 'port': 6379,
 'db': 2,
 'password': '*',
 'decode_responses': True
}

worker_conn = redis.Redis(**redis_config)

# 发布任务
def publish_task(task_key, task_id):
 worker_conn.lpush(task_key, task_id)

# 获取任务结果
def get_result(task_key, task_id):
 publish_task(task_key, task_id)
 i = 0
 while i<100:
 data = worker_conn.lpop(task_id)
 if data:
 return eval(data)
 else:
 i += 1
 time.sleep(0.1)
 print("该任务执行时间超过10秒")
 return None

def get_comment_headers(task_id):
 return get_result('comment_task', task_id)


if __name__ == '__main__':
 start = datetime.datetime.now()
 nid = '602659642364'
 data = '{"hasPic":"1","pageNo":"1","pageSize":"10","auctionNumId":"%s"}' % nid
 url1 = 'https://guide-acs.m.taobao.com/gw/mtop.taobao.rate.detaillist.get/4.0/?data=' + urllib.parse.quote(data)
 print(url1)
 headers = get_comment_headers(nid)
 print(headers)
 print(type(headers))
 end = datetime.datetime.now()
 print("获取headers耗时:", end - start)
 resp = requests.get(url1, headers=headers, verify=False).text
 print(resp)

技术支持

联系qq: 407507121

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部