APP版本 11.15.0

接口分析

# URL
https://app.zhuanzhuan.com/zz/transfer/search# header
cookie	xxx
x-zz-monitoring-metrics	feMetricAntiCheatLevel=V1
zztk	
user-agent	Zhuan/11.15.0 (11015000) Dalvik/2.1.0 (Linux; U; Android 10; Pixel 3 Build/QQ3A.200805.001)
zzreqallparam	zztk|zzReqT|tabId|filterModuleServerParamsInput|b2cInfoCardAB|requestmark|pushcode|searchPageSource|searchAccurateFilterAB|pagenum|extendParams|pageIdParams|sessionStr|pagesize|recModelAB|searcfilterhmove2zzsearch|search_9_0_0|searchStandardPropertiesAB|keyword|searchfrom|changeIntention|usePgParam
zzreqsign	0b832cdce0b84776da0de6f233ef5651 # 分析
zzreqt	1752138119444
zzht	a_15
zzreferer	https://app.zhuanzhuan.com/zz/15/E1007
referer	https://app.zhuanzhuan.com/zz/15/E1007
content-type	application/x-www-form-urlencoded; charset=UTF-8
content-length	1551
accept-encoding	gzip# data
searchAccurateFilterAB	2
pagenum	4
extendParams	{"sessionId":"xxxxxxxxxxx"}
pageIdParams	{"refpagequery":"from\u003d14","refpagetype":"V1008"}
sessionStr	{"abtest":"brandSeriesHightlightsAb.exp_brandSeriesHightlights0620:cvr.base_cvr0630:feedwords.base_feedwords_0407_aa1:flow_management_632.agroup_flow_management_632:flow_management_682.cgroup_flow_management_682:flow_management_690.exp_flow_management_690_1:flow_management_691.bgroup_flow_management_691:flow_management_692.agroup_flow_management_692:flow_management_693.agroup_flow_management_693:hourday.hourday0512:mixCateGradeUseNewRecallAb.exp_mixCateGradeUseNewRecallAb:rank_root.base_rankroot0630:segment.base_segment_0412_aa1:sortstrategy.base_sortstrategy_0407_base:zzbrank.rank0702","session":"C2D3902C0C0FBxxxxxxxC0B28C8B"}
pagesize	20
recModelAB	1
searcfilterhmove2zzsearch	1
search_9_0_0	B
searchStandardPropertiesAB	B
keyword	iphone15promax
searchfrom	116
changeIntention	0
usePgParam	1

zzreqsign定位

request = addHeader.addHeader(SignUtil.SING_KEY_SIGN, str3).addHeader(SignUtil.SING_KEY_TIME, str5).addHeader("zzht", "a_15").build();

zzreqsign分析

Pair<String, String> sign = SignUtil.getSign(linkedHashMap);# 跟进 getSign
String sortParams = getSortParams(map); // 猜测排序
String sign = TextUtils.isEmpty(sortParams) ? null : getSign(sortParams, c0.getContext()); // 最终
# 跟进getSignstatic {System.loadLibrary("signLib");}
public static native String getSign(String str, Context context);
入参一b2cInfoCardAB%3DBchangeIntention%3D0extendParams%3D%7B%22sessionId%22%3A%22V25103bBq%22%7DfilterModuleServerParamsInput%3D%7B%22clickItems%22%3A%7B%22st7%22%3A%5B%7B%22cmd%22%3A%22sortpolicy%5Cu003d0%22%2C%22selectType%22%3A%220%22%2C%22style%22%3A%22320%22%2C%22value%22%3A%22sp00%22%7D%5D%7D%2C%22tab%22%3A%220%22%2C%22keyword%22%3A%22iphone15promax%22%2C%22filterModuleParam%22%3A%7B%22version%22%3A%221.8.0%22%2C%22appType%22%3A%221%22%7D%2C%22searchScene%22%3A%221%22%2C%22scene%22%3A%221%22%7Dkeyword%3Diphone15promaxpageIdParams%3D%7B%22refpagequery%22%3A%22from%5Cu003d14%22%2C%22refpagetype%22%3A%22V1008%22%7Dpagenum%3D2pagesize%3D20pushcode%3D3recModelAB%3D1requestmark%3D1752140437494searcfilterhmove2zzsearch%3D1searchAccurateFilterAB%3D2searchPageSource%3D14searchStandardPropertiesAB%3DBsearch_9_0_0%3DBsearchfrom%3D3sessionStr%3D%7B%22abtest%22%3A%22brandSeriesHightlightsAb.exp_brandSeriesHightlights0620%3Acvr.base_cvr0630%3Afeedwords.base_feedwords_0407_aa1%3Aflow_management_632.agroup_flow_management_632%3Aflow_management_682.cgroup_flow_management_682%3Aflow_management_690.exp_flow_management_690_1%3Aflow_management_691.bgroup_flow_management_691%3Aflow_management_692.agroup_flow_management_692%3Aflow_management_693.agroup_flow_management_693%3Ahourday.hourday0512%3AmixCateGradeUseNewRecallAb.exp_mixCateGradeUseNewRecallAb%3Arank_root.base_rankroot0630%3Asegment.base_segment_0412_aa1%3Asortstrategy.base_sortstrategy_0407_base%3Azzbrank.rank0702%22%2C%22session%22%3A%22C2D3902C0xxxADFE9E57EC0B28C8B%22%7DtabId%3D0usePgParam%3D1zzReqT%3D1752140445346zztk%3D, 入参二 context=com.wuba.zhuanzhuan.ApplicationWrapper@9b17ae0返回值 7c22a35599dbc85c46ce1da93e9733f6# ida打开 静态注册
Java_com_zhuanzhuan_sign_SignUtil_getSign
int __fastcall Java_com_zhuanzhuan_sign_SignUtil_getSign(JNIEnv a1, jobject a2, jstring a3, int a4)
{const char *app_sign_sha1; // r0int v9; // r8signed int v10; // r5int DevID; // r0int v12; // r8int v13; // r9int v14; // r6int v15; // r10_BYTE *v16; // r8signed int i; // r11char v18; // r4int v19; // r1JNIEnv v20; // r4int v21; // r9int MD5; // r10int v26; // [sp+8h] [bp-30h]int v27; // [sp+Ch] [bp-2Ch]int v28; // [sp+10h] [bp-28h]JNIEnv v29; // [sp+14h] [bp-24h]int v30; // [sp+18h] [bp-20h]if ( !a3 )return 0;app_sign_sha1 = get_app_sign_sha1(a1, a4);if ( !app_sign_sha1 )return 0;if ( strcmp(app_sign_sha1, app_sing_str) )return 0;v9 = toBytes(a1, a3);                         // 字符串 encode utf-8v10 = (*(a1->reserved0 + 171))(a1, v9);v30 = (*(a1->reserved0 + 184))(a1, v9, 0, *(a1->reserved0 + 184), a2, a3, a4);DevID = getDevID(a1, a2);                     // 固定值 C2D3902C0C0FBFExxxxx9E57EC0B28C8Bif ( !DevID )return 0;v28 = v9;v26 = DevID;v12 = toBytes(a1, DevID);                     // C2D3902C0C0FBxxxxFE9E57EC0B28C8B encode utf-8v13 = 0;v14 = (*(a1->reserved0 + 184))(a1, v12, 0);v29 = a1;v27 = v12;v15 = (*(a1->reserved0 + 171))(a1, v12);v16 = malloc(v10);                            // 异或for ( i = 0; i < v10; ++i ){v18 = *(v30 + v13 % v10);v19 = (v13 + 1) % v15;v13 += 2;v16[i] = *(v14 + v19) ^ v18;}v20 = v29;v21 = (*(v29->reserved0 + 176))(v29, v10 + 9);(*(v20->reserved0 + 208))(v20, v21, 0, v10, v16);(*(v20->reserved0 + 208))(v20, v21, v10, 9, "smiletozz");// 拼接到最后smiletozzMD5 = getMD5(v29, v21);                       // 最终结果(*(v20->reserved0 + 23))(v20, v21);free(v16);(*(v20->reserved0 + 23))(v20, v26);(*(v20->reserved0 + 192))(v20, v27, v14, 0);(*(v20->reserved0 + 192))(v20, v28, v30, 0);(*(v20->reserved0 + 23))(v20, v27);(*(v20->reserved0 + 23))(v20, v28);return MD5;
}

Python直接还原和app签名一致

在这里插入图片描述

带入代码请求测试通过

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/88482.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/88482.shtml
英文地址,请注明出处:http://en.pswp.cn/web/88482.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

注解与反射的完美配合:Java中的声明式编程实践

注解与反射的完美配合&#xff1a;Java中的声明式编程实践 目录 引言 核心概念 工作机制 实战示例 传统方式的痛点 注解反射的优势 实际应用场景 最佳实践 总结 引言 在现代Java开发中&#xff0c;我们经常看到这样的代码&#xff1a; Range(min 1, max 50)priva…

开源入侵防御系统——CrowdSec

1、简介 CrowdSec 是一款现代化、开源、基于行为的入侵防御系统&#xff08;IDS/IPS&#xff09;&#xff0c;专为保护服务器、服务、容器、云原生应用而设计。它通过分析日志检测可疑行为&#xff0c;并可基于社区协作共享恶意 IP 黑名单&#xff0c;从而实现分布式防御。 其…

imx6ull-裸机学习实验13——串口格式化函数移植实验

目录 前言 格式化函数 实验程序编写 stdio文件夹 main.c Makefile修改 编译下载 前言 在学习实验12&#xff1a;imx6ull串口通信实验&#xff0c;我们实现了 UART1 基本的数据收发功能&#xff0c;虽然可以用来调试程序&#xff0c;但是功能太单一了&#xff0c;只能输出…

CCF-GESP 等级考试 2025年6月认证C++三级真题解析

1 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09;第1题 8位二进制原码能表示的最小整数是&#xff1a;&#xff08; &#xff09;A. -127 B. -128 C. -255 …

【网络安全】服务间身份认证与授权模式

未经许可,不得转载。 文章目录 问题背景用户到服务的身份认证与授权系统对系统的通信服务与服务之间的通信需求分析Basic Auth(基本身份认证)优点缺点mTLS 证书认证优点缺点OAuth 2.0优点缺点JWS(JSON Web Signature)优点缺点结合 Open Policy Agent 的 JWS 方案优点缺点结…

【EGSR2025】材质+扩散模型+神经网络相关论文整理随笔(四)

An evaluation of SVBRDF Prediction from Generative Image Models for Appearance Modeling of 3D Scenes输入3D场景的几何和一张参考图像&#xff0c;通过扩散模型和SVBRDF预测器获取多视角的材质maps&#xff0c;这些maps最终合并成场景的纹理地图集&#xff0c;并支持在任…

Grid网格布局完整功能介绍和示例演示

CSS Grid布局是一种强大的二维布局系统&#xff0c;可以将页面划分为行和列&#xff0c;精确控制元素的位置和大小。以下是其完整功能介绍和示例演示&#xff1a; 基本概念 网格容器&#xff08;Grid Container&#xff09;&#xff1a;应用display: grid的元素。网格项&#x…

学习C++、QT---21(QT中QFile库的QFile读取文件、写入文件的讲解)

每日一言把大目标拆成小步&#xff0c;每天前进一点点&#xff0c;终会抵达终点。QFile读取文件我们记事本要进行读取文件、写入文件、等等的操作&#xff0c;那么这个时候我们的QT有一个QT类叫做QFile这个类的话是专门对于文件操作的&#xff0c;所以我们来学习我们在QT的帮助…

AD736ARZ-R7精密真有效值转换器 高精度测量的首选方案

AD736ARZ-R7精密转换器产品概述AD736ARZ-R7是ADI&#xff08;Analog Devices Inc.&#xff09;推出的一款低功耗、高精度的真有效值&#xff08;RMS&#xff09;转直流&#xff08;DC&#xff09;转换器&#xff0c;采用SOIC-8封装&#xff0c;适用于需要精确测量交流或复杂波形…

【web应用】若依框架前端报表制作与导出全攻略(ECharts + html2canvas + jsPDF)

文章目录前言一、ECharts准备工作1. 检查ECharts安装2. 导入ECharts3. 创建饼图组件4. 模板部分二、报表导出功能实现1. 安装依赖2. 导入依赖3. 完整导出函数实现4. 样式优化三、完整组件实现四、常见问题与解决方案1. 图表截图不完整或模糊2. 图表背景透明3. 导出PDF中文乱码4…

vue3+express联调接口时报“\“username\“ is required“问题

我用node .js的express框架写的登录接口&#xff0c;发现postman可以调通&#xff0c;但是vue3前端报错vue3我发现是我后端node.js的app.js入口文件中配置的解析前端参数的解析中间件和前端请求头中的Content-Type配置不一致的原因 解决方案 因为我后端配置解析表单数据的中间件…

《月亮与六便士》:天才的背叛与凡人救赎的残酷辩证法

当满地六便士成了庸人的火葬场​​毛姆笔下的斯特里克兰德&#xff0c;是一把捅穿中产幻梦的利刃。这个抛妻弃子、背叛友人的证券经纪人&#xff0c;在伦敦客厅的茶香与银勺碰撞声中&#xff0c;突然听见了远方的惊雷——“我必须画画”。如书中所言&#xff1a;​​“在满地都…

vue2往vue3升级需要注意的点(个人建议非必要别直接升级)

将 Vue 2 项目升级到 Vue 3 的过程中&#xff0c;需要重点关注以下几个难点和关键点&#xff1a; 建议小项目直接用vue3重写更快&#xff0c;bug更少 文章目录1. **Composition API 的学习与应用**2. **全局 API 的变更**3. **模板语法的兼容性变化**4. **组件选项和生命周期的…

聚焦数据资源建设与应用,浙江省质科院赴景联文科技调研交流

7月10日上午&#xff0c;浙江省质科院标准化中心副主任蒋建平、应珊婷等一行领导带队莅临景联文科技调研指导工作。双方围绕工业数据展开深度交流。座谈会上&#xff0c;景联文科技详细汇报了数据资源建设与应用方面的成果与规划&#xff0c;介绍了公共数据授权运营与对外合作的…

【Linux】系统引导修复

目录 开机引导过程 一.通电 二.BIOS环境检测 三.磁盘引导阶段 四.文件引导阶段 自动引导配置文件丢失修复 内核参数文件丢失修复 内核镜像文件丢失修复 内核初始化文件丢失修复 boot目录误删丢失修复 开机引导过程 磁盘引导阶段 /boot/grub2/grub.cfg #读取自动引…

2023年全国青少年信息素养大赛C++编程初中组决赛真题+答案解析

2023年全国青少年信息素养大赛C++编程初中组决赛真题+答案解析 编程题 第一题 判断是否存在重复的子序列 题目描述 从m 个字符中选取字符,生成n 个符号的序列,使得其中没有2 个相邻的子序列相同。 如从1,2,3,生成长度为5 的序列,序列“12321”是合格的,而“12323”和“12123”…

MySQL5.78.0锁表确认及解除锁表完全指南

目录 一、MySQL锁机制基础 1.1 锁的分类与作用 1.2 关键锁类型详解 二、锁表的常见原因与风险 2.1 引发锁表的典型场景 2.2 锁表的业务影响 三、锁表状态确认方法 3.1 基础工具&#xff1a;SHOW PROCESSLIST 3.2 MySQL 8.0锁信息查询&#xff08;推荐&#xff09; 3.2…

springboot生成pdf方案之dot/html/图片转pdf三种方式

文章目录pdf生成方案dot转pdfhtml转pdfopenhtmltopdfaspose-pdf实践playwright实践图片转pdfApache PDFBox实践框架场景匹配后记前言&#xff1a;随着客户对报告审美的提升&#xff0c;需求也越来越五彩斑斓~ 原有的dot模板已经满足不了他们了&#xff01;这篇文章主打列出各种…

前端开发—全栈开发

全栈开发者在面试前端或全栈岗位时&#xff0c;自我介绍需要巧妙融合“技术广度”与“岗位针对性”&#xff0c;避免成为泛泛而谈的“样样通样样松”。以下是结合面试官关注点和全栈特性的专业介绍策略&#xff1a;&#x1f9e0; 一、自我介绍的核心理念 突出全栈优势&#xff…

Redis生产环境过期策略配置指南:务实落地,避免踩坑

在生产环境中合理配置Redis过期策略是保障系统稳定性和内存效率的关键。以下配置建议基于实战经验&#xff0c;避免理论堆砌&#xff0c;直击核心要点&#xff1a;一、核心策略配置&#xff1a;惰性删除 定期删除&#xff08;默认已启用&#xff09;无需额外配置&#xff1a;R…