巨量星图sign
2023-03-15 22:03:17 时间
本篇文章分析巨量星图的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代码:
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);
代码还原
# -*- 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)
相关文章
- 金融服务领域的大数据:即时分析
- 影响大数据、机器学习和人工智能未来发展的8个因素
- 从0开始构建一个属于你自己的PHP框架
- 如何将Hadoop集成到工作流程中?这6个优秀实践必看
- SEO公司使用大数据优化其模型的5种方法
- 关于Web Workers你需要了解的七件事
- 深入理解HTTPS原理、过程与实践
- 增强分析:数据和分析的未来
- PHP协程实现过程详解
- AI专家:大数据知识图谱——实战经验总结
- 关于PHP的错误机制总结
- 利用数据分析量化协同过滤算法的两大常见难题
- 怎么做大数据工作流调度系统?大厂架构师一语点破!
- 2019大数据处理必备的十大工具,从Linux到架构师必修
- OpenCV中的KMeans算法介绍与应用
- 教大家如果搭建一套phpstorm+wamp+xdebug调试PHP的环境
- CentOS下三种PHP拓展安装方法
- Go语言HTTP Server源码分析
- Go语言HTTP Server源码分析
- 2017年4月编程语言排行榜:Hack首次进入前五十