JS爬虫实战之Fastmoss

Fastmoss参数逆向

    • 逆向前准备
    • 思路
      • 1- 确认接口
      • 2- 参数确认
      • 3- 重试校验参数逻辑
      • 4- 寻找逆向入口
          • 1- 方式一(search搜索):
          • 2- 方式二(堆栈搜索):
      • 5- 获取加密算法
          • 1- fm-sign字段是有zn来的,我们查看zn是如何得到的。
          • 2- zn是由kt对象中的encryptParams方法,以qe.Z为原始函数,生成的函数中,分别调用了Rn和da来的。
          • 3- 那我们就需要看下Rn和da参数。
      • 6- 爬虫代码编辑
    • 结语

逆向前准备

首先我们得有Fastmoss账号,否则是无法抓取到数据的。拥有账号后,我们直接进入达人选项。

思路

逆向步骤一般分为:

  1. 接口确认: 找到我们需要的接口进行分析;
  2. 参数确认: 在接口中提炼出我们需要处理的参数;
  3. 重试校验参数逻辑: 查看参数之间关系;
  4. 寻找逆向入口: 找到参数生成位置 ;
  5. 获取加密算法: 实现参数逻辑;
  6. 爬虫代码编辑: 爬虫代码编写;

1- 确认接口

多次请求,很容易就能插到数据接口
在这里插入图片描述

2- 参数确认

1- 对不同页进行多次请求
2- 对同一页进行多次请求

对照每个接口进行数据比较,payload中发现两个随机参数,其中 _time 为时间戳。cnonce需要查看从哪里来的。
在这里插入图片描述

3- 重试校验参数逻辑

为了校验是否有其他参数。我们需要对每一个参数均进行校验。通过复制curl校验出必要参数如下(具体校验步骤见往期爬虫文章)。
params中:
page: 页数
region: 地区
order: 类目(达人,商品等)
pagesize: 一页多少数据
_time: 时间戳
cnonce: 校验参数

params = {
        "page": page,				# 页数
        "region": "US",				# 地区
        "order": "2,2",				# 类目(达人,商品等)
        "pagesize": "10",			# 一页多少数据
        "_time": _time,				# 时间戳
        "cnonce": cnonce		# 校验参数
    }

headers = {
        "fm-sign": fm_sign			# 根据 "_time" 和 "cnonce"生成的参数
    }

cookie= {} 			# cookie中为登录信息

在这里插入图片描述

4- 寻找逆向入口

这里有两种方法。一种取巧, 一种耗时。大家可以自行选择。

1- 方式一(search搜索):

先说说第一种。 直接搜索 “_time” 和 “cnonce”。 有且仅找到一条数据,仔细一看,参数的生成逻辑就在这里。
在这里插入图片描述

2- 方式二(堆栈搜索):

我们从接口堆栈中进入。内容较多,后续更新,也会跟到dn[“fm-sign”]生成的地方。
在这里插入图片描述

5- 获取加密算法

读代码可知:

1- fm-sign字段是有zn来的,我们查看zn是如何得到的。
dn["fm-sign"] = zn
2- zn是由kt对象中的encryptParams方法,以qe.Z为原始函数,生成的函数中,分别调用了Rn和da来的。
zn = kt.encryptParams((0, qe.Z)({}, Rn), da)
3- 那我们就需要看下Rn和da参数。

da的生成逻辑如下

da = g != null && g.data ? JSON.stringify(g == null ? void 0 : g.data) : "", zn = ""

Rn的生成逻辑如下

Rn = ht((0, qe.Z)((0, qe.Z)({}, g.params), {}, { _time: Math.floor(Date.now() / 1e3),
                    cnonce: Math.floor(1e7 + Math.random() * 9e7)}))

经过校验,Rn就是我们的params参数。da为空字符串。 qe.z是一个大的存储对象。那剩下的就是kt.encryptParams函数了。经过跟进,发现该函数就是加密逻辑。

看下加密逻辑,解读代码:

g为接口中的params参数。
代码逻辑如下:
	1- 依次获取params中的参数和值。与o.salt(固定值)进行拼接。生成me
	2- 用函数Mo对me参数进行处理,形成一个加密字符串。
	3- 对加密字符串进行for循环体中的计算拼接。生成返回值dn。此dn就是header中的fm-sign

请添加图片描述

6- 爬虫代码编辑

我们知道参数生成逻辑之后,就需要构建爬虫代码了。以上分析中还有一个点需要处理,那就是Mo()函数。
在我们持续对Mo进行跟进时,我们会越来越熟悉
在这里插入图片描述
如果上面还不够明显,到了reset函数,我们应该有所怀疑了。这是个加密算法。
在这里插入图片描述
直到我们跟到了这个地方。识字的都能看到,这是个MD5算法。
在这里插入图片描述
一步步走完,并未发现异常,或者很离谱的魔改。那遵循一切从简原则,我们直接使用python中的MD5包去试试。
在这里插入图片描述
经过校验,MD5确实没有魔改。那就简单很多了。直接调用python中的md5方法。
在这里插入图片描述

结语

ok,以上就是全部内容。回过头来是个很简单的网站。难度初级,快则15分钟搞定,慢则一天。我们重新回顾一下思路。

1- 校验参数。发现header中的“fm-sign”,params中的 “_time” 和 “cnonce” 三个参数是不可或缺的。
2- 查找加密入口。直接搜索关键词:发现header中的“fm-sign”参数是通过params中的 “_time” 和 “cnonce”生成而来。
3- 进入加密入口,找到加密函数。解析后,可以知道Mo是个加密算法。其余均正常。
4- 解决。我们选择了简单的python导包MD5,或者也可以直接扣代码将MD5抠出。

因为本网站可以直接通过搜索找到加密入口。而加密算法MD5未魔改。所以很快就能搞定。如果模糊了搜索关键词,MD5进行简单魔改后。改网站可能就会难度翻倍。

最后,需要源码,关注留言博主。

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

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

相关文章

机器学习 C++ 的opencv实现SVM图像二分类的训练 (二)【附源码】

本节讲机器学习 C 的opencv实现SVM图像二分类的训练&#xff0c;下节讲测试&#xff1a; 数据集合data内容如下&#xff1a; 下载地址为&#xff1a;https://download.csdn.net/download/hgaohr1021/89506900 #include <stdio.h> #include <time.h> #include…

C语言课程回顾:六、C语言循环控制

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 C语言循环控制 6 循环控制6.1 概述6.2 goto语句以及用goto语句构成循环6.3 while语句6.4 do-while语句6.5 for语句6.6 循环的嵌套6.7 几种循环的比较6.8 break和continue语句…

Windows系统安装NVM,实现Node.js多版本管理

目录 一、前言 二、NVM简介 三、准备工作 1、卸载Node 2、创建文件夹 四、下载NVM 五、安装NVM 六、使用NVM 1、NVM常用操作命令 2、查看NVM版本信息 3、查看Node.js版本列表&#xff1b; 4、下载指定版本Node.js 5、使用指定版本Node.js 6、查看已安装Node.js列…

Java知识点整理 18 — Lambda表达式

一. 简介 Lambda 表达式是函数式编程思想的体现&#xff0c;强调做什么&#xff0c;而不是以什么方式去做。 面向对象编程思想强调的是对象&#xff0c;必须通过对象的形式来做一些事情。比如多线程执行任务&#xff0c;需要创建对象&#xff0c;对象需要实现指定接口&#x…

Rust监控可观测性

可观测性 在监控章节的引言中&#xff0c;我们提到了老板、前端、后端眼中的监控是各不相同的&#xff0c;那么有没有办法将监控模型进行抽象、统一呢&#xff1f; 来简单分析一下&#xff1a; 业务指标实时展示&#xff0c;这是一个指标型的数据( metric )手机 APP 上传的数…

若依 ruoyi vue上传控件 el-upload上传文件 判断是否有文件 判断文件大小

console.info(this.$refs.upload.uploadFiles.length)//this.$refs.upload.uploadFiles.length 获取当前上传控件中已选择的文件大小//判断是否存在已上传文件 if(this.$refs.upload.uploadFiles.length 0){this.$modal.msgWarning("请上传文件");return; }

轻松配置,无需重复操作:PyCharm新建项目后,如何让当前新建项目使用既有虚拟环境

1、点击右上角的设置按钮 2、点击Settings 3、点击profect 4、点击python Interprter&#xff0c;这个是python解释器 5、点击 add interpreter&#xff0c;这个是增加python解释器 6、再点击add Local interpreter 7、选择第一个Virtualenv Environment,然后选择Existin…

交叉编译tslib库和上机测试

目录 一、tslib 介绍 二、tslib 框架分析 三、交叉编译、测试 tslib 1.安装工具链 tslib &#xff08;1&#xff09;设置交叉编译工具链 &#xff08;2&#xff09;进入tslib目录 &#xff08;3&#xff09;安装工具链 &#xff08;4&#xff09;确定工具链中头文件、库…

Linux源码阅读笔记09-进程NICE案例分析1

task_nice task_nice函数功能&#xff1a;获取某个进程的nice值&#xff0c;其中nice值为进程的优先级&#xff0c;与静态优先级有关&#xff08;nicestatic_prio-120&#xff09;。 nice的取值范围&#xff1a;-20 ~ 19 内核源码 根据内核的注释可以知道&#xff1a;task_n…

13-Django项目--文件上传

目录 前端展示 路由: 数据库字段: 函数视图: 前端展示 {% extends "index/index.html" %}{% block content %}<div class"container"><input type"button" id"btnAdd" value"上传荣耀" class"btn btn-succ…

鼠标点击器免费版?详细介绍鼠标连点器的如何使用

随着科技的发展&#xff0c;鼠标连点器逐渐成为了我们生活和工作中不可或缺的工具。它不仅能够帮助我们完成频繁且重复的点击任务&#xff0c;还能在很大程度上减少我们的手部疲劳&#xff0c;提高工作效率。本文将详细介绍鼠标连点器的使用方法&#xff0c;并推荐三款好用的免…

to_json 出现乱码的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

来咯,他来咯 看GitHub Codespaces 如何帮助缩短开发设置时间

在快节奏的软件开发世界中&#xff0c;效率和速度起着重要作用。对于开发人员来说&#xff0c;设置开发环境可能是一项耗时的任务。GitHub Codespaces 是一个基于云的环境&#xff0c;旨在通过提供对配置设置的访问来应对这一挑战。 本指南将帮助你开始使用 GitHub Codespaces …

Spring boot 更改启动LOGO

在resources目录下创建banner.txt文件&#xff0c;然后编辑对应的图案即可 注释工具 Spring Boot Version: ${spring-boot.version},-.___,---.__ /|\ __,---,___,- \ -.____,- | -.____,- // -., | ~\ /~ | …

【面试干货】值传递与引用传递:理解Java中的参数传递机制

【面试干货】值传递与引用传递&#xff1a;理解Java中的参数传递机制 1、值传递&#xff08;Call by Value&#xff09;2、引用传递&#xff08;Call by Reference&#xff09;3、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 值传递…

【Python】已解决:ERROR: No matching distribution found for JPype1

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;ERROR: No matching distribution found for JPype1 一、分析问题背景 在安装Python的第三方库时&#xff0c;有时会遇到“ERROR: No matching distribution fo…

金融科技在反洗钱领域的创新应用

随着金融市场的不断发展和全球化趋势的加速&#xff0c;洗钱活动日益猖獗&#xff0c;给金融机构和社会经济安全带来了严重威胁。为了有效应对这一挑战&#xff0c;金融科技在反洗钱领域的应用逐渐崭露头角&#xff0c;为打击洗钱活动提供了强有力的技术支持。本文将从多个角度…

Python编写简单爬虫

文章目录 Python编写简单爬虫安装必要的库编写爬虫代码解析和存储数据注意事项 Python编写简单爬虫 安装必要的库 在开始编写爬虫之前&#xff0c;你需要安装一些必要的库。我们将使用requests库来发送HTTP请求&#xff0c;使用BeautifulSoup库来解析HTML内容。你可以使用以下…

气象观测站应设置在何处:选址的科学与策略

气象观测站在现代社会中扮演着至关重要的角色&#xff0c;它们不仅是气象数据的收集中心&#xff0c;也是气象预报和灾害预警的基础。然而&#xff0c;一个成功的气象观测站&#xff0c;其选址并不是随意的&#xff0c;而是需要综合考虑多种因素&#xff0c;以确保数据的准确性…