JS逆向之 RSA 案例汇总

简介: JS逆向之 RSA 案例汇总

640.jpg

阅读文本大概需要 6 分钟。


案例一、

某团 PASSWORD 参数网址如下:

aHR0cHM6Ly9wYXNzcG9ydC5tZWl0dWFuLmNvbS9hY2NvdW50L3VuaXRpdmVsb2dpbg==

下面的抓包的界面:

d3dd1464562c83f9d919e02d66cc000b.jpg

这里有三个参数是需求构造的,password,csrf(这个简单,从html中获取即可),h5Fingerprint。

h5Fingerprint 以前的参数名是 token, 这个今天不演示,有兴趣的朋友可以去试试。今天的主要是找到 password 的生成方式。

e9408b4f0e350ac4a3e0a90ad01dd5b9.jpg

根据工具栏中的 Network ,找到 Initiator 选项栏,将鼠标悬停在抓到包的那条请求上,出现如上图。我们找到 ajax 请求的前面一个 e, 点击进去

9200bcd86ed2e9945898ef296c4ff953.jpg

注意发现关键点,对象 o 有 url, post,data, 其中 data 就是 post 的参数,打上断点,重发请求,如下:

0c7a97bddccc3626708a00051c220758.jpg

e 里面的 password 已完成加密,往上追

5a7549fae207df984a2928e6f22c3e65.jpg

定位到加密函数 u.encrypt() , 而在加密之前对对象 u 进行了u.setPublicKey(this.publicKey) 这一步。

案例二、

地址:aHR0cDovL3d3dy5pYXBwc3RvZGF5LmNvbS8=

下面是浏览器抓包 Network 栏,和上面定位加密位置一样,鼠标悬浮在 Initiator 那一列

bdd1972513b8cacd10d77d8e50039e8d.png

选择 ajax 请求前面那个,点击进去之后如下:

329470867c2ef12bca985ac9e7a2bfd4.png

很明显的可以看到,前面代码是获取输入的 password 值,并对其进行 RSA 加密,最后你可下个断点将相关的代码拿出来。

案例三、

地址如下:aHR0cHM6Ly9sb2dpbi4xMDA4Ni5jbi9odG1sL2xvZ2luL2VtYWlsX2xvZ2luLmh0bWw=

根据 password = , 快速定位到加密位置

4a420a98144add5f035ff7af7bb58928.png

在该位置打上断点后进入到加密函数,

3a918199ba4b2d0f52dc9f8fc99096c5.png

熟悉的 setPublicKey(), 典型的 RSA 加密

案例四、

地址如下: aHR0cDovL2kuYmFpZHUuY29tL3dlbGNvbWUv

抓包之后,根据登录的请求,

d1d8ce638dd9f1d3238825e5ddd04d22.png

如上图所示,点击进去后,定位如下,记得打上断点,

956466d053ffda9e3a86c5675c65d466.png

从页面输入框获取 password 之后做了简单处理,然后进入到

baidu.url.escapeSymbol(e.RSA.encrypt(o)

其中 o 就是我们输入的密码。可以看到函数名称等特征是 RSA 加密,我们可以点进去查看


238a7c74636440d6fbc97e442af0de18.png

fd47334699123c5c5d92c40ee38ecfa9.png

上面的代码也能佐证我们的判断,password 使用的 RSA 加密。

上述的四个案例都是 RSA 加密,实际上我只是找到加密的代码位置,并没有去和以前一样扣代码.其实大都数的 RSA 加密都是通用的,因为加密的算法都是一样的。

很少有网站会去更改,就算就修改也只是对参数的输入和加密后的输出做了进一步的处理。例如第四个案例,对 RSA 加密后的结果中某些字符进行了简单的替换,baidu.url.escapeSymbol()

这里提供一个 RSA 加密算法的 JS 代码,https://github.com/travist/jsencrypt/blob/master/bin/jsencrypt.js

以后遇到类似的 RSA 加密,可以直接拿来用。当然在 Python 中也有实现 RSA、AES 等加密的库。

linux 下安装:

pip install pycryptodome

windows 下安装:

pip install pycryptodomex

这里提供示例代码,供大家参考:

from Cryptodome.PublicKey import RSA
from Cryptodome.Cipher import PKCS1_v1_5
def encrypt_str(data):
    public_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDc+CZK9bBA9IU+gZUOc6FUGu7yO9WpTNB0PzmgFBh96Mg1WrovD1oqZ+eIF4LjvxKXGOdI79JRdve9NPhQo07+uqGQgE4imwNnRx7PFtCRryiIEcUoavuNtuRVoBAm6qdB0SrctgaqGfLgKvZHOnwTjyNqjBUxzMeQlEC2czEMSwIDAQAB"
    rsakey = RSA.import_key(base64.b64decode(public_key))  # 导入读取到的公钥
    cipher = PKCS1_v1_5.new(rsakey)  # 生成对象
    cipher_text = base64.b64encode(cipher.encrypt(data.encode(encoding="utf-8")))
    return cipher_text

具体可以参考我之前写的安卓 APP 逆向的案例,最后是用 Python 代码转换后实现 RSA 加密的。

app逆向实战强化篇——破解某安卓APP请求加密参数

相关文章
|
15天前
|
JavaScript 前端开发
js变量的作用域、作用域链、数据类型和转换应用案例
【4月更文挑战第27天】JavaScript 中变量有全局和局部作用域,全局变量在所有地方可访问,局部变量只限其定义的代码块。作用域链允许变量在当前块未定义时向上搜索父级作用域。语言支持多种数据类型,如字符串、数字、布尔值,可通过 `typeof` 检查类型。转换数据类型用 `parseInt` 或 `parseFloat`,将字符串转为数值。
18 1
|
2月前
|
JavaScript 计算机视觉
纯js实现人脸识别眨眨眼张张嘴案例——ccv.js
纯js实现人脸识别眨眨眼张张嘴案例——ccv.js
54 0
|
2月前
|
JavaScript 前端开发 Java
纯前端JS实现人脸识别眨眨眼张张嘴案例
纯前端JS实现人脸识别眨眨眼张张嘴案例
63 0
|
5月前
|
Android开发
Autox.js 脚本开发环境搭建,从案例到打包apk(详细流程)
Autox.js 脚本开发环境搭建,从案例到打包apk(详细流程)
576 0
|
5月前
|
JavaScript 前端开发 Java
JavaScript对象及定时器案例
JavaScript对象及定时器案例
44 0
|
2月前
|
JavaScript 计算机视觉
纯js实现人脸识别眨眨眼张张嘴案例——alive_face.js
纯js实现人脸识别眨眨眼张张嘴案例——alive_face.js
23 0
|
15天前
|
JavaScript 前端开发
js的let、const、var的区别以及应用案例
【4月更文挑战第27天】ES6 中,`let` 和 `const` 是新增的变量声明关键字,与 `var` 存在显著差异。`let` 允许重新赋值,而 `const` 不可,且两者都具有块级作用域。`var` 拥有函数级作用域,并可在函数内任意位置访问。`let` 和 `const` 声明时必须初始化,而 `var` 不需。根据需求选择使用:局部作用域用 `let`/`const`,全局或函数范围用 `var`,不可变值用 `const`。
23 2
|
18天前
android-agent-web中js-bridge案例
android-agent-web中js-bridge案例
21 2
|
27天前
|
开发框架 前端开发 JavaScript
采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示
技术架构:Asp.NET CORE 3.1 MVC + SQLserver + Redis等 开发语言:C# 6.0、JavaScript 前端框架:JQuery、EasyUI、Bootstrap 后端框架:MVC、SQLSugar等 数 据 库:SQLserver 2012
22 0
|
2月前
|
JavaScript
jQuery选择器案例之——index.js
jQuery选择器案例之——index.js
8 0