JS逆向之某平台登录密码加密
JS逆向
分析登录的流量包,发现前端传入的txt_pwd被置空,真正传入密码的参数并不是txt_pwd:

点击F12进入了无限debugger

这段代码会使反复执行debugger语句,进入断点调试模式,从而干扰正常的调试流程。
解决方法:
在此行打断点出,右击。选中“一律不在此暂停”

全局搜索txt_pwd,定位JS文件:

txt_pwd出现三处:
1 | function CheckPwd() { |

页面上并没有name为rbD1的标签,则lmode=0
通常表示:
| 值 | 含义 |
|---|---|
| 0 | 普通账号密码登录 |
| 1 | 手机验证码登录 |
| 2 | 统一身份认证 |
| 3 | 企业微信登录 |

原本想要验证自己的js脚本是否正确,但是同一个密码,每次跑出的密文都不同
询问chatgpt:
“这是 RSA PKCS#1 v1.5 填充 的正常现象”
RSA PKCS#1 v1.5 填充(Padding)是一种在 RSA 加密前对明文进行格式化的方法,其主要目的是防止 RSA 的确定性加密带来的安全问题。
代码段:


分析加密调用的函数,很多,函数都在LoginSafe.js里面

直接复制编写js脚本,使用burpcrypto插件实现参数加密:

保存processor
在intruder模块添加payload proccessing


验证码识别
在爆破过程中,遇到了验证码识别问题
解决:
捕捉验证码请求接口发送插件中

使用python3 codereg.py开启验证码识别模块,前提安装ddddocr

在接口URL怕,右击选择模板库
点击获取–>识别,检查验证码是否识别正确.
然后点击是否使用插件
在intruder模块进行配置

Payload类型选择:通过扩展生成,生成器选择captcha-kill-modified
必须使用单线程

RSA加密
RSA(Rivest–Shamir–Adleman)是一种非对称加密算法,使用一对密钥:
- 公钥(Public Key):用于加密,可以公开。
- 私钥(Private Key):用于解密,必须保密。
| 对称加密 | RSA非对称加密 |
|---|---|
| 加密解密使用同一密钥 | 加密解密使用不同密钥 |
| AES、DES、SM4 | RSA、ECC |
| 速度快 | 速度较慢 |
| 适合大量数据 | 适合密钥交换、登录认证 |
RSA数学原理
1. 生成密钥
第一步:选择两个不相等的质数p和q
1 | p = 61 |
第二步:计算p和q的乘积n(公钥的模数)
1 | n = p × q |
第三步:计算n的欧拉函数φ(n)
1 | φ(n)=(p−1)(q−1) |
第四步:随机选择一个公钥指数e,条件是1< e < φ(n),且e与φ(n) 互质。
1 | e=17 |
第五步:计算私钥d
满足:使得e*d被φ(n)除的余数为1
1 | e*d ≡ 1 (mod φ(n)) |
加解密
假设明文为m=123,密位为c
加密
公钥:(n,e)

解密
私钥:(n,d)

