js逆向入门之简概实例--MD5

目录

js逆向入门之简概&实例--MD5

爬虫:

爬虫流程:

逆向js原因:

网站反爬:

什么是MD5?

js加密特征:

练习开始

正常请求

加post请求

伪装加U-Sign参数

伪装加Content-Type参数

请求参数变字符串

代码实现:

真逆开始

补充知识点:

代码


免责声明:

本文只做技术交流,学习,请知法守法,切勿用于其它违法行为.

js逆向入门之简概&实例--MD5


爬虫:

怎么,还不会爬虫?

其实简简单单啦!

爬虫流程:

找url 发请求 拿响应 数据解析 数据保存

但是我们的虫子(浏览器)也不总是万能的,比如碰上了大佬(大公司)就不好用了.

总是被反爬,所以我们就需要逆向js了.

逆向js原因:

爬虫程序向目标url发请求的过程中,如果遇到了某些加密的数据,需要去观察浏览器中是如何生成的这份数据。
爬虫代码去模拟这个规则,再发请求。

为什么需要逆向呢?因为我们平时发请求时所携带的参数或默认不带,已经不能满足服务端了,

服务端看不懂,不会返回我们想要的数据.

--如图蓝字,我们平时的参数被加密了,传到server,然后server识别我们的参数, 它可能解密返回,也可能直接返回数据.

--总之,你的请求参数(内容)需要被server看懂.

网站反爬:

--当正常的爬虫流程不能获取到我们想要的数据,就要考虑是不是被反爬了.

html:网页结构(建筑工程师)
css:美化工程师(设计工程师)
js:  对网页的一些操作做设置
​
逆向js,由结果往前推的过程,得到这些结果需要哪些条件,准备好这些条件,用代码模拟浏览器js生成结果的过程.
​
难点:如何找到js代码的加密位置.
​
网站是如何去进行加密的:
加载html---》css---》js--》js初始化---》触发某个事件---》调用某个js代码---》执行代码---》给服务端发请求
----》拿到服务端的响应---》解密---》页面进行渲染

来了,来了,逆向它来了~

什么是MD5?

MD5值_360百科

MD5_百度百科

Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992)。
​
MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。
​
1991年,Rivest开发出技术上更为趋近成熟的md5算法。它在MD4的基础上增加了"安全-带子"(safety-belts)的概念。虽然MD5比MD4复杂度大一些,但却更为安全。这个算法很明显的由四个和MD4设计有少许不同的步骤组成。在MD5算法中,信息-摘要的大小和填充的必要条件与MD4完全相同。Den boer和Bosselaers曾发现MD5算法中的假冲突(pseudo-collisions),但除此之外就没有其他被发现的加密后结果了。
-----------
MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途

总之,哔哔一大些就是它更安全.

js加密特征:

--其它代码的实现也有,点链接自己找.

这谁顶得住,这么高级.

练习开始

练习网址: 某志愿(3)

鼠标滚轮往下滑,清析可见,他是异步加载方式,所以我们按F12--->找到XHR--->刷新界面,找到数据.

POST请求方式.

载荷查看参数.

正常请求

--简单的爬取,发现 身份授权失败.

加post请求

--我们把载荷的参数加上去,发现也不行. ---身份授权失败.

所以,我们分析一下数据包.

伪装加U-Sign参数

以不变应万变.

这里每个包的U-Sign参数都不一样,所以我们带上看看.

...还是不行.

伪装加Content-Type参数

post请求不一定都是一样的.

有一些是请求载荷,有一些是表单数据.

所以,发请求的时候也要做一些改变.

找请求头,一个参数: Content-Type: application/json

正常情况下,我们把参数一带,就能拿到数据;这里拿不到,显然不是默认的(表单数据).

所以,我们要自己改(加)content-type.

...发现还是不行.

请求参数变字符串

不要慌~~

由上面可知,我们的请求类型变了 Content-Type: application/json

所以啊,这里我们的data要变成字符串类型.(字典--->字符串)

--拿下!

代码实现:

​
import requests
url= 'https://'
​
headers= {'User-Agent': '',
          #发送请求过程中,有u-sign请求头是变化的,每一页的值不一样,意味着如果我们想要用爬虫做分页,就需要先解决这个问题.
          'U-Sign': '37635b63e0f1973c61b1444983eab1be',
          #表单参数和请求载荷有区别,观察请求头中的Content-Type.
          'Content-Type': 'application/json'
          }
#请求参数:  data=参数值
data = '{"keyword":"","provinceNames":[],"natureTypes":[],"eduLevel":"","categories":[],"features":[],"pageIndex":5,"pageSize":20,"sort":11}'
​
res = requests.post(url,headers=headers,data=data)
print(res.text)

--竟然有数据做加密了,那就准备好逆吧.

真逆开始--逆向分析过程

根据加密字段名进行搜索.(关键字-->全局搜索)

.js就比较重要.


vue jquery axios react...
#框架一般就不用看了.

--这里我们就借助谷歌浏览器的插件了.

--发现相同的关键字很多,所以我们打断点,再刷新页面.

只要停住了,就说明引用了此段代码.

不然没有效果.

--发现此段js代码停住了,那就是我们要找的.

e.url    --->      "/youzy.dms.basiclib.api.college.query"
o(e.url, e.data)  ---->   "643ff9499febb3ee34c95ffe0bb29cb0"    #这里就是举个例子而已,与上面的不同.

补充知识点:

开发者工具:

下箭头:进入函数.

上箭头:跳出函数.

栈:

:先进后出.(数据结构与算法)

-有执行顺序. --突破点.

def a():
    b()
def b():
    C()
def c():
    d()
​

--这里我们进入看看o函数.

打个断点,依次执行看看.

a=载荷值.
​
进入:-------------->
#三目运算:
o = Object.keys(a).length > 0 ? "".concat(JSON.stringify(a), "&").concat(i) : "&".concat(i);
--------------------------------------------------
if Object.keys(a).length > 0:
     "".concat(JSON.stringify(a), "&").concat(i)
else:
    "&".concat(i);

--通过在控制台试一下,发现.concat就是个拼接.

"".concat(JSON.stringify(a), "&").concat(i)

json数据在js中也可进行转换.

json字符串--->js对象

js对象--->json字符串

json字符串--->字典

字典--->字符串

--这里我们选中看到,第一个参数它是一个js对象.

第二个参数为&

="{"keyword":"","provinceNames":[],"natureTypes":[],"eduLevel":"","categories":[],"features":[],"pageIndex":1,"pageSize":20,"sort":11}&"

--这里又拼接了一下.

结果: 	"{"keyword":"","provinceNames":[],"natureTypes":[],"eduLevel":"","categories":[],"features":[],"pageIndex":1,"pageSize":20,"sort":11}&9SASji5OWnG41iRKiSvTJHlXHmRySRp1"

把此结果赋值给了o变量.

o = "{"keyword":"","provinceNames":[],"natureTypes":[],"eduLevel":"","categories":[],"features":[],"pageIndex":1,"pageSize":20,"sort":11}&9SASji5OWnG41iRKiSvTJHlXHmRySRp1"

断点继续往下走.

return o = o.toLowerCase(),

--发现,将o里面的全部变为小写了.

 n(o)		"4c215c42c1fadead6dc8a382d08df497"

---继续,又调用了n函数,发现n函数的返回值是加密值,所以需要进入n函数看代码逻辑.

进入n函数,发现其代码特征像md5加密.

确定是md5加密.

控制台--调用n函数,随便传数.

然后用在线的md5工具解密.

数值对应则就是MD5...........

行了,铁证如山.

那个u-sign的密文是MD5加密.

跟着断点代码,一步步来就行了.

代码

--这里写循环就欧了~~


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

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

相关文章

【数据结构刷题专题】—— 二叉树

二叉树 二叉树刷题框架 二叉树的定义: struct TreeNode {int val;TreeNode* left;TreeNode* right;TreeNode(int x) : val(x), left(NULL), right(NULL); };1 二叉树的遍历方式 【1】前序遍历 class Solution { public:void traversal(TreeNode* node, vector&…

[C#]winformYOLO区域检测任意形状区域绘制射线算法实现

【简单介绍】 Winform OpenCVSharp YOLO区域检测与任意形状区域射线绘制算法实现 在现代安全监控系统中,区域检测是一项至关重要的功能。通过使用Winform结合OpenCVSharp库,并结合YOLO(You Only Look Once)算法,我们…

Maven高级(工程分模块开发,聚合于继承,版本锁定,Mavne私服的搭建和发布)【详解】

目录 一、Maven复习 1. Maven基本概念 1 Maven的作用 2 Maven的仓库 3 坐标的概念 2. Maven安装配置 3. Maven构建项目 4. Maven依赖管理 5. Maven依赖传递 二、工程分模块开发 1. 分模块开发介绍 2. 工程分模块示例 (1) 创建父工程 (2) 创建pojo模块步骤 (3) 创…

YOLOv8改进 | 检测头篇 | 2024最新HyCTAS模型提出SAttention(自研轻量化检测头 -> 适用分割、Pose、目标检测)

一、本文介绍 本文给大家带来的改进机制是由全新SOTA分割模型(Real-Time Image Segmentation via Hybrid Convolutional-TransformerArchitecture Search)HyCTAS提出的一种SelfAttention注意力机制,论文中叫该机制应用于检测头当中(论文中的分割效果展现目前是最好的)。我…

如何学习VBA_3.2.19:利用Shell函数运行可执行程序

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的劳动效率,而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册,现在已经全部完成,希望大家利用、学习。 如果…

Java-Java基础学习(4)-多线程(2)

3.7. Lambda表达式 为什么要使用lambda表达式 避免匿名内部类定义过多;可以让代码看起来更简洁;去掉一堆没有意义的代码,只留下核心逻辑 属于函数式编程的概念,格式 (params) -> expression [表达式](params) -> statement…

【教学类-44-11】20240324 杨任东竹石体 Regular(实线字体)制作的数字描字帖(AI对话大师缩略版)

作品展示 背景需求: 之前有三款阿拉伯数字字体,但是与《幼儿用数字描字簿》字体有差异 【教学类-44-05】20240201 德彪钢笔行书(实线字体)制作的数字描字帖-CSDN博客文章浏览阅读396次,点赞6次,收藏5次。【…

Python之Web开发中级教程----中级教程成果下载

Python之Web开发中级教程----中级教程成果下载 到目前为止,中级教程已经完成。 按照一步步的教程搭建虚拟机中的环境,包括内容如下: Ubuntu操作系统搭建 Python 配置 Redis 安装配置 Python库中包括 Pip安装 Pyinstaller安装 Redis安装 Jie…

strlen和sizeof

定义 strlen 和 sizeof 是 C 语言中两个用于确定字符串或数据类型大小的常用操作符&#xff0c;但它们的工作方式和目的有所不同。下面是对这两个操作符的详细解释&#xff1a; strlen strlen 是一个库函数&#xff0c;定义在 <string.h> 头文件中。它用于计算以空字符…

拥有超小型领先工艺射频微波电子元器件厂商兆讯授权世强硬创代理

射频前端芯片在模拟芯片中&#xff0c;属于进入门槛较高、设计难度较大的细分领域&#xff0c;由于国内射频前端芯片行业起步较晚&#xff0c;其市场份额主要被外企所占据&#xff0c;而在国产化浪潮的推动下&#xff0c;上游厂商的射频前端产品及技术逐渐具备领先的竞争优势。…

深度学习(三)vscode加jupyter notebook插件使用

0.前言 哎呀&#xff0c;我本次的实验是在新电脑上使用的&#xff0c;之前的笔记本上的环境什么的我都是很久以前弄好了的&#xff0c;结果到了新电脑上我直接忘了是该怎么配的了&#xff0c;不过万幸&#xff0c;花了点时间&#xff0c;查查补补&#xff0c;现在总算是可以了。…

论文汇总:A Closer Look at Few-shot Classification Again

文章汇总 文章是在总体上再一次地观察如何小样本领域存在的问题&#xff0c;并且发现了较为有趣的规律 1.测试误差随训练类别的数量而下降&#xff0c;而不是随每个类别的训练样本数量而下降。 2.训练算法(me&#xff1a;预训练模型)和自适应算法(me&#xff1a;预训练之后的…

参展企业和专业观众均创历届新高“2024杭州国际安防展会”

随着社会的不断发展&#xff0c;安防行业逐渐成为一个备受关注的领域。杭州作为中国的科技创新之城&#xff0c;一直以来都是安防行业的重要聚集地。本次展会的举办&#xff0c;不仅为参展企业提供了一个展示自身实力的平台&#xff0c;也为观众提供了一个了解安防行业最新技术…

深度解析JVM世界:JVM内存分配

本篇文章的主要内容是介绍JVM内存的分配方式、JVM内存的快速分配策略、JVM的逃逸分析和堆内存的分代思想几部分内容。 请同学们认真听讲&#xff0c;面试会问到。。。 1. 内存分配 大家需要注意不分配内存的对象无法进行其他操作 JVM 为对象分配内存的过程&#xff1a;首先…

[flask]http请求//获取请求体数据

import jsonfrom flask import Flask, requestapp Flask(__name__)app.route("/form1", methods["post"]) def form1():"""获取客户端请求的请求体[表单]:return:""""""获取表单数据请求url&#xff1a;&qu…

[深度学习]yolov8+streamlit搭建精美界面GUI网页设计源码实现三

【设计思路介绍】 为了使用YOLOv8和Streamlit搭建一个精美的界面GUI网页&#xff0c;你需要遵循几个关键步骤。以下是一个简化的流程&#xff0c;帮助你设计并实现这一目标&#xff1a; 1. 环境准备 安装YOLOv8 YOLOv8是一个先进的实时目标检测模型。你需要先下载并安装YOL…

Android Studio 代理

Android Studio的代理&#xff0c;分为两级代理&#xff1a; 1. Android Studio本身的代理&#xff0c;路径在&#xff0c;右上角&#xff0c;File->Settings->Appearance & Behavior -> System Settings -> Http Proxy&#xff0c;如图所示&#xff1a; 2. G…

Mybatis中QueryWrapper的复杂查询SQL

最近在使用QueryWrapper编写查询语句时发现复杂的SQL不会写。在网上找了半天&#xff0c;终于得到了点启示。在此做个记录以备忘。 我要实现的SQL是这样的&#xff1a; -- 实现这个复杂查询 -- 查询设备表 select * from oa_device where ((dev_code BSD1003 and dev_status…

护眼灯有没有必要买?多款高口碑护眼台灯推荐

我发现目前仍有很多家长都忽视了环境光的重要性&#xff0c;在孩子学习的时候习惯只开家里的吸顶灯提供作业&#xff0c;但其实环境光线的不足&#xff0c;对孩子的眼镜危害是非常大的&#xff01;也有家长问护眼灯有没有必要买&#xff1f; 我认为是很有必要的&#xff01;因…

基于java+SpringBoot+Vue的乐校园二手书交易管理系统设计与实现

基于javaSpringBootVue的乐校园二手书交易管理系统设计与实现 开发语言: Java 数据库: MySQL技术: SpringBoot MyBatis工具: IDEA/Eclipse、Navicat、Maven 系统展示 前台展示 后台展示 系统简介 整体功能包含&#xff1a; 乐校园二手书交易管理系统是一个基于互联网的二…
最新文章