[js逆向学习] fastmoss电商网站——店铺排名

逆向目标

  • 网站:https://www.fastmoss.com/shop-marketing/tiktok
  • 接口:https://www.fastmoss.com/api/shop/shopList/
  • 参数:fm-sign

逆向分析

我们今天要分析的是店铺排名,先分析网络请求,找到目标接口
在这里插入图片描述
按照上图操作Copy as cURL,将curl 转为 python request
在这里插入图片描述
直接分析测试 python 代码,加密点只能是 cookiefm-sign参数,先来测试 cookie,代码里直接设置为 None 然后运行依然可以拿到请求结果,说明加密和 cookie 无关,那就只能是 fm-sign 参数了,如下
在这里插入图片描述

import requests


headers = {
    "fm-sign": "479f735a55570d174198e5c1ce93f515",
    "lang": "EN_US",
    "priority": "u=1, i",
    "referer": "https://www.fastmoss.com/shop-marketing/tiktok",
    "region": "US",
    "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
}
url = "https://www.fastmoss.com/api/shop/shopList/"
params = {
    "page": "1",
    "pagesize": "10",
    "order": "1,2",
    "region": "US",
    "_time": "1727184797",
    "cnonce": "57869802"
}
response = requests.get(url, headers=headers, cookies=None, params=params)

print(response.json())

逆向过程

搜索关键词 fm-sign
在这里插入图片描述
跟进去打上断点并刷新网页
在这里插入图片描述

p = m.encryptParams({...d}, h);
i["fm-sign"] = p

加密入口我门找到了,跟进去看下
在这里插入图片描述
把这个函数拷贝到本地执行

window = global;
function encryptParams(e) {
  let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : ""
    , n = window.Object.keys(e).sort()
    , o = "";
  n.forEach(t => {
      o += t + e[t] + this.salt
  }
  );
  let r = d()(o + t).toString()
    , a = ""
    , i = 0
    , l = r.length - 1;
  for (; i < r.length && !(i >= l); i++,
  l--)
      a += (window.parseInt(r[i], 16) ^ window.parseInt(r[l], 16)).toString(16);
  return a + r.substring(i)
}
var e = {
  "page": 1,
  "pagesize": 10,
  "order": "1,2",
  "region": "US",
  "_time": 1727185503,
  "cnonce": 83043105
};
var result = encryptParams(e);
console.log(result);

执行报错 let r = d()(o + t).toString() ^ReferenceError: d is not defined,我们去网站执行到这步分析
在这里插入图片描述
r是 32位16进制 字符串,猜测大概率是 md5 值,我们直接来验证下有没有魔改,分别在网页上和本地对字符串 1md5,然后比较结果

// 网站求 md5 值
d()('1').toString()
>> c4ca4238a0b923820dcc509a6f75849b
// 本地求 md5 值
var CryptoJS = require("crypto-js");
console.log(CryptoJS.MD5('1').toString());
>> c4ca4238a0b923820dcc509a6f75849b

网页和本地结果一致,说明网站的 md5 方法是没有魔改的标准方法,到这几 fm-sign 就分析完了,我们直接使用 CryptoJS.MD5 替换 d() 方法即可

逆向总结

完整的 js 代码如下

var CryptoJS = require("crypto-js");
window = global;
this.salt = "asjdfoaur3ur829322";
function encryptParams(e) {
  let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : ""
    , n = window.Object.keys(e).sort()
    , o = "";
  n.forEach(t => {
      o += t + e[t] + this.salt
  }
  );
  let r = CryptoJS.MD5(o + t).toString()
    , a = ""
    , i = 0
    , l = r.length - 1;
  for (; i < r.length && !(i >= l); i++,
  l--)
      a += (window.parseInt(r[i], 16) ^ window.parseInt(r[l], 16)).toString(16);
  return a + r.substring(i)
}
var e = {
  "page": 1,
  "pagesize": 10,
  "order": "1,2",
  "region": "US",
  "_time": 1727185503,
  "cnonce": 83043105
};
var result = encryptParams(e);
console.log(result);

原创声明:未经许可,不得转载。
如有侵权,请联系作者删除删除

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JUC高并发编程2:Lock接口

1 synchronized 1.1 synchronized关键字回顾 synchronized 是 Java 中的一个关键字&#xff0c;用于实现线程间的同步。它提供了一种简单而有效的方式来控制对共享资源的访问&#xff0c;从而避免多个线程同时访问同一资源时可能出现的竞态条件&#xff08;race condition&am…

.net core8 使用JWT鉴权(附当前源码)

说明 该文章是属于OverallAuth2.0系列文章&#xff0c;每周更新一篇该系列文章&#xff08;从0到1完成系统开发&#xff09;。 该系统文章&#xff0c;我会尽量说的非常详细&#xff0c;做到不管新手、老手都能看懂。 说明&#xff1a;OverallAuth2.0 是一个简单、易懂、功能强…

LeetcodeTop100 刷题总结(二)

LeetCode 热题 100&#xff1a;https://leetcode.cn/studyplan/top-100-liked/ 文章目录 八、二叉树94. 二叉树的中序遍历&#xff08;递归与非递归&#xff09;补充&#xff1a;144. 二叉树的前序遍历&#xff08;递归与非递归&#xff09;补充&#xff1a;145. 二叉树的后序遍…

你的提交信息还在拖后腿?看这里,提升代码质量的绝招!

文章目录 前言一、什么是约定式提交&#xff1f;二、创建新仓库三、将代码推送到远程仓库的步骤1.检查当前远程仓库2.添加代码到暂存区3. 进行约定式提交4. 推送代码到远程仓库5. 完成推送 总结 前言 在当今软件开发领域&#xff0c;Git已经成为最广泛使用的版本控制系统之一。…

java算法OJ(1)位运算

目录 1.前言 2.正文 2.1位运算符号 2.1俩数相除 2.1.1题目 2.1.2示例 2.1.3题解 2.2二进制求和 2.2.1题目 2.2.2示例 2.2.3题解 2.3只出现一次的数字 2.3.1题目 2.3.2示例 2.3.3题解 2.4只出现一次的数字&#xff08;进阶版&#xff09; 2.4.1题目 2.4.2示例…

【ComfyUI】控制光照节点——ComfyUI-IC-Light-Native

原始代码&#xff08;非comfyui&#xff09;&#xff1a;https://github.com/lllyasviel/IC-Light comfyui实现1&#xff08;600星&#xff09;&#xff1a;https://github.com/kijai/ComfyUI-IC-Light comfyui实现2&#xff08;500星&#xff09;&#xff1a;https://github.c…

cobbler自动批量安装多版本操作系统

本次虚拟化环境为VMware Workstation Pro&#xff0c;cobbler服务端为CentOS7.9&#xff0c;需要自动安装的版本为CentOS7.9和CentOS8.1 目录 一、安装cobbler服务端1、修改YUM源2、关闭防火墙3、安装软件包4、cobbler环境配置5、解决语法问题6、启动服务7、导入镜像8、自定义…

Spring自定义参数解析器

在这篇文章中&#xff0c;我们认识了参数解析器和消息转换器&#xff0c;今天我们来自定义一个参数解析器。 自定义参数解析器 实现HandlerMethodArgumentResolver的类&#xff0c;并注册到Spring容器。 Component&#xff0f;&#xff0f;注册到Spring public class UserAr…

统信服务器操作系统【Cron定时任务服务】

Cron定时任务服务服务介绍、服务管理、服务配置 文章目录 一、功能概述二、功能介绍1. Cron 服务管理2.Cron 服务管理3.Cron 服务配置run-parts一、功能概述 cron是一个可以用来根据时间、日期、月份、星期的组合来 调度对周期性任务执行的守护进程。利用 cron 所提供的功能,可…

第十四届蓝桥杯嵌入式国赛

一. 前言 本篇博客主要讲述十四届蓝桥杯嵌入式的国赛题目&#xff0c;包括STM32CubeMx的相关配置以及相关功能实现代码以及我在做题过程中所遇到的一些问题和总结收获。如果有兴趣的伙伴还可以去做做其它届的真题&#xff0c;可去 蓝桥云课 上搜索历届真题即可。 二. 题目概述 …

七种修复错误:由于找不到msvcr110.dll 无法继续执行的方法

当你在运行某些程序时遇到“找不到msvcr110.dll”的错误提示&#xff0c;这通常意味着你的系统缺少了Microsoft Visual C 2012 Redistributable包中的一个重要文件。这个DLL文件是Microsoft Visual C Redistributable的一部分&#xff0c;用于支持许多使用Visual C编写的软件和…

Elasticsearch:检索增强生成背后的重要思想

作者&#xff1a;来自 Elastic Jessica L. Moszkowicz 星期天晚上 10 点&#xff0c;我九年级的女儿哭着冲进我的房间。她说她对代数一无所知&#xff0c;注定要失败。我进入超级妈妈模式&#xff0c;却发现我一点高中数学知识都不记得了。于是&#xff0c;我做了任何一位超级妈…

多颜色绘制语义分割/变化检测结果图

在论文绘图时&#xff0c;传统的二元语义分割结果图颜色单一&#xff08;下图左&#xff09;&#xff0c;所以论文中常根据混淆矩阵类别使用多颜色进行绘制&#xff08;下图右&#xff09;&#xff0c;可以看到&#xff0c;结果的可视化效果更好。 以下是绘制代码&#xff1a; …

Windows系统的Tomcat日志路径配置

文章目录 引言I Windows系统的Tomcat日志路径配置配置常规日志路径访问日志路径配置,修改server.xmlII 日志文件切割:以分隔割tomcat 的 catalina.out 文件为例子通过Linux系统自带的切割工具logrotate来进行切割引言 需求:C盘空间不足,处理日志文件,tomcat日志迁移到D盘…

Java基础知识扫盲

目录 Arrays.sort的底层实现 BigDecimal(double)和BigDecimal(String)有什么区别 Char可以存储一个汉字吗 Java中的Timer定时调度任务是咋实现的 Java中的序列化机制是咋实现的 Java中的注解是干嘛的 Arrays.sort的底层实现 Arrays.sort是Java中提供的对数组进行排序的…

信用卡存量经营读书笔记

信用卡的各项收益和损失分析表 用杜邦分析法拆利润如下 信用卡要不要烧钱&#xff1f;不要&#xff0c;因为没有网络效应&#xff08;用户量增加带来的优惠比较少&#xff09;和赢家通吃的情况 线上获客的几种方式&#xff1a;引流分成、某个项目的联名信用卡、营业收入分成 …

爬虫到底难在哪里?

如果你是自己做爬虫脚本开发&#xff0c;那确实难&#xff0c;因为你需要掌握Python、HTML、JS、xpath、database等技术&#xff0c;而且还要处理反爬、动态网页、逆向等情况&#xff0c;不然压根不知道怎么去写代码&#xff0c;这些技术和经验储备起码得要个三五年。 比如这几…

【D3.js in Action 3 精译_023】3.3 使用 D3 将数据绑定到 DOM 元素

当前内容所在位置&#xff1a; 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可视化最佳实践&#xff08;下&#xff09;1.4 本…

【开源免费】基于SpringBoot+Vue.JS教师工作量管理系统(JAVA毕业设计)

本文项目编号 T 043 &#xff0c;文末自助获取源码 \color{red}{T043&#xff0c;文末自助获取源码} T043&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

两数之和、三数之和、四数之和

目录 两数之和 题目链接 题目描述 思路分析 代码实现 三数之和 题目链接 题目描述 思路分析 代码实现 四数之和 题目链接 题目描述 思路分析 代码实现 两数之和 题目链接 LCR 179. 查找总价格为目标值的两个商品 - 力扣&#xff08;LeetCode&#xff09; 题目…