拼多多登陆 JS 密码字段加密解析
若有侵权请立即联系作者删除!!!
目标: X多多自动登录时对密码字段的加密
抓登陆包
网址 https://mms.pinduoduo.com/login
打开调试工具,随意输入一个账号密码点击登陆
然后我我们看到一个 POST 请求
https://mms.pinduoduo.com/janus/api/auth
可见密码是在 js 中加密好了之后进行 post 提交的 看这货最后一次加密应该是 base64 加密。
定位可疑加密处
利用 Search 与堆栈调试跟踪断点调试在3万行代码中找到可疑加密处
查找可疑处并断点调试, 此处明显 RSA 加密三部剧特征!
- 实例化 new 一个对象
- 设置密钥
- 加密
跟进方法
分析代码
判断可以将此 js 复写出来,摘写出加密方法,放到
HBuilder
中调试
修改复写该部分, 并将加密的匿名函数改写,调用
头部补入
// 定义 navigator 与 window
var navigator = {};
var window = this; // 等于当前对象
js代码尾部改写为调用模式,提供给 Python 使用
// 1. 将上面这一坨匿名函数掐头去尾留中间,将其暴露出来, 这样才能使这个匿名函数暴露出来。
// 2. 改写 将 rt 解密对象,赋值给 JSEncrypt
JSEncrypt = rt
// 自己写一个 func 来调用加密, 摘抄加密处如何使用的即可
function test(text){
var p = new JSEncrypt; // 上面刚刚得到的JSEncrpyt 正好new 一个赋值给 p
// 经过测试 PublickKey 为固定值,摘抄即可
p.setPublicKey("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOJ3pYE2cYqdHAnQhd0akAQ6tKiepF6ZCXnYix8HyZJapWm5aeJRmXpWPaH2l+tZzgwOELJLu0BYk6eefWpd79Zm63+cSRdRqhgSv3/Anh4XVjBBewc26KUKMq5MWnEVCyjEDZSzUvCnDiVOl+Uid9tRRr1ZrBMKsXwSgjvge0NwIDAQAB"),
password = p.encrypt(a) // 适当改写
console.log(password) // 打印
};
test('密码')
测试js是否能加密
利用 Python 的 js2py 模块运行 js
with open("encryp.js", "r", encoding="utf-8") as f:
self.context.execute(f.read())
ret = self.context.test('待加密的字符串')
GitHub 代码
自此完成了提交登陆请求时对密码的加密,用此方法可对其他字段进行自行封装。