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.hqwc.cn/news/218914.html

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

相关文章

Docker Swarm总结+service创建和部署、overlay网络以及Raft算法(2/4)

博主介绍:Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 🍅文末获取源码下载地址🍅 👇🏻 精彩专栏推荐订阅👇🏻…

【Go实现】实践GoF的23种设计模式:备忘录模式

上一篇:【Go实现】实践GoF的23种设计模式:命令模式 简单的分布式应用系统(示例代码工程):https://github.com/ruanrunxue/Practice-Design-Pattern–Go-Implementation 简介 相对于代理模式、工厂模式等设计模式&…

宝塔面板安装搭建DiscuzQ论坛教程与小程序上架发布后的展示效果

DiscuzQ论坛小程序上架发布后的展示效果: 1、需要用到的环境: php7.2 mysql5.7或者MariaDB 10.2(我安装用的mysql8.0) php除了必要的一些扩展外,还需要启用readlink、symlink函数等,具体看官方说明,安装的时候也会提醒…

Oracle 中的操作符

1.union:对两个结果集进行并集操作&#xff0c;不包括重复行&#xff0c;同时进行默认规则的排序&#xff1b; SELECT * FROM emp WHERE sal < 1500 UNION SELECT * FROM emp WHERE sal BETWEEN 1000 AND 2000 order by 1 2.union All&#xff1a;对两个结果集进行并集操…

聚簇索引和非聚簇索引的区别;什么是回表

聚簇索引和非聚簇索引的区别 什么是聚簇索引&#xff1f;&#xff08;重点&#xff09; 聚簇索引就是将数据(一行一行的数据)跟索引结构放到一块&#xff0c;InnoDB存储引擎使用的就是聚簇索引&#xff1b; 注意点&#xff1a; 1、InnoDB使用的是聚簇索引&#xff08;聚簇索…

rvc使用教程入门

推荐配置: GPU显卡:RTX 3060 8G CPU:lntel十二代酷睿i5或锐龙7000系以上 内存:32G RAM以上 操作系统:Windows_10系统 or Windows_11系统 注:目前AMD和英特尔的显卡延迟会比较高,建议英伟达RTX20系以上显卡使用 使用之前建议关闭GPU加速计划 操作方式:开始菜单输入图形设…

【Python】Python语言基础(中)

❤️博客主页&#xff1a; iknow181 &#x1f525;系列专栏&#xff1a; Python、JavaSE、JavaWeb、CCNP &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐评论✍ 目录 第十章 Python的数据类型 基本数据类型 数字 整数 浮点数 浮点数的精度问题 布尔型 进制转换 十进制…

②⑩② 【读写分离】Sharding - JDBC 实现 MySQL读写分离[SpringBoot框架]

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ Sharding-JDBC Sharding-JDBC介绍使用 Shardin…

最新AIGC创作系统ChatGPT网站源码,Midjourney绘画系统,支持GPT-4图片对话能力(上传图片并识图理解对话),支持DALL-E3文生图

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

使用Everything在局域网中对本地电脑上的文件进行搜索

工具-选项-选择Http 服务器-启用HTTP服务器-设置对应的端口即可开启这项服务- 之后当自己的手机或者其他设备位于和Everything位于同一个局域网&#xff0c;就可以使用对应的IP地址和端口进行访问了当然了&#xff0c;首先可以从电脑端进行访问&#xff0c;我们来感受一下 即使…

快速认识Linux的几个指令

我们先简单认识几个指令&#xff0c;为之后的指令学习打好基础 打开XShell并登录云服务器 01.pwd指令 pwd命令的作用是显示当前在Linux系统中所处的路径 02.ls指令 ls命令的作业是罗列出当前路径下的文件名&#xff08;即pwd的路径下&#xff09;&#xff0c;由于我们没有新…

【漏洞复现】Array VPN任意文件读取漏洞

漏洞描述 华耀(中国)科技有限公司(简称:Array)于2003年创建于北京,是优秀的网络功能平台解决方案提供商,也是应用交付解决方案、移动应用接入(SSL VPN)解决方案的全球领导者。华耀现有员工200余人,其中研发团队占到100余人,总部位于北京。并在北京、上海、广州、杭…