快速定位加密参数逻辑,快速扣取 JS,使用 JS 文件在 Python 中复现逻辑。
通过点击登录按钮,定位到如下数据请求。
可以看到其请求方式是 GET,相关参数都在 URL 中进行了加密。
进行简单的定位之后,找到加密逻辑所在位置。
堆栈里面找到如下函数名 pwdFormLogin,点击进入代码逻辑处。
在代码段中找到了加密位置,其代码如下所示:
rsaPwd = rsa(passwordVal);JS 代码扣取
进入到 rsa() 函数内部,找到如下代码:
//密码加密 var rsa = function (arg) { setMaxDigits(130); var PublicExponent = "10001"; var modulus = "be44aec4d73408f6b60e6fe9e3dc55d0e1dc53a1e171e071b547e2e8e0b7da01c56e8c9bcf0521568eb111adccef4e40124b76e33e7ad75607c227af8f8e0b759c30ef283be8ab17a84b19a051df5f94c07e6e7be5f77866376322aac944f45f3ab532bb6efc70c1efa524d821d16cafb580c5a901f0defddea3692a4e68e6cd"; var key = new RSAKeyPair(PublicExponent, "", modulus); return encryptedString(key, arg); };
打开 JS 工具箱,复制本段代码,然后进行补齐。上述代码仅包含 rsa 部分,RSAKeyPair 对象所在的代码不存在,需要补齐。
优先扣取 rsa 函数所在代码文件,可以假设一个网页不断进行测试,缺少哪个函数,就扣取对应 JS 文件,最终该案例得到如下结果。
-
RSA.js 文件包含核心加密逻辑
-
BigInt.js 文件包含数字处理函数,例如 setMaxDigits(130) 就在其中;
-
Barrett.js 文件包含了 RSAKeyPair 调用的部分文件,例如 BarrettMu。
-
将上述所有内容组合成一个独立的 JS 文件,这里我们将该文件存放到 gitcode 中,大家可以进行获取。
登录加密逻辑.js
所有的 JS 都在本地整理完毕,后续就可以通过 Python 去调用该 JS 实现解密逻辑。
import execjs
js_file = ""with open('当乐网登录JS加密.js','r') as f: js_file = f.read()
js_run = execjs.compile(js_file)rsa_text = js_run.call('rsa','123456')print(rsa_text)
运行代码输出如下结果,本地与目标站点生成一致,问题解决。
总结本次案例为大家演示的是全文扣取 JS 加密代码,并在本地构建单一 JS 文件,由于加密逻辑比较简单,所以大家注意实操的流程,可以将注意力放在定位 JS 代码位置。



