js逆向-JS加密破解

news2024/11/18 1:50:00

一、常见五种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 js2py

jsExec = 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 + "-" +  rand
    return mySign
}

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

import requests
import js2py

jsExec = 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 random


prefix = "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 + "-" +  rand
    return 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 base64

s1 = "中"
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 base64

ts = 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, SHA

import hashlib

s1 = "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 hashlib

ts = 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 hashlib

secret = "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.coloradmin.cn/o/1250177.html

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

相关文章

【从删库到跑路 | MySQL总结篇】数据库基础(增删改查的基本操作)

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】🎈 本专栏旨在分享学习MySQL的一点学习心得,欢迎大家在评论区讨论💌 重点放前面&am…

常见树种(贵州省):017柳树、喜树、珙桐、木棉、楝、枫杨、竹柏、百日青、翅荚香槐、皂荚、灯台树

摘要:本专栏树种介绍图片来源于PPBC中国植物图像库(下附网址),本文整理仅做交流学习使用,同时便于查找,如有侵权请联系删除。 图片网址:PPBC中国植物图像库——最大的植物分类图片库 一、柳树 …

Ubuntu服务器/工作站常见故障修复记录

日常写代码写方案文档,偶尔遇上服务器出现问题的时候,也需要充当一把运维工程师,此帖用来记录服务器报错的一些解决方案,仅供参考! 文章目录 一、服务器简介二、机箱拆解三、基本操作3.1 F2进入BIOS3.2 F12进入Boot Me…

sql 动态语句

批量删除用的 foreach

剑指offer(C++)-JZ43:整数中1出现的次数(算法-其他)

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入一个整数 n ,求 1~n 这 n 个整数的十进制表示中 1 出现的次数 例如&#xff0…

Spring原理——基于xml配置文件创建IOC容器的过程

Spring框架的核心之一是IOC,那么我们是怎么创建出来的Bean呢? 作者进行了简单的总结,希望能对你有所帮助。 IOC的创建并不是通过new而是利用了java的反射机制,利用了newInstance方法进行的创建对象。 首先,我们先定义…

医学检验(LIS)管理系统源码,LIS源码,云LIS系统源码

医学检验(LIS)管理系统源码,云LIS系统全套商业源码 随着全自动生化分析仪、全自动免疫分析仪和全自动血球计数器等仪器的使用,检验科的大多数项目实现了全自动化分析。全自动化分析引入后,组合化验增多,更好的满足了临床需要&…

抵御网络威胁的虚拟盾牌:威胁建模

威胁建模是一个允许您管理因日益复杂且不断变化的 IT 安全威胁而产生的风险的过程。为了保护敏感系统和数据,主动了解和应对这些威胁至关重要。 威胁建模是识别、评估和减轻这些威胁的关键过程,确保组织准备好面对不断出现的新的复杂挑战。 本文将详细…

RTL8762x芯片避坑总结之1——用GPIO模拟I2C

1. 使用GPIO模拟I2C: 1.1 按常规逻辑 在输出第1个数据,切换为输入读取ACK后,切回输出无效,不能输出数据: 1.2 在切换输入输出前,需要对Pad重新进行配置 重新配置后,输入输出切换成功&#xf…

笔记本电脑可以投屏到电视吗?Win、Mac、Linux分别怎么投屏?

如果你的电视是安卓电视,那么答案是:完全可以! 不管你的笔记本电脑是Windows系统、macOS系统还是Linux系统,你都可以借助AirDroid Cast的电脑客户端或网页版,将电脑屏幕投屏到安卓智能电视上。 首先,你需要…

数据链路层-以太网协议

目录 数据链路层的作用认识以太网以太网帧格式认识MAC地址对比理解MAC地址和IP地址认识MTUMTU对UDP协议的影响MTU对TCP协议的影响数据跨网络传输的过程ARP协议ARP协议作用ARP数据报的格式ARP协议的工作流程 数据链路层的作用 我们知道数据能在网络中从一台主机发送到另一台主机…

【Proteus仿真】【STM32单片机】智能垃圾桶设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器,使用报警模块、LCD1602液晶模块、按键模块、人体红外传感器、HCSR04超声波、有害气体传感器、SG90舵机等。 主要功能: 系统运行后&…

极智项目 | 实战实时、多人2D人体姿态识别之OpenPose

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文来介绍 实战实时、多人2D人体姿态识别之OpenPose。 本文介绍的 实战实时、多人2D人体姿态识别之OpenPose,提供完整的可以一键执行的项目工程源码&…

android实战项目之二十二---如何快速APP中集成支付宝和微信支付功能

效果图 实现方案 jcenter 集成方式 implementation com.xgr.easypay:EasyPay:2.0.5 // 基类库,必选 implementation com.xgr.easypay:wechatpay:2.0.5 // 微信支付,可选 implementation com.xgr.easypay:alipay:2.0.5 // 支付宝支付,可…

2023亚马逊云科技re:Invent引领科技新潮流:云计算与生成式AI共塑未来

2023亚马逊云科技re:Invent引领科技新潮流:云计算与生成式AI共塑未来 历年来,亚马逊云科技re:Invent,不仅是全球云计算从业者的年度狂欢,更是全球云计算领域每年创新发布的关键节点。 2023年亚马逊云科技re:Invent大会在美国拉斯…

C语言算术转换例题

这里写目录标题 例题一题目解析答案 例题二题目解析答案 例题三题目解析答案 例题四方法一解析方法二解析 例题五答案方法一方法二解析 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒 个人主页 🥸&#…

golang panic关键词执行原理与代码分析

使用的go版本为 go1.21.2 首先我们写一个简单的panic调度与捕获代码 package mainfunc main() {defer func() {recover()}()panic("panic test") }通过go build -gcflags -S main.go获取到对应的汇编代码 可以看到当我们调度panic时,Go的编译器会将这段…

uniapp视频倍速播放插件,uniapp视频试看插件——sunny-video使用文档

sunny-video视频倍速播放器 组件名:sunny-video 效果图 img1img2img3img4 平台差异说明 目前已应用到APP(安卓、iOS)、微信(小程序、H5)其它平台未测试 安装方式 本组件符合easycom规范,HBuilderX 2.5…

JoyT的科研之旅第一周——科研工具学习及论文阅读收获

CiteSpace概述 CiteSpace 是一个用于可视化和分析科学文献的工具,它专门针对研究者进行文献回顾和趋势分析。CiteSpace 的核心功能是创建文献引用网络,这些网络揭示了研究领域内各个文献之间的相互关系。使用 CiteSpace 可以为论文研究做出贡献的几种方…

【迅搜03】全文检索、文档、倒排索引与分词

全文检索、文档、倒排索引与分词 今天还是概念性的内容,但是这些概念却是整个搜索引擎中最重要的概念。可以说,所有的搜索引擎就是实现了类似的概念才能称之为搜索引擎。而且今天的内容其实都是相关联的,所以不要以为标题上有四个名词就感觉好…