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

news2024/11/18 19:57:51

逆向目标

  • 网站: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);

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

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

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

相关文章

Redis: 特点,优势,与其他产品的区别以及高并发原理

入门Redis概述 1 &#xff09;选择Redis是因为其高性能 因为 Redis 它数据存储的机制是存在内存中的&#xff0c;减少了传统关系数据库的磁盘IO它是单线程的保证了原子性&#xff0c;它还提供了事务&#xff0c;锁等相关的机制 2 &#xff09;Redis 环境安装配置 linux 或 d…

STM32 map 文件浅析

目录 一、概述二、Section Cross References三、Removing Unused input sections from the image四、Memory Map of the image1、Local Symbols2、全局符号&#xff08;Global Symbols&#xff09; 五、Image Symbol Table六、Image component sizes 一、概述 .map 文件是编译…

Shader Graph Create Node---Input

四、Input 1、Basic 一些基础的变量节点 2、Geometry 1)、Bitangent Vector(双切线向量) 通常与顶点位置、法线向量和切线向量一起使用。 法线向量&#xff08;Normal Vector&#xff09;&#xff1a;垂直于表面的向量。 切线向量&#xff08;Tangent Vector&#xff09;…

Vue3项目开发——新闻发布管理系统(八)

文章目录 十、新闻管理模块设计开发1、新闻管理主页面设计1.1 基本架构搭建1.1.1 搜索表单1.1.2 新闻主表格样式(静态数据模拟渲染)1.2 新闻分类选择框1.2.1 新建组件1.2.2 页面中导入渲染1.2.3 调用接口,动态渲染下拉分类,设计成 v-model 的使用方式1.2.4 父组件定义参数绑定…

共建智能座舱AI应用生态 夸克合作斑马智行开拓AI搜索新场景

近日&#xff0c;在2024云栖大会上&#xff0c;夸克与斑马智行达成合作&#xff0c;将面向汽车座舱场景&#xff0c;为用户打造专属AI新体验。夸克以AI搜索为中心的一站式AI服务融入座舱数字化生态&#xff0c;进一步拓展使用场景和能力边界。 9月20日&#xff0c;斑马智行发布…

【Geoserver使用】REST API调用(工作空间部分)

文章目录 前言一、Geoserver REST API(GeoServer Workspace)二、GeoServer Workspace接口使用1.GET请求 /workspaces2.POST请求 /workspaces3.GET请求 /workspaces/{workspaceName}4.PUT /workspaces/{workspaceName}5.DELETE /workspaces/{workspaceName} 总结 前言 根据Geos…

【Day20240924】联邦学习中的方法 改进

文章目录 前言一、FedAvg二、FedProx三、MOON四、FedDyn五、FedAsync六、PORT七、ASO-Fed八、FedBuff九、FedSA 前言 几种异步的方法&#xff1a; FedAsync PORT ASO-Fed FedBuff FedSA 几种同步的方法&#xff1a; FedAvg FedProx MOON FedDyn 一、FedAvg FedAvg基本步骤&a…

MySQL 中存储过程参数的设置与使用

《MySQL 中存储过程参数的设置与使用》 在 MySQL 数据库中&#xff0c;存储过程是一组预先编译好的 SQL 语句集合&#xff0c;可以接受参数并返回结果。使用存储过程可以提高数据库的性能和可维护性&#xff0c;同时也可以减少网络流量和代码重复。那么&#xff0c;如何在 MyS…

UEFI EDK2框架学习 (一)

01 Shell界面打印 执行qemu指令后 qemu-system-x86_64 -drive ifpflash,formatraw,fileOVMF.fd -nographic -net none出现shell界面 02 在UEFI shell中创建APP 创建SimplestApp文件夹以及SimplestApp.c、SimplestApp.inf cd edk2 mkdir SimplestAppuuidgen // generate …

ABB 机器人与 Profinet 转 EthernetIP 网关的高效连接

Profinet转EthernetIP网关在工业自动化领域发挥着至关重要的作用。它主要的功能就是实现不同网络协议之间的数据交互&#xff0c;为各种设备的连接与协同工作搭建了桥梁。 以连接ABB机器人为例&#xff0c;Profinet转EthernetIP网关能够将ABB机器人高效地接入到不同的网络系统…

transformer模型写诗词

加入会员社群&#xff0c;免费获取本项目数据集和代码&#xff1a;点击进入>> 1. 项目简介 该项目是基于A035-transformer模型的诗词生成系统&#xff0c;旨在通过深度学习技术实现古诗词的自动化创作。项目的背景源自当前自然语言处理领域的迅速发展&#xff0c;特别是…

工业交换机故障快速排查的方法有哪些

在现代工业自动化的环境中&#xff0c;工业交换机作为网络连接的重要设备&#xff0c;其稳定性和可靠性至关重要。然而&#xff0c;实际使用过程中难免会遇到各种故障&#xff0c;这对生产线和系统的正常运作造成了影响。为了有效应对这些问题&#xff0c;下面将介绍一些工业交…

第P8周:YOLOv5-C3模块实现

本文为&#x1f517;365天深度学习训练营 中的学习记录博客原作者&#xff1a;K同学啊 本次将利用YOLOv5算法中的C3模块搭建网络。 我的环境&#xff1a; ●操作系统&#xff1a;ubuntu 22.04 ●GPU显卡:RTX 3090(24GB) * 1 ●语言环境&#xff1a;python 3.12.3 ●编译器&…

鸿蒙开发的基本技术栈及学习路线

随着智能终端设备的不断普及与技术的进步&#xff0c;华为推出的鸿蒙操作系统&#xff08;HarmonyOS&#xff09;迅速引起了全球的关注。作为一个面向多种设备的分布式操作系统&#xff0c;鸿蒙不仅支持手机、平板、智能穿戴设备等&#xff0c;还支持IoT&#xff08;物联网&…

python安装本地的.whl文件报错:Neither ‘setup.py’ nor ‘pyproject.toml’ found

前言 本文章所说的是笔者安装时遇到了报错&#xff0c;查阅相关资料后解决了这个问题&#xff0c;不一定会解决大家的问题。 正文 我参考了这篇文章&#xff0c;但还是没有解决问题。之后我尝试把该.whl文件放到anaconda文件夹中&#xff08;D:\Anaconda\envs&#xff09;&a…

干货 | 图像分割概述 ENet 实例

本文为 AI 研习社编译的技术博客&#xff0c;原标题 &#xff1a; Image Segmentation Overview & ENet Implementation 作者 | Aviv Shamsian 翻译 | sherry3255、alexchung 校对 | 邓普斯杰弗 审核 | 酱番梨 整理 | 立鱼王 原文链接&#xff1a; https://medium.com/mist…

Rolling Update

滚动更新是一次只更新一小部分副本&#xff0c;成功之后在更新更多的副本&#xff0c;最终完成所有的副本的更新&#xff0c;滚动更新的最大好处是零停机&#xff0c;整个更新过程始终有副本在运行&#xff0c;从而保证了业务的连续性 部署三副本的应用&#xff0c;初始镜像为…

Qt_事件的介绍

目录 1、理解事件 2、处理事件QEvent 3、键盘事件QKeyEvent 4、鼠标事件QMouseEvent 4.1 鼠标点击事件 4.2 鼠标释放事件 4.3 鼠标移动事件 5、滚轮事件QWheelEvent 6、定时器事件QTimerEvent 7、窗口事件QMoveEvent 8、事件分发器event 9、事件过滤器even…

C语言练习:通讯录

简单版代码讲解&#xff1a; 这个版本不涉及文件操作以及动态内存分配&#xff0c;有助于理解代码。 文件管理 这里我们分了三个文件&#xff0c;.h 文件里给出类型声明和函数声明&#xff0c;contact.c 文件是具体的实现&#xff0c;test.c文件里是游戏的实现逻辑。 test.c…

怎么一键更换PPT模板?2个做PPT必备的办公神器推荐!

在主打快节奏的当下&#xff0c;一份精美的PPT演示文稿往往能够为你赢得更多的关注和机会。但不可否认的是&#xff0c;制作一份高质量的PPT并非易事&#xff0c;特别是当你需要频繁更换PPT模板以应对不同场合时&#xff0c;根本抽不出时间来逐一修改。 本文将为大家介绍2款强…