js逆向-JS加密破解

一、常见五种js加密手段

(一)加密位置:

1.Request Payload 加密

2.Request Headers 加密

3.Request URL params 参数加密

4.Response Data 数据加密

5.JS代码混淆加密

(二)加密算法

base64 编码

哈希算法:md5,SHA

对称加密:AES

非对称加密:RSA

二、Python Js2Py库运行JS代码

1.index.js文件中书写一段js代码

var getCode = function(str){prefix = "C13L02"timestamp = Math.floor(Date.now())return prefix + timestamp + str
}

2.终端安装js2py:pip install js2py

3.创建py文件C13L03.py

import js2pyjsExec = js2py.EvalJs()
with open('./C13L03/index.js', "r") as f:jsExec.execute(f.read())print(jsExec.getCode("abc"))# C13L02 1679589330373 abc# C13L02 1679589342156 abc

三、JS逆向一:Js2py 破解基础JS加密

(一)通过书写爬虫代码和网页响应可知,请求头参数中红框内的参数是必须要添加的,并且此参数是可变的,故采用以下操作。

(二)两种方法

1.按住CTRL+SHIFT+F进行全局搜索:sign(参数的名称),之后找出现sign的地方

2.加断点:将此链接Request URL复制到Sources中的XHR断点中,之后刷新。在call stack中往回找到需要的函数位置

(三)定位函数位置后,在文档中搜索:CTRL+F。搜索"mySign"

(四)创建C13L04.js文件将上述js代码复制,并创建函数

var getSign = function() {var prefix = "C13L04"var timestamp = Math.floor(Date.now())var rand = Math.floor((Math.random()*500)+100)var mySign = prefix + "-" +timestamp + "-" +  randreturn mySign
}

(五)创建py文件,调用上述函数重新请求网页

import requests
import js2pyjsExec = js2py.EvalJs()
with open('./C13L04/C13L04.js', 'r') as f:jsExec.execute(f.read())
mySign = jsExec.getSign()
print(mySign)
url = "http://127.0.0.1:5000/api/C13L04"
headers = {"User-Agent":"xxxxxxx","sign": mySign
}
res = requests.get(url, headers=headers)
print(res.json())

四、JS逆向二:Python 重构 JS加密流程

创建py文件,重构上述JS文件

import requests
import time
import randomprefix = "C13L04"
timestamp = int(time.time() * 1000)
rand = random.randint(100, 599)
mySign = prefix + "-" + str(timestamp) + "-" +  str(rand)
print(mySign)"""
# JS生成的时间戳为1679650163011,time.time()函数生成为1679650177.857263
var getSign = function() {var prefix = "C13L04"var timestamp = Math.floor(Date.now())var rand = Math.floor((Math.random()*500)+100)var mySign = prefix + "-" +timestamp + "-" +  randreturn mySign
}
"""url = "http://127.0.0.1:5000/api/C13L04"
headers = {"User-Agent":"xxxxxxx","sign": mySign
}
res = requests.get(url, headers=headers)
print(res.json())

五、JS逆向三:重构JS Base64 编码问题,破解JS Base64加密

(一)Base64编码原理

The Base64 Alphabet:

import base64s1 = "中"
s1_binary = s1.encode("utf-8")
# b'\xe4\xb8\xad'
s1_base64 = base64.b64encode(s1_binary).decode("utf-8")
print(s1_base64)
# 现在为string类型:5Lit
s2 = base64.b64decode(s1_base64).decode("utf-8")
print(s2)
# "中"
s3 = base64.b64decode(s1_base64)
print(s3)
# b'\xe4\xb8\xad'# b'\xe4\xb8\xad'
# 14 4 11 8  10 13
# 1110 0100 1011 1000 1010 1101
# 111001 001011 100010 101101
print(0b111001, 0b001011, 0b100010, 0b101101)
# 57 11 34 45
# 5 L i t

(二)破解JS Base64加密

上图位置的参数为加密的数据,可变参数。全局搜索“sign"

全局搜索"encode"。

第一种方法(最简单)是用Js2py方法,但这种方法运行效率低一些

第一种方法是用python复写。通过上述代码猜测是base64加密,通过验证确实是base64加密

import requests
import time
import base64ts = int(time.time()*1000)
msg = "C13L08" + str(ts)
sign = base64.b64encode(msg.encode()).decode()
print(sign)url = "http://127.0.0.1:5000/api/C13L08"
headers = {"User-Agent":"xxxxxxx","Referer": "http://127.0.0.1:5000/api/C13L08","sign": mySign
}
data = {"ts": ts,"sign":sign
}
res = requests.get(url, headers=headers, data=data)
print(res.json())

六、JS逆向四:破解MD5和SHA哈希加密

(一)Hash哈希算法原理

# 将数据通过算法生成固定长度的字符串
# 不可逆
# 相同数据生成的字符串一定是相同的, 不同的数据生成的字符串一定不同
# MD5, SHAimport hashlibs1 = "hello"
s1_md5 = hashlib.md5(s1.encode()).hexdigest()
print(s1_md5)
s1_sha256 = hashlib.sha256(s1.encode()).hexdigest()
print(s1_sha256)

(二)破解Md5和SHA哈希加密

此位置为加密位置参数

全局搜索”scode"找到加密的函数,猜测为MD5加密和SHA256加密方式,并用在线工具进行验证

import requests
import time
import hashlibts = int(time.time()*1000)
txt = str(ts) + "ABC"
mcode = hashlib.md5(txt.encode()).hexdigest()
scode = hashlib.sha256(txt.encode()).hexdigest()url = "http://127.0.0.1:5000/api/C13L11"
headers = {"User-Agent":"xxxxxxx","Referer": "http://127.0.0.1:5000/api/C13L11",
}
data = {"ts": ts,"mcode": mcode,"scode": scode
}
res = requests.get(url, headers=headers, data=data)
print(res.json())

七、实战:千千音乐-JS逆向破解音乐mp3参数哈希加密

以下为加密参数位置

添加xhr断点,发现函数位置

进入createSign

import requests
import time
import hashlibsecret = "0b50b02fd0d73a9c4c8c3a781c30845f"
appid = "16073360"
TSID = "T10063717602"
ts = int(time.time())
r = "TSID=T10063717602&appid=16073360&timestamp={}".format(ts) + secret
sign = hashlib.md5(r.encode()).hexdigest()url = "https://music.91q.com/v1/song/tracklink?sign={}&appid={}&TSID={}&timestamp={}".format(sign, appid, TSID, ts)
headers = {"User-Agent": "xxxxxxxxxxxxxxx","Referer": "https://music.91q.com/player"
}
res = requests.get(url, headers=headers)
print(res.json())

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

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

相关文章

抖音视频怎么提取动图?手机视频转gif方法

抖音是人们休闲娱乐消遣时光必备的短视频软件,当我们想要把好玩有趣的抖音短视频转换成gif动画时,要怎么操作呢?通过使用gif动图制作(https://www.gif.cn/)网站-GIF中文网,手机自带浏览器,上传视…

Leetcode—45.跳跃游戏II【中等】

2023每日刷题&#xff08;四十&#xff09; Leetcode—45.跳跃游戏II 贪心法思想 实现代码 #define MAX(a, b) (a > b ? (a) : (b))int jump(int* nums, int numsSize) {int start 0;int end 1;int ans 0;int maxStride 0;while(end < numsSize) {maxStride 0;fo…

向量机SVM原理理解和实战

目录 概念场景导入 点到超平面的距离公式 最大间隔的优化模型 硬间隔、软间隔和非线性 SVM 用 SVM 如何解决多分类问题 1. 一对多法 2. 一对一法 SVM主要原理和特点 原理 优点 缺点 支持向量机模型分类 SVM实战如何进行乳腺癌检测 数据集 字段含义 代码实现 参…

所有网站文本复制方法(知网、百度文库等)

实现文字复制自由 在肝学校结课论文是发现要用的论文文字都无法复制&#xff0c;所以想到了以前学到的一个方法&#xff0c;开始忘了&#xff0c;突然想起来&#xff0c;现在记录一下。 拿我现在肝的课程结课论文为例&#xff1a; 方法一 在谷歌浏览器的网址前面有一个列表一…

ES8生产实践——日志清洗过滤(vector方案)

前言 什么是vector 以下描述摘自官方文档&#xff1a;https://vector.dev/docs/about/what-is-vector/ Vector 是一个高性能的可观测性数据管道&#xff0c;可帮助企业控制其可观测性数据。收集、转换和路由所有日志、度量指标和跟踪数据&#xff0c;并将其提供给今天需要的任…

CSS新手入门笔记整理:CSS基本选择器

id属性 id属性具有唯一性&#xff0c;也就是说&#xff0c;在一个页面中相同的id只能出现一次。在不同的页面中&#xff0c;可以出现两个id相同的元素。 语法 <div id"text"> ...... </div> class属性 class&#xff0c;顾名思义&#xff0c;就是“类…

LeetCode.283移动零(双指针)

LeetCode.283移动零 1.问题描述2.解题思路3.代码 1.问题描述 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1…

(三) Windows 下 Sublime Text 3 配置Python环境和Anaconda代码提示

一&#xff1a;新建一个 Python3.7 编译环境。 1 Tools--Build System--New Build System... 修改前&#xff1a; 修改后&#xff1a; 内容&#xff1a; {"cmd":["C:\\Python\\Python37-32\\python.exe","-u","$file"],"file_r…

开通橱窗还能开抖店吗?怎么开通?一篇详解!

我是电商珠珠 开通商品橱窗之后还能开抖店吗&#xff1f;商品橱窗和抖音小店可以同时开吗&#xff1f; 一部分人最初的时候&#xff0c;都觉得直播带货很火&#xff0c;所以就自己去买粉丝或是发视频积攒粉丝&#xff0c;等粉丝够了发现&#xff0c;好像和当初想的不太一样&a…

关于反射、枚举以及Lambda表达式你了解多少呢?快来看看吧~

目录 1、反射 1.1、定义 1.2、用途 1.3、反射基本信息 1.4、反射相关的类【重点】 1.5、Class类&#xff08;反射机制的起源&#xff09; 1.6、Class类中相关的方法 1.7、获得Class对象的三种方式 1.8、反射的使用 1.9、反射的优点、缺点 2、枚举 2.1、背景及定义 …

ZGC 垃圾回收过程

ZGC&#xff08;Z Garbage Collector&#xff09;是Java平台上的一种垃圾收集器&#xff0c;它是由Oracle开发的&#xff0c;旨在解决大堆的低延迟垃圾收集问题。ZGC是一种并发的分代垃圾收集器&#xff0c;它主要针对具有大内存需求和低停顿时间要求的应用程序 ZGC的核心概念及…

基于STC12C5A60S2系列1T 8051单片按页写IIC总线器件24C02并显示在液晶显示器LCD1602上应用

基于STC12C5A60S2系列1T 8051单片机按页写IIC总线器件24C02并显示在液晶显示器LCD1602上应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍液晶显示器LCD1602简单介绍…

【brpc学习实践十】streaming log实战

实战实例 通常我们在服务还没正式起来时&#xff0c;会用brpc流式log打印&#xff0c;支持对日志输出到ostream对象中&#xff08;默认std)。同时会在服务初始化时配置LogSink&#xff0c;实现自己的log&#xff0c;这样后续都可以将输出重定向至自己的log. int init(int arg…

Linux MMC子系统 - 6.eMMC 5.1工作模式-设备识别模式

By: Ailson Jack Date: 2023.11.26 个人博客&#xff1a;http://www.only2fire.com/ 本文在我博客的地址是&#xff1a;http://www.only2fire.com/archives/165.html&#xff0c;排版更好&#xff0c;便于学习&#xff0c;也可以去我博客逛逛&#xff0c;兴许有你想要的内容呢。…

RocketMQ 安装部署及应用场景记录

文章目录 前言一、RocketMQ简介1.1 整体架构 二、RocketMQ安装部署2.1 RocketMQ 下载2.2 修改 JVM 参数2.3 启动 NameServer 和 Broker2.4 验证发送和接受消息2.5 停止 NameServer 和 Broker2.6 配置全局环境 三、RocketMQ应用场景3.1 异步处理3.2 应用解耦3.3 流量削峰 前言 …

7.前端--CSS-字体属性【2023.11.26】

CSS字体属性 CSS Fonts (字体)属性用于定义字体样式、粗细、大小、和字形。 1.文字样式 CSS 使用 font-style 属性设置文本的风格。 语法&#xff1a; p { font-style: normal; }属性&#xff1a; 2字体粗细 CSS 使用 font-weight 属性设置文本字体的粗细。 语法&#xff1a…

已知两个链表L1和L2分别表示两个集合,其中元素递增排列。请设计一个算法,用于求出L1与L2的交集,并存放在L1链表中

已知两个链表L1和L2分别表示两个集合&#xff0c;其中元素递增排列。请设计一个算法&#xff0c;用于求出L1与L2的交集&#xff0c;并存放在L1链表中。 代码思路&#xff1a; 我们创建一个辅助链表L3&#xff0c;用于存储L1和L2链表的交集&#xff0c;用s遍历L3各个元素 用p和…

Java | The last packet sent successfully to the server was xxx milliseconds ago

最近在部署代码后&#xff0c;后端总是会遇到这个问题&#xff0c;设备通道在访问数据库时经常会报错&#xff0c;在搜集大量资料后我以为是配置问题&#xff0c;首先要保证&#xff1a; &#xff08;1&#xff09;首先确定jdbc.url地址是正确的 &#xff08;2&#xf…

2024年天津天狮学院专升本食品质量与安全专业《分析化学》考纲

2024年天津天狮学院食品质量与安全专业高职升本入学考试《分析化学》考试大纲 一、考试性质 《分析化学》专业课程考试是天津天狮学院食品质量与安全专业高职升本入学考试 的必考科目之一&#xff0c;其性质是考核学生是否达到了升入本科继续学习的要求而进行的选拔性考试。《…

2023年09月 Scratch(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 运行下面程序后,角色的x坐标值是?( ) A:100 B:90 C:110 D:120 答案:C 利用变量值作为条件,控制循环的次数。变量从0~10的过程中每次角色的x坐标都增加了10,当变量值为1…