JS案例分析-某国际音x-tt-params参数分析

news2024/11/17 9:58:42

今天我们要分析的网站是:https://www.tiktok.com/@selenagomez?lang=en,参数名字叫x-tt-params

先来抓个包

这个接口是用户视频列表url,参数叫x-tt-params,该接口中还有其他参数像msTokenX-Bogus_signature经过多次的测试,发现这三个参数不带也能请求到数据,但是x-tt-params必须携带,否则会报错。

在这里插入图片描述

全局搜索下这个关键词x-tt-params,可以看到就一个搜索结果,点进去看看。

在这里插入图片描述
之后我们来到了第 33285行-33295行。

其中核心的代码如下:

 const i = (0,
 _.J4)(c);
 p.headers = Object.assign(Object.assign({}, null !== (a = p.headers) && void 0 !== a ? a : {}), {
     "x-tt-params": i
 }),

简单的看了下,x-tt-params参数是由i 来的,而i又是由 (0,_.J4)(c) 这个方法返回来的,所以我们只需要看看 (0,_.J4)(c)里面的逻辑如何计算的就可。

在这里插入图片描述
打个断点,看样子是进去了,证明此处就是加密代码。在控制台输入c参数,看打印是一个数组,很像请求url后面请求的参数。

单步点进去看看,然后来到这里

在这里插入图片描述

简单的分析下,首先是声明了一个数组t,然后循环遍历传进来的字典参数e,拿到key和value,组合成一个的新的字符串,再添加到数组t中。

最后在尾部追加一个"is_encryption=1"(算是个盐吧)。

继续断点跟进去,到这里。

 const i = ((e,t)=>{
     let i = e.toString();
     const o = i.length;
     return o < 16 ? i = new Array(16 - o + 1).join("0") + i : o > 16 && (i = i.slice(0, 16)),
     i
 }
 )("webapp1.0+20210628")

能看到这是根据入参参数e,最后返回一个固定的字符串,也就是webapp1.0+202106

在这里插入图片描述

接下来就是AES函数加密主体,可以看到还是CBC模式,填充padding依旧是Pkcs7

n = o.enc.Utf8.parse(i)
return o.AES.encrypt(e, n, {
     iv: n,
     mode: o.mode.CBC,
     padding: o.pad.Pkcs7
 }).toString()

其中ei和n我们已经知道了。e就是待加密数据,i 即是AES加密的key,也是秘钥。
在这里插入图片描述

然后把代码抠出来,在本地跑一下,可以很清晰的看到就是return 1, 2, 3的形式,在js中这样的写法就是先顺序执行1和2,最后返回3的意思。

在这里插入图片描述

完整的js代码如下:

var CryptoJS = require("crypto-js");
get_sign = e=>{
    const t = [];
    return Object.keys(e).forEach((i=>{
            const o = `${i}=${e[i]}`;
            t.push(o)
        }
    )),
        t.push("is_encryption=1"),
        ((e,t)=>{
                const i = ((e,t)=>{
                        let i = e.toString();
                        const o = i.length;
                        return o < 16 ? i = new Array(16 - o + 1).join("0") + i : o > 16 && (i = i.slice(0, 16)),
                            i
                    }
                )("webapp1.0+20210628")
                    , n = CryptoJS.enc.Utf8.parse(i);
                return CryptoJS.AES.encrypt(e, n, {
                    iv: n,
                    mode: CryptoJS.mode.CBC,
                    padding: CryptoJS.pad.Pkcs7
                }).toString()
            }
        )(t.join("&"))
}
// var param = {aid: 1988, app_name: 'tiktok_web', channel: 'tiktok_web', device_platform: 'web_pc', device_id: '7160487937061439018', …}
var params = {
        "aid": 1988,
        "app_name": "tiktok_web",
        "channel": "tiktok_web",
        "device_platform": "web_pc",
        "device_id": "7160487937061439018",
        "region": "US",
        "priority_region": "",
        "os": "mac",
        "referer": "https://www.tiktok.com/discover?lang=en",
        "root_referer": "https://www.tiktok.com/discover?lang=en",
        "cookie_enabled": true,
        "screen_width": 1920,
        "screen_height": 1080,
        "browser_language": "en",
        "browser_platform": "MacIntel",
        "browser_name": "Mozilla",
        "browser_version": "5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36",
        "browser_online": true,
        "app_language": "en",
        "webcast_language": "zh-Hant-TW",
        "tz_name": "Asia/Shanghai",
        "is_page_visible": true,
        "focus_state": true,
        "is_fullscreen": false,
        "history_len": 1,
        "battery_info": 0.96,
        "from_page": "user",
        "secUid": "MS4wLjABAAAATtFKZYaOb-9nF_w7QRi4y64d45mvuWuwf5ACEd3c6f-GTlfW9rJJlKfV2vWhg0aw",
        "count": 30,
        "cursor": "1653955582000",
        "language": "zh-Hant-TW"
    }

var xttparam = get_sign(params)
console.log("AES加密后结果:",xttparam)

参考文章:https://mp.weixin.qq.com/s/v9qBcdX6TMFUgfZbG_jcPw

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cartesi 2023 年 4 月回顾

查看你不想错过的更新 2023年5月1日&#xff0c;感谢Cartesi生态系统中所有了不起的构建者&#xff01; 在一个激动人心的旅程之后&#xff0c;我们的首届全球线上黑客马拉松正式结束了&#xff01;有超过200名注册建造者参加&#xff0c;见证了所有参与者展示的巨大才华和奉献…

【Android】串口通信的理论与使用教程

Android系统诞生这十几年以来&#xff0c;Android开发工程师岗位经历了由盛转衰的过程&#xff0c;目前纯UI的Android APP已经鲜有公司愿意花费巨资去开发&#xff0c;Android APP开发的业务也仅剩游戏、物联网&#xff08;Internet of Things&#xff0c;简称IoT&#xff09;等…

springcloud:新一代分布式定时任务框架——PowerJob

0. 引言 之前我们讲解过主流的分布式定时任务框架xxl-job&#xff0c;随着技术的迭代更新&#xff0c;更多的定时任务框架也开始出现&#xff0c;今天我们来看一看新一代的定时任务框架PowerJob 1. PowerJob简介 PowerJob是基于java开发的企业级的分布式任务调度平台&#x…

Java设计原则之单一职责原则、开闭原则、里氏代换原则

文章目录 面向对象设计原则概述 单一职责原则 开闭原则 里氏代换原则 面向对象设计原则概述 软件的可维护性&#xff08;Maintainability&#xff09;和可复用性&#xff08;Reusability&#xff09;是两个非常重要的用于衡量软件质量的属性&#xff0c;软件的可维护性是指软…

Ubuntu常用命令总结

目录 1&#xff09;安装包命令及下载包命令 2&#xff09;阅读协议内容 3&#xff09;执行sh文件&#xff1a; 4&#xff09;创建虚拟环境 5&#xff09;激活虚拟环境 6&#xff09;虚拟环境中安装包 7&#xff09;安装上传代码工具 8&#xff09;代码上传 9&#xff09…

传输控制协议(TCP)知识点总结

文章目录 传输控制协议&#xff08;TCP)知识点总结介绍数据包格式TCP连接的建立和关闭三次握手四次挥手一张图展示这些过程 其他知识 传输控制协议&#xff08;TCP)知识点总结 维基百科: 传输控制协议&#xff08;TCP&#xff09;是Internet协议套件中的主要协议之一。它起源于…

五种最危险的新兴网络攻击技术

SANS研究所的网络专家揭示了包括网络罪犯和民族国家行为者在内的网络攻击者正在使用的五种最危险的新兴网络攻击技术。在旧金山举行的RSA网络安全会议上&#xff0c;由SANS研究所的几位分析师组成的讨论组讨论了新兴的网络攻击战术、技术和程序&#xff0c;并提供了如何为企业做…

使用GLSL来实现实时滤镜的效果

1. 先来明确几个概念 1.1 OpenGL OpenGL 全称为 Open Graphics Library&#xff08;开放图形库&#xff09;。 是用于渲染 2D 或 3D 图像的跨语言跨平台的应用程序编程接口&#xff0c;用于CPU控制GPU做图像渲染&#xff0c;是一套API。 提供设计人员一个共同的硬件驱动标准…

虚函数、静态绑定和动态绑定

静态绑定 class Base { public:Base(int data) :ma(data) {}void show() { cout << "Base::show()" << endl; }void show(int) { cout << "Base::show(int)" << endl; }protected:int ma; };class Derive : public Base { public…

Go | 一分钟掌握Go | 10 - 反射

作者&#xff1a;Mars酱 声明&#xff1a;本文章由Mars酱编写&#xff0c;部分内容来源于网络&#xff0c;如有疑问请联系本人。 转载&#xff1a;欢迎转载&#xff0c;转载前先请联系我&#xff01; 前言 反射你以为只在Java中有吗&#xff1f;Go也有反射机制&#xff0c;很多…

【JavaEE】应用层自定义协议及UDP协议

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE初阶 本篇文章将为大家介绍应用层中UDP协议~~ 在应用层这里&#xff0c;虽然存在一些现有的协议&#xff08;HTTP&#xff09;&#xff0c;但是也有很多情况&#xff0c;需要程序猿自定制协议&a…

OJ 功能介绍 使用手册

目录 服务器配置 OJ界面展示 用户管理 一、批量导入&#xff08;从方便管理角度建议以 学生姓名 作为 用户名 &#xff09; 二、批量生成临时用户 后期修改成需要的用户名和密码 &#xff08;学生登录后修改密码&#xff09; 三、用户自行注册&#xff08;填写邮箱获取验证码…

Nmap入门到高级【第九章】

预计更新Nmap基础知识 1.1 Nmap简介和历史 1.2 Nmap安装和使用方法 1.3 Nmap扫描技术和扫描选项 Nmap扫描技术 2.1 端口扫描技术 2.2 操作系统检测技术 2.3 服务和应用程序检测技术 2.4 漏洞检测技术 Nmap扫描选项 3.1 扫描类型选项 3.2 过滤器选项 3.3 探测选项 3.4 输出选项…

【致敬未来的攻城狮计划】— 连续打卡第二十天:RA2E1_UART —— 串口通信例程

系列文章目录 1.连续打卡第一天&#xff1a;提前对CPK_RA2E1是瑞萨RA系列开发板的初体验&#xff0c;了解一下 2.开发环境的选择和调试&#xff08;从零开始&#xff0c;加油&#xff09; 3.欲速则不达&#xff0c;今天是对RA2E1 基础知识的补充学习。 4.e2 studio 使用教程 5.…

Docker consul服务注册与发现

目录 一、服务注册与发现 1、什么是服务注册与发现 2、什么是consul 3、consul提供的一些关键特性 4、容器更新与发现 二、基于nginx与consul构建自动发现即高可用的Docker服务架构 consul服务器部署 1、建立consul 2、查看集群信息 3、通过http获取集群信息 regist…

SpringBoot+vue文件上传下载预览分片上传

学习链接 Blob & File 上传文件 前台 整个过程&#xff0c;就是在使用FormData 添加 上File&#xff08;这个Blob&#xff09;&#xff0c;并且key要和后台的名字对应上在点击上传按钮开始上传之前&#xff0c;使用了URL.createObjectURL(File)创建blobUrl&#xff0c;…

MySQL数据库之库表管理

一、常用的数据类型&#xff1a; 类型含义tinyint(n)1个字节&#xff0c;范围(-128~127)smallint(n)2个字节&#xff0c;范围(-32768~32767)mediumint(n)3个字节&#xff0c;范围(-8388608~8388607)int(n)4个字节(32个比特位)&#xff0c;整数型&#xff0c;范围(-2147483648~…

JavaEE - 网络编程

一、网络编程基础 为什么需要网络编程&#xff1f; 用户在浏览器中&#xff0c;打开在线视频网站&#xff0c;如优酷看视频&#xff0c;实质是通过网络&#xff0c;获取到网络上的一个视频资源。 与本地打开视频文件类似&#xff0c;只是视频文件这个资源的来源是网络。 相比本…

KALI入门到高级【第五章】

预计更新第一章 入门 1.1 什么是Kali Linux&#xff1f; 1.2 安装Kali Linux 1.3 Kali Linux桌面环境介绍 1.4 基本命令和工具 第二章 信息收集 1.1 网络扫描 1.2 端口扫描 1.3 漏洞扫描 1.4 社交工程学 第三章 攻击和渗透测试 1.1 密码破解 1.2 暴力破解 1.3 漏洞利用 1.4 特…

模糊PID(模糊规则表)

模糊PID的模糊化相关内容,请参看下面的博客文章: PLC模糊控制模糊PID(梯形图实现+算法分析)_RXXW_Dor的博客-CSDN博客博途PLC的模糊PID控制详细内容请查看下面的博客文章:Matlab仿真+博途PLC模糊PID控制完整SCL源代码参考(带模糊和普通PID切换功能)_博途怎么实现模糊pid_…