实验网站
aHR0cHM6Ly9jai5lbG9hbmNuLmNvbS8=
破解对应位置
登录密码的加密部分
分析解密过程
首先,我们找到登录密码的具体 URL,这一步一般是全局搜索关键参数,比如 login ,或者 password 模块,这个网站的 url 请求很少,非常容易就从 xhr 中找到了。对应 /login/v1/02 这个请求
接下来往下翻
看到吗?password 这个并非是我们输入时候的密码,我们的目标就是通过原始密码,得出这个值
这里我们先通过全局搜索 password 关键字的方式,查看文件中是否有明文的密码字段
很幸运的是,我们查找第一个文件的时候,就找到了关键加密的位置
然后我们去到 source 文件中,找到对应的 js 文件,在我们看 password 位置打上断点
我们再次刷新页面,输入密码,看到它已经跳到了我们打断点的位置
鼠标移动到箭头位置,发现 o.PUBLIC.DESkey 是个固定值:e9284d45-cf2a-4e46-9367-f122413ca6b0
前面 this.checkPwd.password 通过将鼠标移动到 password 上发现,它也是我们自己的原始密码。后面的 trim 是个匿名的函数头,先不管它。重点是 encryptByDES 。我们将鼠标移动到函数上,然后上方会出现链接到原位置的跳转提示
点击进去我们就进入 encryptByDES 的函数具体实现上
接下来就简单了,通过 python 实现原算法,或者通过 python 调用 js 构造这个函数就可以实现 password 解密了,这里我们采用后一种方式
代码实现
首先你需要安装好 node。
安装教程可以参照:https://www.runoob.com/nodejs...
step1:初始化 node 环境,命令行键入
npm init -y
step2:安装好 crypto-js 环境包(当然你也可以通过拷贝原来的 js 包到本地的方式)
npm install crypto-js -S
step3:创建实现解密逻辑的 js 文件
touch crack.jscode crack.js // 这个是通过 vscode 打开 crack.js 的命令
引入 crypto-js 包,将之前的破解代码逻辑拷贝进去
var crack = function(t, e) {var CryptoJS = require("crypto-js");var a = CryptoJS.enc.Utf8.parse(e);try {var s = CryptoJS.DES.encrypt(String(t), a, {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7 }) } catch (t) {console.log(t) }return s.toString()}
step4: 通过 python 调用 js 文件实现解密
touch crack.py
code crack.py
写入 python 调用 js 文件代码逻辑
import execjs
import os
js_file = open("./crack.js").read()
js_compile = execjs.compile(js_file)
crack_result = js_compile.call("crack", "frfrfrf", "e9284d45-cf2a-4e46-9367-f122413ca6b0")
print(f"{crack_result}")
最后通过命令行运行,得到结果
>>> python crack.py
StULrhXDyVg=
破解目录下的文件如下
>>>ls
crack.js crack.py node_modules package-lock.json package.json
后面三个node_modules、package-lock.json、package.json。均是由 node 安装依赖包时生成的文件,不可移除它们,就酱
参考资料
https://www.cnblogs.com/cina3...
https://mp.weixin.qq.com/s/e0...
本文由博客一文多发平台 OpenWrite 发布!