【爬虫分享】

爬虫分享

1、爬虫科普

视频发送于2024-10-27 14
_50.mp4
全屏预览下载附件

所以 爬虫 其实是非常 可“刑” 可“铐” 的。

2、逆向方法

算法还原
补环境
无头浏览器(自动化)
rpc

参数生成速度:算法还原 > 补环境 > rpc > 无头浏览器

逆向破解速度:无头浏览器 > rpc > 补环境 > 算法还原

2.1、算法还原

算法还原 就是 找到具体的加密函数入口,一步一步打断点 日志 跟进 定位到具体的加密位置,从而还原加密算法,算法还原是难度非常高的。我有时候 跟堆栈信息,跟着跟着就找不到北了。而且在跟进函数,会有大量的循环、条件判断、异步操作以及js混淆。同时要非常了解加密方式,能够根据生成的参数,能够判断是什么加密方式。

2.2、无头浏览器

无头浏览器 就是 模拟正常人的操作,打开浏览器,进入某个页面,等页面渲染后,获取页面上的元素信息。这肯定是要比直接爬取接口慢的,但是相对简单。以及无头浏览器与正常人操作浏览器,还是有区别的。如果请求过多的话,会弹出验证窗口,机器人验证的页面。

2.3、rpc

rpc方式 就是 注入或者修改js源文件,搞一个websokect的服务器,在js源文件里注入 websocket的客户端与websokect的服务器通讯。服务器将参数传给客户端,客户端调用加密函数,将加密的参数返回给服务器。

2.4、补环境

补环境 就是 找到具体的加密函数入口,把加密函数扣下来,缺什么参数或者环境,从浏览器中获取加上,再将加密函数暴露出来以供调用使用。因为自己扣下来的js文件,需要要用node.js执行,但是node.js没有浏览器的环境,比如:Document等。所以就需要我们将浏览器的环境补齐,让js代码,以为就是在真正的浏览器里。补环境难度不是很高,但是需要耐心与细心。

接下来,我会主要介绍一下补环境的一些通用的思路和手段。

3、最棒的web逆向工具

那就是浏览器!!

3.1、两个搜索

快速定位接口:ctrl+f 弹出搜索框

举个栗子:如何快速的找到笔记详情是哪个接口返回

将接口右键复制为curl后,可以用在线网站将curl转换成对应的语言的实现,网站如下:

https://curlconverter.com/python/

找到接口后,我们就需要分析

哪些参数可以写死
哪些是请求参数
拿些是加密的参数
http请求,能存参数的位置,一共就3个

url路径上
body请求体
header请求头

快速定位加密函数:

先来讲一下,js的参数赋值的方式

// 第一种
var header = {
“X-s”: “token”
xs: “token”
}
// 第二种
header[“X-s”] = “token”
// 第三种
header.xs = “token”
所以,搜索加密函数位置,可以这几种:

{sign} =

[“{sign}”]

{sign} :

小红书的字段存在"-",所以只能用第二种搜索方式

对可疑的地方都加上断点,刷新判断在哪断点停下了,这就说明这就是我们要找的位置。

如果无法通过字段名搜索到加密位置的话(说明存在混淆),那么就只能慢慢跟栈,里找到加密位置了(或者解混淆)。

打印一下日志,我们可以看到加密函数是一个全局函数 window._webmsxyw,进入到函数里,将整个页面copy下来。

现在已经找到加密函数的入口。接下来就到了补环境了。

3.2 一些反爬措施
无限debugger:

有些网站进入浏览器的调试控制台,会触发无限debugger

解决办法:https://www.zhangbj.com/p/586.html

参数顺序:

接口请求时参数的顺序,也会导致无法请求成功,所以尽量不要更改顺序。

参数缩进:

以及注意参数的缩进,例如:

{“a”: “a”, “b”: 2}

{“a”:“a”,“b”:2}

缩进不同,也会导致无法正确获取响应

ast混淆:

AST混淆(Abstract Syntax Tree Obfuscation)是一种通过修改源代码的抽象语法树(AST)来实现代码混淆的技术,目的是使代码更加难以理解,但不改变程序的实际功能。AST是程序代码的结构化表示,显示了代码的语法结构,类似于代码的“骨架”。

在AST混淆中,攻击者或开发者通过对AST进行各种操作来重构源代码,使得代码的语法结构和逻辑流程变得不那么直观,但仍然能够保持原有的行为。常见的操作包括:

重命名变量和函数:改变变量和函数名为没有意义的名称,从而增加反编译和逆向工程的难度。
改变代码结构:通过修改代码的表达方式(比如通过不同的控制结构替代原来的结构),使得代码逻辑复杂化,但不影响最终的执行效果。
增加冗余代码:插入无效的代码(例如无用的循环、条件语句等),目的是让代码看起来更复杂,迷惑分析者。
改变语法形式:通过替换某些语法结构(比如表达式的顺序、使用不同的语言特性等)使得代码更难理解。
AST混淆的优势在于它不依赖于简单的字符串级别的替换,而是通过语法层面的混淆来增加理解的难度。相比传统的代码混淆方法(如字符串替换、删除注释等),AST混淆更能在保持代码功能不变的同时,增加代码的复杂性和可读性障碍,特别是对静态分析工具和逆向工程人员来说。

解决方案:https://www.52pojie.cn/thread-1913553-1-1.html#50105908_%E5%8F%82%E6%95%B0%E5%88%86%E6%9E%90

4、取之浏览器 用之浏览器

创建好文件:

env.js // 用于填写环境的js代码

source.js // copy下来的js文件

sign.js // 用于导入 env.js 与 source.js 文件 获取生成加密参数

env.js 初始化环境:

window = global
delete global // node.js 特有参数,会检测
delete Buffer // node.js 特有参数,会检测

在运行js脚本之后,显示的报错信息,我们并不知道,具体是哪个对象的缺少参数。

给环境参数添加代理,每次执行get或set的时打印参数信息:
function setProxy(proxyObjs) {for (let i = 0; i < proxyObjs.length; i++) {const handler = `{get: function(target, property, receiver) {console.log("方法:", "get  ", "对象:", "${proxyObjs[i]}", "  属性:", property, "  属性类型:", typeof property, ", 属性值:", target[property], ", 属性值类型:", typeof target[property]);return target[property];},set: function(target, property, value, receiver) {console.log("方法:", "set  ", "对象:", "${proxyObjs[i]}", "  属性:", property, "  属性类型:", typeof property, ", 属性值:", value, ", 属性值类型:", typeof target[property]);return Reflect.set(...arguments);}}`;eval(`try {${proxyObjs[i]};${proxyObjs[i]} = new Proxy(${proxyObjs[i]}, ${handler});} catch (e) {${proxyObjs[i]} = {};${proxyObjs[i]} = new Proxy(${proxyObjs[i]}, ${handler});}`);}
}setProxy(["window", "location", "navigator", "document", "history", "screen", "localStorage"])

加上代理后一目了然:

缺少 createElement 参数,所以这个是什么东东呢?可以使用下面的网站搜

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript

我们就需要将缺少的环境补上

主要就是把一些undefined的值补上。

还有就是每次补完undefined,重新运行一下,可能又会出现新的undefined。

注意:对于一些,有具体参数的值,一定要与浏览器的环境里一致。如果浏览器里的打印出来的是undfiend,那么也就无需补了,因为实际上就是undefined。

5、逆向完成 现在才是开始

怎样批量的把数据爬取下来,我感觉是比逆向难度还要高的。

还有一点,反爬措施,只能延缓,不能阻止爬虫。

我总结了一些反爬措施

1、ip限流\封禁

2、账号(cookie)限流\封禁

3、人机行为

4、脏数据

5、响应数据加密

对于 1、2点来说,就是控制爬虫的频率,也可以采用ip池、cookie池,提升爬取速度。

但是我还是不建议这样做,如果搞的太过分了,影响网站正常使用,这就变成了doss攻击了,这就要叔叔请喝茶了。

对于人机行为,主要避免一些固定行为,比如爬取到到笔记列表,就依次从头遍历,对于正常人来说,没人会从头挨个看到尾,所以要打乱响应的笔记顺序,并添加随机睡眠时间。

对于脏数据,说明获取到加密参数,还是不对。不排除,是请求频率太快导致响应脏数据

响应数据加密,加密一定是可逆的,否则前端怎么展示信息呢。

无论是对称加密,还是非对称加密,解密密钥一定存在js文件或者某个接口中。

6、补环境入门网站

补环境,其实还是很好理解的。就是让检测环境的代码通过,让js代码认为就是在浏览器里运行的,所以补环境其实是一个要有耐心和细心的事情。但是在实际操作中,会有一些意想不到的问题。还是需要多多练习。

如果想体验一下补环境。这里我推荐一个入门补环境的网站,某乎,这个网站的环境检测很有意思,基本上就是补一个环境,再次运行又会出现一个新的环境检测参数。感兴趣的可以试试。

附上教程视频:

https://www.bilibili.com/video/BV1yn4y1d7FU/?share_source=copy_web&vd_source=238c84240ce560cb8705abec80228d65

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

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

相关文章

根据关键字搜索商品API返回值解析:深入解析与代码实践

在电子商务和数据集成领域&#xff0c;API&#xff08;应用程序编程接口&#xff09;扮演着至关重要的角色。通过API&#xff0c;开发者可以访问和利用平台的数据资源&#xff0c;实现自动化和智能化的数据交互。本文将探讨如何根据关键字搜索商品API的返回值进行解析&#xff…

Python http打印(http打印body)flask demo(http调试demo、http demo、http printer)

文章目录 代码解释 代码 # flask_http_printer.pyfrom flask import Flask, request, jsonify import jsonapp Flask(__name__)app.route(/printinfo, methods[POST]) def print_info():# 分隔符separator "-" * 60# 获取请求头headers request.headers# 获取 JS…

「C/C++」C/C++ STL 之 迭代器

✨博客主页何曾参静谧的博客📌文章专栏「C/C++」C/C++程序设计📚全部专栏「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid函数说明「…

大模型微调,使用QLoRA和自定义数据集微调大模型(下)

4.8 数据预处理 在微调模型之前&#xff0c;我们不能直接使用原始数据集&#xff0c;需要将数据集中的提示转换成模型能够理解的格式。 为了使数据集适配微调流程&#xff0c;这里编写辅助函数来格式化输入数据集。具体来说&#xff0c;就是将对话摘要&#xff08;即提示-响应…

【NOIP普及组】质因数分解

【NOIP普及组】质因数分解 C语言代码C代码Java代码Python代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 已知正整数 n 是两个不同的质数的乘积&#xff0c;试求出较大的那个质数。 输入 输入只有一行&#xff0c;包含一个正整数…

js--高阶函数之参数归一化

一、前言 参数归一化&#xff1a;是我们软件开发里一个非常重要且实用的技巧&#xff0c;用的好极大简化代码同时提升代码的可阅读性和可维护性。以下我用日期格式化为例&#xff0c;演示一下参数归一化的技巧。 二、日期格式化实例 /*** 辅助格式化函数* param {string|functi…

均值、期望、方差、标准差与协方差:基础概念解析

均值、期望、方差、标准差与协方差&#xff1a;基础概念解析 在统计学和数据分析中&#xff0c;均值、期望、方差、标准差和协方差是描述数据分布和关系的基本工具。理解这些概念有助于我们更好地分析和处理数据。本文将详细讲解这些概念的定义、计算方法及其在实际应用中的意…

shell基础

一、理解bash基础 默认的Linux shell——Bash&#xff08;Bourne Again SHell&#xff09;可以通过命令控制系统&#xff0c;执行文件操作&#xff0c;或者启动应用程序。它可以在命令行上交互式使用&#xff0c;或者你可以创建一个包含多个shell命令的文件&#xff0c;并像启…

js树状结构,自叶到根统计各级数量

$($(".tree-item").get().reverse()).each(function () {let self $(this).find("span").text()let prev $(this).parent(".two").prevAll(".tree-item").find("span").text()self self ? self : 0prev prev ? prev :…

学习threejs,使用JSON格式保存和加载整个场景

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE toJSON()方法 二、&a…

论文1—《基于卷积神经网络的手术机器人控制系统设计》文献阅读分析报告

论文报告&#xff1a;基于卷积神经网络的手术机器人控制系统设计 摘要 本研究针对传统手术机器人控制系统精准度不足的问题&#xff0c;提出了一种基于卷积神经网络的手术机器人控制系统设计。研究设计了控制系统的总体结构&#xff0c;并选用PCI插槽上直接内插CAN适配卡作为上…

SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“

SLF4J常见问题 导入依赖&#xff1a; <dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version> </dependency> <dependency><groupId>org.slf4j</groupId><arti…

资产管理系统:SpringBoot技术驱动

4系统概要设计 4.1概述 系统设计原则 以技术先进、系统实用、结构合理、产品主流、低成本、低维护量作为基本建设原则&#xff0c;规划系统的整体构架. 先进性&#xff1a; 在产品设计上&#xff0c;整个系统软硬件设备的设计符合高新技术的潮流&#xff0c;媒体数字化、压缩、…

YOLO可视化界面,目标检测前端页面。

使用PySide6/QT实现YOLOv5/v8可视化GUI页面 在人工智能和计算机视觉领域&#xff0c;YOLO&#xff08;You Only Look Once&#xff09;是一种广泛使用的实时目标检测算法。为了直观地展示YOLO算法的检测效果&#xff0c;我们可以使用Python中的PySide6库来创建一个简单的GUI应…

使用vuex动态设置全局字号

1.安装vuex npm install vuexnext --save 2.编写字号设置样式 // 定义字号变量 :root {--font-size: 18px;--font-size-step1: 16px;--font-size-step2: 14px;--font-size-step3: 12px; } // 定义样式&#xff08;全局样式文件&#xff09; body, page {font-size: var(--fo…

编程爱好者的福音:实用技巧与教程

引言 你是否曾经因为代码无法正常运行而感到挫败&#xff1f;或者在面对一行行复杂的代码时&#xff0c;不知道从何下手&#xff1f;编程&#xff0c;这项充满挑战与创造力的技能&#xff0c;往往让人既爱又恨。无论你是刚刚入门的初学者&#xff0c;还是已经具备一定经验的开发…

了解bootstrap改造asp.net core MVC的样式模板

我们都知道&#xff0c;在使用默认的asp.net core MVC模板建立项目的时候&#xff0c;里面的样式是已经事先被写好了的。一般来说都在css目录下的site.css和bootstrap.css及下面的bootstrap.min.css中。我们打开bootstrap这些样式文件&#xff0c;里面有大量的样式类的定义&…

通过使用 FFmpeg 提取某站视频 MV 中的音频为 MP3

无论是为了个人收藏、制作播客还是作为背景音乐&#xff0c;将视频中的音频提取出来都是一个非常实用的技能。本教程中简鹿办公将介绍两种方法来实现这一目标&#xff1a;一种是通过命令行工具 FFmpeg&#xff0c;另一种是使用图形界面工具 - 简鹿音频格式转换器。 使用 FFmpeg…

探秘国际数字影像产业园:数字化转型之路

数字化园区的概念正日益受到全球瞩目&#xff0c;这不仅是科技进步的必然产物&#xff0c;更是现代经济发展的迫切需求。对于国际数字影像产业园而言&#xff0c;打造数字化园区意味着通过尖端科技手段&#xff0c;全面提升园区的管理效率、服务质量及入驻企业和居民的生活体验…

外包干了2年,快要废了。。

先说一下自己的情况&#xff0c;普通本科&#xff0c;在外包干了2年多的功能测试&#xff0c;这几年因为大环境不好&#xff0c;我整个人心惊胆战的&#xff0c;怕自己卷铺盖走人了&#xff0c;我感觉自己不能够在这样蹉跎下去了&#xff0c;长时间呆在一个舒适的环境真的会让一…