JS逆向进阶篇【去哪儿旅行登录】【上篇】

目标url:

  • aHR0cHM6Ly91c2VyLnF1bmFyLmNvbS9wYXNzcG9ydC9sb2dpbi5qc3A=

实现难点:

  • 逆向滑块请求
  • 发送短信登录

目录

  • 每篇前言:
  • 0、前置技术栈
    • (1)JS实现页面滑动
    • (2)JS实现记录滑动轨迹
    • (3)补基础浏览器环境
    • (4)补环境

每篇前言:

  • 🏆🏆作者介绍:【孤寒者】—CSDN全栈领域优质创作者、HDZ核心组成员、华为云享专家Python全栈领域博主、CSDN原力计划作者

  • 🔥🔥本文已收录于爬虫进阶+实战系列教程专栏:《爬虫进阶+实战系列教程》
  • 🔥🔥热门专栏推荐:《Python全栈系列教程》、《爬虫从入门到精通系列教程》、《爬虫进阶+实战系列教程》、《Scrapy框架从入门到实战》、《Flask框架从入门到实战》、《Django框架从入门到实战》、《Tornado框架从入门到实战》、《前端系列教程》。
  • 📝​📝本专栏面向广大程序猿,为的是大家都做到Python全栈技术从入门到精通,穿插有很多实战优化点。
  • 🎉🎉订阅专栏后可私聊进一千多人Python全栈交流群(手把手教学,问题解答); 进群可领取Python全栈教程视频 + 多得数不过来的计算机书籍:基础、Web、爬虫、数据分析、可视化、机器学习、深度学习、人工智能、算法、面试题等。
  • 🚀🚀加入我一起学习进步,一个人可以走的很快,一群人才能走的更远!

在这里插入图片描述

0、前置技术栈

(1)JS实现页面滑动

简单实现单击鼠标左键,控制台打印鼠标移动事件信息,松开左键后取消打印。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><div onmousedown="doDown(event)">滑动例子</div><script>function doDown(e){console.log("doDown", e);// 添加鼠标移动事件document.addEventListener("mousemove", doMove);document.addEventListener("mouseup", doUp);}function doMove(e){console.log("doMove", e)}function doUp(e){console.log("doUp", e)document.removeEventListener("mousemove", doMove);document.removeEventListener("mouseup", doUp);}
</script></body>
</html>

在这里插入图片描述

(2)JS实现记录滑动轨迹

下述有关轨迹的模拟生成,是根据本文目标网站提取的核心逻辑!

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><div onmousedown="doDown(event)">滑动例子</div><script>t = {state: {},sliderInfo: {track: [],deviceMotion: []}}function doDown(e){// n = e    n.clientX是点击的x坐标var n = (e.changedTouches || e.touches || [e])[0];t.state.downX = n.clientX;console.log("开始x坐标:", n.clientX)console.log("doDown", e);// 添加鼠标移动事件document.addEventListener("mousemove", doMove);document.addEventListener("mouseup", doUp);}function doMove(e){var o = (e.changedTouches || e.touches || [e])[0];var n = t.state.downX;// o就是当前滑动的event;   o.clientX就是当前滑动的x坐标;   n是最开始点击的x坐标;// o.clientX - n 就是滑动距离!var u = (e = e || window.event, o.clientX - n);var n = u;var i = Date.now() % 1e5,    // 获取一个随机数s = (e.changedTouches || e.touches || [e])[0],o = s.clientX.toFixed(2), // 将数字保留2个小数位数并返回一个字符串u = s.clientY.toFixed(2),a = n.toFixed(2),// “i;横坐标;纵坐标;滑动距离"f = "".concat(i, ";").concat(o, ";").concat(u, ";").concat(a);// 核心t.sliderInfo.track.push(f);// 也是轨迹window.addEventListener("deviceorientation", function (e) {t.sliderInfo.deviceMotion.push(e)}, !1)console.log("滑动过程u:", u)console.log("doMove", e)}function doUp(e){console.log("doUp", e)document.removeEventListener("mousemove", doMove);document.removeEventListener("mouseup", doUp);console.log(t.sliderInfo.track)console.log(t.sliderInfo.deviceMotion)}
</script></body>
</html>

在这里插入图片描述

(3)补基础浏览器环境

在使用pyexecjs执行JavaScript代码时(因为使用的nodejs引擎来执行的JavaScript代码,有别于浏览器),如果存在读取浏览器环境,就会失败报错。如:
在这里插入图片描述
此时,就需要创造浏览器环境然后再执行JavaScript代码:

npm config set registry https://registry.npm.taobao.orgnpm install -g jsdom   
npm install -g node-gyp
npm install -g canvas --canvas_binary_host_mirror=https://npm.taobao.org/mirrors/canvas/

可以通过命令:npm root -g来查看npm安装目录~

模块安装完成之后,需要将npm root -g查到的npm安装目录添加到系统环境变量中:
在这里插入图片描述

安装完毕后,就可以通过上述模块补浏览器环境:

const jsdom = require("jsdom");
const {JSDOM} = jsdom;// 模拟浏览器打开https://www.toutiao.com,页面内容就是html
const html = '<!DOCTYPE html><p>Hello world</p>';
const dom = new JSDOM(html, {url: "https://www.toutiao.com",referer: "https://example.com",contentType: "text/html"
});// 下面就是补浏览器环境
document = dom.window.document;window = global;
Object.assign(global, {location: {hash: "",host: "user.qunar.com",hostname: "user.qunar.com",href: "https://user.qunar.com/passport/login.jsp",origin: "https://user.qunar.com",pathname: "/",port: "",protocol: "https:",search: "",},navigator: {appCodeName: "Mozilla",appName: "Netscape",appVersion: "5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36",cookieEnabled: true,deviceMemory: 8,doNotTrack: null,hardwareConcurrency: 4,language: "zh-CN",languages: ["zh-CN", "zh"],maxTouchPoints: 0,onLine: true,platform: "MacIntel",product: "Gecko",productSub: "20030107",userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36",vendor: "Google Inc.",vendorSub: "",webdriver: false}
});location = window.location

只要在js文件中加入上述代码,运行就ok了!

(4)补环境

上述示例只是补充了浏览器中常见的window、document对象,抠出来的js代码中可能还有其他的值和变量,此时就需要根据环境提示来进行补环境:

  • python运行js代码,分析报错信息
  • 补充&测试

比如js代码中有这么一句:

var xhr = new XMLHttpRequest();

上述所补环境就不够,就会报错:
在这里插入图片描述
这时候就需要了解下XMLHttpRequest是啥?
简单说几句:

  • 所有Ajax请求底层都是基于XMLHttpRequest。所以这个玩意就是发送Ajax请求用,一般情况下,这种js代码是跟算法逻辑无关的,所以直接补充这个对象,相应三个函数给空,不让js代码报错即可!
xhr = new XMLHttpRequest();
xhr.onreadystatechange = function (){if(xhr.readyState == 4){// 成功接收到响应数据var data = xhr.responseText;console.log(data);}
};
xhr.open('POST', '/test/', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset-UTF-8');
xhr.send('n1=1;n2=2;');

补环境:

XMLHttpRequest = function() {return {open: function(){},setRequestHeader: function(){},send: function(){}}
}

这样的话,扣下来的js代码中有类似下图代码也就没问题了~
在这里插入图片描述

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

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

相关文章

SAP MM学习笔记42 - 特殊调达流程 - 受托品(寄售)

上一章讲了 外注加工的知识。 详细可以参考如下链接。 SAP MM学习笔记41 - 特殊调达流程 - 外注加工-CSDN博客 咱们继续学习特殊调达流程。 本章主要讲受托品。 1&#xff0c;什么是受托品 &#xff08;寄售&#xff09; 仕入先提供的商品&#xff0c;商品是放在你公司了&a…

CSS定位装饰

网页常见布局方式 标准流 块级元素独占一行---垂直布局 行内元素/行内块元素一行显示多个----水平布局 浮动 可以让原本垂直布局的块级元素变成水平布局 定位 可以让元素自由的摆放在网页的任意位置 一般用于盒子之间的层叠情况 使用定位步骤 设置定位方式 属性名&am…

一周学会Django5 Python Web开发-Django5 Hello World编写

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计14条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

使用 C++23 从零实现 RISC-V 模拟器

&#x1f449;&#x1f3fb; 文章汇总「从零实现模拟器、操作系统、数据库、编译器…」&#xff1a;https://okaitserrj.feishu.cn/docx/R4tCdkEbsoFGnuxbho4cgW2Yntc 使用 C23 从零实现 RISC-V 模拟器 使用 C23 从零实现的 RISC-V 模拟器&#xff0c;最终的模拟器可以运行 x…

java SSM新闻管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM新闻管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S…

《Java 简易速速上手小册》第8章:Java 性能优化(2024 最新版)

文章目录 8.1 性能评估工具 - 你的性能探测仪8.1.1 基础知识8.1.2 重点案例&#xff1a;使用 VisualVM 监控应用性能8.1.3 拓展案例 1&#xff1a;使用 JProfiler 分析内存泄漏8.1.4 拓展案例 2&#xff1a;使用 Gatling 进行 Web 应用压力测试 8.2 JVM 调优 - 魔法引擎的调校8…

智能汽车行业产业研究报告:4D成像毫米波雷达—自动驾驶最佳辅助

今天分享的是智能汽车系列深度研究报告&#xff1a;《智能汽车行业产业研究报告&#xff1a;4D成像毫米波雷达—自动驾驶最佳辅助》。 &#xff08;报告出品方&#xff1a;开源证券&#xff09; 报告共计&#xff1a;43页 视觉感知最佳辅助——4D 成像毫米波雷达 感知是自动…

【Python】window环境使用venv部署jupyter notebook

基础信息 执行winr&#xff0c;在输入框输入powershell: python版本&#xff1a;python -v 创建并激活虚拟环境 1、进入要创建虚拟环境的目录&#xff0c;操作示例如下&#xff1a; PS C:\Users\Administrator> cd D:\Python\weltest 2、创建虚拟环境&#xff0c;操作示…

BUGKU-WEB GET

题目描述 没有提示&#xff0c;就一个get&#xff0c;启动场景看看&#xff1a; 解题思路 显然是PHP语言解读分析代码吧写出你的payload 相关工具 略 解题步骤 进入场景分析代码 $what$_GET[what]; echo $what; if($whatflag) echo flag{****};前两句&#xff1a;使用get…

2024年最新指南:如何订阅Midjourney(详尽步骤解析)

前言&#xff1a; Midjourney是一个基于人工智能的图像生成工具&#xff0c;它使用高级算法来创建独特和复杂的图像。这个工具能够根据用户输入的文字描述生成对应的图片。Midjourney的特点在于它能够处理非常抽象或者具体的描述&#xff0c;生成高质量、富有创意的视觉内容。M…

Flaurm实现中文搜索

目录 摘要需求本文涉及环境情况如下解决方案最终效果文章其他链接&#xff1a; 摘要 Flarum本身对中文支持并不理想&#xff0c;但随着版本更新&#xff0c;逐渐加强了对中文的优化。然而在1.8.5版本&#xff0c;却还是不支持中文搜索网站文章内容。作者在检索了全网教程&#…

新概念英语第二册(64)

【New words and expressions】生词和短语&#xff08;13&#xff09; tunnel n. 隧道 port n. 港口 ventilate v. 通风 chimney n. 烟囱 sea level …

【2024年5月备考新增】《软考高项论文专题 (13)风险管理(合集)》

1 论文基础 1.1 写作要点 过程定义、作用写作要点、思路规划风险管理是定义如何实施项目风险管理活动的过程。作用:确保风险管理的水平、方法和可见度与项目风险程度相匹配,与对组织和其他干系人的重要程度相匹配。风险管理计划的内容、编写原则。结合风险管理计划其中2-3项内…

gorm day5

gorm day5 gorm更新 删除一条记录 删除一条记录时&#xff0c;删除对象需要指定主键&#xff0c;否则会出发批量Delete&#xff0c;例如 // Email 的 ID 是 10 db.Delete(&email) // DELETE from emails where id 10;// 带额外条件的删除 db.Where("name ?"…

数模.SI模型SI的四种扩展

一&#xff1a;最简单的考虑方式 二考虑某种使得参数beta降低的因素 三&#xff1a;增加人口自然出生率和死亡率&#xff0c;但不考虑疾病的死亡率 四&#xff1a;不考虑人口自然出生率和死亡率&#xff0c;只考虑疾病的死亡率 五&#xff1a;同时考虑人口自然出生率和死亡率和…

kali系统概述、nmap扫描应用、john破解密码、抓包概述、以太网帧结构、抓包应用、wireshark应用、nginx安全加固、Linux系统加固

目录 kali nmap扫描 使用john破解密码 抓包 封装与解封装 网络层数据包结构 TCP头部结构​编辑 UDP头部结构 实施抓包 安全加固 nginx安全 防止缓冲区溢出 Linux加固 kali 实际上它就是一个预安装了很多安全工具的Debian Linux [rootmyhost ~]# kali resetkali …

C#一维数组排序方法:选择排序法

目录 一、数组元素常见的排序法 1.选择排序法 二、实例1&#xff1a;选择排序法 1.源码 2.生成效果 一、数组元素常见的排序法 常见的排序法&#xff1a;选择排序法、冒泡排序法、快速排序法、直接插入法、希尔排序法、Array.Sort方法。 1.选择排序法 通过遍历实现排序&…

2024年华为OD机试真题-按身高和体重排队-Python-OD统一考试(C卷)

题目描述: :某学校举行运动会,学生们按编号(1、2、3…n)进行标识,现需要按照身高由低到高排列,对身高相同的人,按体重由轻到重排列;对于身高体重都相同的人,维持原有的编号顺序关系。请输出排列后的学生编号。 输入描述:两个序列,每个序列由n个正整数组成(0 < n …

λ-矩阵的多项式展开

原文链接 定义. 对于 m n m \times n mn 的 λ \lambda λ-矩阵 A ( λ ) [ a 11 ( λ ) . . . a 1 n ( λ ) ⋮ ⋮ a m 1 ( λ ) . . . a m n ( λ ) ] \mathbf{A}(\lambda)\begin{bmatrix} a_{11}(\lambda) & ... & a_{1n}(\lambda)\\ \vdots & & \vdo…

基于Qt的人脸识别项目(功能:颜值检测,口罩检测,表情检测,性别检测,年龄预测等)

完整代码链接在文章末尾 效果展示 代码讲解(待更新) qt图片文件上传 #include <QtWidgets> #include <QFileDialog>