【爬虫逆向实战篇】定位加密参数、断点调试与JS代码分析

文章目录

  • 1. 写在前面
  • 2. 确认加密参数
  • 3. 加密参数定位
  • 4. XHR断点调试

【作者主页】:吴秋霖
【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作!
【作者推荐】:对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》,对分布式爬虫平台感兴趣的朋友可以关注《分布式爬虫平台搭建与开发实战》
还有未来会持续更新的验证码突防、APP逆向、Python领域等一系列文章

1. 写在前面

  现在爬虫如果不会分析加密参数、定位加密入口、扣取JS加密代码、还原加密算法。你敢说你是做爬虫的?在这之前很多新手读者与粉丝找作者聊天时经常聊到对JS逆向没有头绪,不知道断点如何下,JS加密代码如何扣取!本期作者将通过实际案例手把手喂饭如何对加密参数进行分析与逆向、如何对JS加密代码进行扣取

在开发一个网站的爬虫之前,我们要做的首先就是分析爬虫是否需要取逆向。确认接口参数是否加密、参数是否动态验证等一系列前置验证

分析目标

aHR0cHM6Ly9rYW95YW4uZG9jaW4uY29tL3BkZnJlYWRlci93ZWIvIy9kb2Npbi9kb2N1bWVudHM/dHlwZT0xJmtleXdvcmQ9JUU4JTgwJTgzJUU3JUEwJTk0JUU4JUI1JTg0JUU2JTk2JTk5

2. 确认加密参数

这里我们点击下一页,查看一下发包与请求头信息,请求参数的话都是明文,不需要我们去分析。而请求头参数内X-Nonce、X-Sign参数是密文,如下所示:

在这里插入图片描述

一般正常情况下,对于头部非正常字符串可能是我们需要去分析的,像一些16进制、关键Key字段Sgin、Token等之类的字段。一些网站会自定义,如某书(X-s、X-s-c)就在头部信息中!

这个时候先不要急,我们需要确认X-Nonce、X-Sign参数是否动态生成的,这个时候可以直接Curl请求到终端进行测试,如下所示:

在这里插入图片描述
可以看到请求出现了异常,这个时候我们可以在浏览器网站中重放一下请求看一下,可以看到同样失效了,如下所示:

在这里插入图片描述

这样的情况下证明它网站的接口是有一个时效性的!根据上面接口反馈的信息,Nonce重复提交,意味这个这个参数不能重复,每一次是不一样的!

重新发包发现X-Sign参数也是变化的,那么大概率这两个参数都是需要我们逆向的

所以通过模拟请求的方式我们能够来明确网站的参数是否需要逆向,接下来我们继续,分析加密参数并完成逆向

3. 加密参数定位

关于对加密参数的定位在作者以前的很多关于爬虫JS逆向的文章中都有相关讲解,但是本期文章主打的就是喂饭!所以这里我们先使用搜索大法,打开网站如下步骤:

在这里插入图片描述

如上搜索完毕之后,可以看到有两个JS文件内含X-Nonce参数。我们先点击第一个JS进去查看,如下所示:

在这里插入图片描述

可以看到除了X-Nonce参数外,X-Sign签名参数也在其中,都进行了头部参数的赋值操作。接下来,我们需要下一个断点进行分析,而从知道这个加密的值从哪里来的,如上图中我们可以看到通过调用Tools.newGuid()得到nonce并赋值给X-Nonce,而X-Sign参数的生成则调用了Tools.sign()方法并传递了四个参数timestamp,、nonce、application,version、 body,如下所示:

在这里插入图片描述

触发断点后,会停留在上图的第21行,一般我们可能会直接在控制台查看一下Tools.newGuid()方法,但是由于作用域关系, 会出现如下问题:

在这里插入图片描述

这里我们可以直接进入到Tools.newGuid()方法内部查看,如下所示:

在这里插入图片描述

我们可以上图的作用域看到返回的值是跟请求头中参数值格式是一样的,所以X-Nonce的值是从NewGuid返回的。剩下的操作就是后续我们需要去实际的扣这一部分的代码了

接下来,我们翻回去分析一下Sign的签名参数,同样方式进入到签名生成方法内部查看具体代码,如下所示:

在这里插入图片描述

import md5 from 'js-md5';export default {//签名sign(timestamp, nonce, application, version, body) {let secret = "SV1dLfFDS32DS97jk32Qkjh34";let str = secret + "&" + timestamp + "&" + nonce + "&" + application + "&" + version + "&" + body;let sign = md5(str).toUpperCase();return sign;},
}

上面代码是具体方法,可以看到网站的开发人员已经将注释都写好了~是吧?就是签名!它是导了一个md5,然后sign方法接受几个参数,还有一个固定的盐值secret,然后接着进行一个大的字符串拼接,最后用md5生成加密结果,toUpperCase的话将加密结果转换为大写

这里我们需要检验一下,这个md5加密是不是一个标准的md5算法,检验的方法很简单,将拼接的那个大字符串str放到在线工具内,我这里直接在终端测了一下,如下所示:

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

由此可见,网站使用的是标准的md5算法

4. XHR断点调试

其实到这里我们的分析基本就已经完成了,剩下的就是扣取JS代码。但是,既然本期是一个喂饭教程,这里顺便也是讲解一些XHR断点调试的方法,就是发包的位置进行拦截

XHR断点如何下,其实就是将请求的接口地址复制到Srouce中,复制一部分就行!如下:

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

XHR断点下好之后,点击下一页触发断点,直接来到了发包的位置!也就是如下sned要从前端把这个包发送给后台的服务器,如下所示:

在这里插入图片描述

继续看下图,在发送的时候头部参数都已经生成好了。XHR的断点断在了请求的源码里面,所以XHR断点之所以在调试分析的时候要往前溯源去推加密的位置,是因为加密的动作都在此发包之前已经完成,如下所示:

在这里插入图片描述

参数组装–>加密操作–>发包–>响应

在这里插入图片描述

这里我们继续接着往下走,如下来到.then的回调方法,其中有一个response是来接受后端返回信息的参数,如下所示:

在这里插入图片描述

点击进去看一下,可以看到后端已经将数据返回出来了,如下所示:

在这里插入图片描述在这里插入图片描述
到了这里我们继续接着反推,断点继续出来接着往下走,如下所示:

在这里插入图片描述

看到了什么?从源码的发包位置通过断点调试分析,一步步到业务层面的代码,如下接受拦截器与请求拦截器!至此精准定位到加密参数生成位置,后续将完成对JS加密代码的扣取、调试与还原!写这篇文章的时候,恰好是元宵节(祝各位元宵节快乐!

当然除了上面提到的两种加密定位技巧还有Hook大法,像什么XHR、Header、Debugger、Json、Cookie、Websocket、Canvas、Eval的Hook,后续也会慢慢通过文章分享实战教程

  好了,到这里又到了跟大家说再见的时候了。创作不易,帮忙点个赞再走吧!你的支持是我创作的动力,希望能带给大家更多优质的文章

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

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

相关文章

C++基础学习——哈希表的封装

目录 ​编辑 一,实现一个可封装的哈希表 1,哈希表的节点 2,哈希表的成员 3,哈希表成员方法的实现 4,迭代器的实现 5,在哈希表中加入迭代器 二,封装哈希表 1,unorder_map封装 2…

win10安装使用AxurePR9

背景:win10 安装、汉化 Axure Pr9 下载 安装包 链接:https://pan.baidu.com/s/1taMgh2zLbaFK7VTfUXTHdQ 提取码:kygo 安装 修改安装目录 打开是英文的 汉化 复制lang包到Axure安装包 再打开就是中文 问题 发布html后火狐无法打开 一、…

抖音数据挖掘软件|视频内容提取

针对用户获取抖音视频的需求,我们开发了一款功能强大的工具,旨在解决用户在获取抖音视频时需要逐个复制链接、下载的繁琐问题。我们希望用户能够通过简单的关键词搜索,实现自动批量抓取视频,并根据需要进行选择性批量下载。因此&a…

实现外网手机或者电脑随时随地远程访问家里的电脑主机(linux为例)

文章目录 一、背景概要二、安装配置花生壳软件(linux版本)三、手机端(外网)验证连接四、安装ubuntu20server版系统遇到的问题记录 一、背景概要 由于经常在遇到某些问题的时候,针对某一个场景的理解,需要借助于自己的电脑去编译(aosp/linux/qemu)代码查…

PHP语言检测用户输入密码及调用Python脚本

现在有一份计算流体力学N-S方程的Python脚本,想要在用户登录网站后可以可以运行该脚本,然后将脚本运行后绘制的图片显示在用户网页上。 建一个名为N_S.py的python脚本文件,这个脚本在生成图像后会自行关闭,随后将图片保存在指定的…

SpringMVC 学习(三)之 @RequestMapping 注解

目录 1 RequestMapping 注解介绍 2 RequestMapping 注解的位置 3 RequestMapping 注解的 value 属性 4 RequestMapping 注解的 method 属性 5 RequestMapping 注解的 params 属性(了解) 6 RequestMapping 注解的 headers 属性(了解&…

【Android】坐标系

Android 系统中有两种坐标系,分别为 Android 坐标系和 View 坐标系。了解这两种坐标系能够帮助我们实现 View 的各种操作,比如我们要实现 View 的滑动,你连这个 View 的位置都不知道,那如何去操作呢? 一、Android 坐标…

【Flink精讲】Flink 内存管理

面临的问题 目前, 大数据计算引擎主要用 Java 或是基于 JVM 的编程语言实现的,例如 Apache Hadoop、 Apache Spark、 Apache Drill、 Apache Flink 等。 Java 语言的好处在于程序员不需要太关注底层内存资源的管理,但同样会面临一个问题&…

【接口加密】接口加密的未来发展与应用场景

目录 3.1 接口加密与区块链技术的结合 3.1.1 区块链技术的安全特性与优势 3.1.2 接口加密在区块链中的应用案例 3.2 接口加密与物联网安全 3.2.1 物联网安全的挑战与需求 3.2.2 接口加密在物联网领域的实际应用 3.3 接口加密在金融与电子商务领域的应用 随着信息技术的不…

Java中的常量与变量:初探Java世界的基石

✨✨ 所属专栏: Java基石:深入探索Java核心基础✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 引言 一. 常量与变量的概念 常量 变量 总结 二. 常量的分类 1. 字面常量 2. 常量变量 3. 枚举常量…

8 buuctf解题

[BJDCTF2020]just_a_rar 1 下载,得到 发现有加密 使用ARCHPR设置四位数掩码爆破 得到口令2016,解压得到图片,flag在图片exif中 在备注里面看见了flag [HBNIS2018]excel破解 1 下载下来是attachment.xls 修改后缀为rar 使用010 Editor打开&a…

力扣技巧题:丢失的数字

先排后找可以让结果更简单 int cmp(const void* a, const void* b){return *(int*)a - *(int*)b; } int missingNumber(int* nums, int numsSize){qsort(nums, numsSize, 4, cmp);for(int i0; i<numsSize; i){if(nums[i] i){continue;}else{return i;}}return numsSize; }…

RandAugment(NeurIPS 2020)论文速读

paper&#xff1a;RandAugment: Practical automated data augmentation with a reduced search space third-party implementation&#xff1a;https://github.com/open-mmlab/mmpretrain/blob/main/mmpretrain/datasets/transforms/auto_augment.py 存在的问题 自动增强策…

k8s学习笔记-基础概念

&#xff08;作者&#xff1a;陈玓玏&#xff09; deployment特别的地方在于replica和selector&#xff0c;docker根据镜像起容器&#xff0c;pod控制容器&#xff0c;job、cronjob、deployment控制pod&#xff0c;job做离线任务&#xff0c;pod大多一次性的&#xff0c;cronj…

React 模态框的设计(一)拖动组件的设计

春节终结束了&#xff0c;忙得我头疼。终于有时间弄自己的东西了。今天来写一个关于拖动的实例讲解。先看效果&#xff1a; 这是一个简单的组件设计&#xff0c;如果用原生的js设计就很简单&#xff0c;但在React中有些事件必须要多考虑一些。这是一个系列的文章&#xff0c;…

UI设计中,2D、2.5D、3D、4D该如何辨别?教会你

hello&#xff0c;我是大千UI工场&#xff0c;从事UI设计8年之久&#xff0c;在日常工作中经常听到一些概念&#xff0c;现在将这些概念图文并茂的呈现给您&#xff0c;欢迎点赞评论&#xff0c;如有设计需求&#xff0c;可以私信我们。 在UI设计中&#xff0c;2D、2.5D、3D和4…

企业计算机服务器中了babyk勒索病毒怎么办?Babyk勒索病毒解密数据恢复

随着网络技术的应用与普及&#xff0c;越来越多的企业采用了数字化办公模式&#xff0c;数字化办公模式可以为企业提供强有力的数据支撑&#xff0c;可以为企业的发展方向与产品业务调整做好基础工作。但网络是一把双刃剑&#xff0c;在为企业提供便利的同时&#xff0c;也为企…

Visual Studio 打开.edmx文件不显示表并报错:没有可用于.edmx的编辑器

打开.edmx文件时&#xff0c;呈现的是xml视图&#xff0c;不显示Diagram视图&#xff0c;且弹出报错“没有可用于.edmx的编辑器” 解决方案&#xff1a;在.edmx文件上右键&#xff0c;选择ado.net entity data model designer&#xff0c;即可正常显示表

EasyRecovery2024数据恢复软件深度评测与使用教程

一、EasyRecovery数据恢复软件是否好用&#xff1f; EasyRecovery是一款业界知名的数据恢复软件&#xff0c;具有强大的恢复能力和广泛的数据兼容性。它能帮助用户从各种存储设备中恢复丢失或删除的数据&#xff0c;包括硬盘、U盘、SD卡等。以下是关于EasyRecovery的详细分析&…

《C++面向对象程序设计》✍学习笔记

C的学习重点 C 这块&#xff0c;重点需要学习的就是一些关键字、面向对象以及 STL 容器的知识&#xff0c;特别是 STL&#xff0c;还得研究下他们的一些源码&#xff0c;下面是一些比较重要的知识&#xff1a; 指针与引用的区别&#xff0c;C 与 C 的区别&#xff0c;struct 与…