前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >巨量星图sign

巨量星图sign

作者头像
李玺
发布2021-11-22 11:39:50
8540
发布2021-11-22 11:39:50
举报
文章被收录于专栏:爬虫逆向案例

本篇文章分析巨量星图的sign值生成。

案例地址:https://www.xingtu.cn/visitor/creative/market/service

在这里插入图片描述
在这里插入图片描述

文章目录

接口分析

在这里插入图片描述
在这里插入图片描述

只有一个加密参数sign

在这里插入图片描述
在这里插入图片描述

参数定位

ctrl+F 全局搜索关键词 sign,在chunk-vendors文件中出现了很多检索内容

在这里插入图片描述
在这里插入图片描述

进来简单查找了一下,很快就看到一个比较像的。打上断点

在这里插入图片描述
在这里插入图片描述

触发请求,可以看到此处就是sign的生成位置。

在这里插入图片描述
在这里插入图片描述

加密追踪

对 A(Object(r[“a”])(Object(r[“a”])({}, n), l), s, o) 这串代码进行分析。最简单的查看方法就是断点后在控制台打印。

Object(r[“a”]) 是 function o(e){}

在这里插入图片描述
在这里插入图片描述

(Object(r[“a”])({}, n), l) 等于 {“service_method”:“SearchSpuVideoCase”,“service_name”: “search.AdStarSearch”};

s = [‘keyword’, ‘filters’, ‘order_by’, ‘sort_type’, ‘page’, ‘limit’] o = true

在这里插入图片描述
在这里插入图片描述

主要的function A :

在这里插入图片描述
在这里插入图片描述

u = 请求链接的参数组合

在这里插入图片描述
在这里插入图片描述

y()

在这里插入图片描述
在这里插入图片描述

追了一下发现是一个md5的实现

在这里插入图片描述
在这里插入图片描述

部分Js代码:

代码语言:javascript
复制
function A(e, t, n) {
            var r = null != t ? t : {}
              , i = r.include
              , o = r.enforceWithKeys
              , a = void 0 === o ? [] : o
              , s = Object.keys(e);
            if (n && i) {
                var l = i.concat(["service_name", "service_method", "sign_strict"]);
                s = s.filter((function(e) {
                    return l.includes(e)
                }
                ))
            }
            var u = s.sort().map((function(t) {
                var n = e[t];
                return function(e) {
                    return null == e
                }(n) ? "" : t + (!a.includes(t) && function(e) {
                    return ["string", "number"].includes('string')
                }(n) ? n : t)
            }
            )).join("");
            console.log(u + "e39539b8836fb99e1538974d3ac1fe98")
            return u + "e39539b8836fb99e1538974d3ac1fe98";
}



var item = {
"service_method":"SearchSpuVideoCase",
"service_name": "search.AdStarSearch"
};

function o(e) {
            for (var t = 1; t < arguments.length; t++) {
                var n = null != arguments[t] ? arguments[t] : {};
                t % 2 ? i(Object(n), !0).forEach((function(t) {
                    Object(r["a"])(e, t, n[t])
                }
                )) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : i(Object(n)).forEach((function(t) {
                    Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t))
                }
                ))
            }
            return e
        }

A(o(item), ['keyword', 'filters', 'order_by', 'sort_type', 'page', 'limit'], true);

代码还原

代码语言:javascript
复制
# -*- coding: utf-8 -*-
import requests
import hashlib
server_name = 'search.AdStarSearch'
service_method = 'SearchSpuVideoCase'
sort_type = '1'
limit = '30'
url = f'https://www.xingtu.cn/star_tools/api/gateway/handler_get/?keyword=&order_by=score&sort_type=1&page=1&limit=30&filters=%7B%22first_category_id%22:%22100%22,%22second_category_id%22:%2210000%22%7D&service_name={server_name}&service_method={service_method}&sign_strict=1&sign='
string = f"filtersfilterskeywordlimit{limit}order_byscorepage1service_method{service_method}service_name{server_name}sign_strict1sort_type{sort_type}e39539b8836fb99e1538974d3ac1fe98"
m = hashlib.md5()
m.update(string.encode())
sign = m.hexdigest()
print(requests.get(url=url+sign).text)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/10/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 接口分析
  • 参数定位
  • 加密追踪
  • 代码还原
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档