Python爬虫进阶之JS逆向混淆加密和AES加密的破解

399 阅读2分钟

圣诞节到了, 这不,我来送 "礼物" 了,X江酒店登录页面的参数加密破解。地址如下:

aHR0cHM6Ly9ob3RlbC5iZXN0d2Vob3RlbC5jb20vTmV3TG9naW4v

浏览器输入上方解密后的地址,F12 打开浏览器开发者工具,随意输入一个账号和密码。这里密码输入我一般用的 123456,抓包之后如下图:

抓包

有两个加密的参数 black_box 和 password.

这里提供两种定位加密代码的方法: 1、search 栏搜索上述两个加密参数; 2、这是个 xhr 的请求,可以通过下 xhr 断点来定位

通过 “black_box” 搜索,结果只有一个 JS 文件。

点击左下角的大括号美化 JS,定位到加密位置。打上断点

重发请求,请求会在断点处停下来. 这个 fmOpt.getinfo() 函数就是我们要找的 black_box,断点停下后,可以点进去

看到这些奇奇怪怪的变量,而且所有变量名看起来都长的差不多。你心里肯定在想,这是什么鬼。别慌!这就是 JS 混淆后的代码。直接拉到最上面,可以看到有很多变量的定义

所以这部分代码,我们是需要扣出来的。如果你觉得混淆的代码看起来非常的难受,你可以选择写个脚本用正则或者 replace() 来做替换,比如你可以在 Conlose 输出查看它的庐山真面目

当然,在这里不替换也可以执行。无论你选择了何种方法,前提条件都需要找到完整代码,不能有遗漏,否则执行不了。

我们主要扣取的代码是 oO00oo 对象中的 OOQo0o 函数。

所以里面定义变量或对象都需要扣取。扣完之后,通过调试来判断还缺少哪些变量,这里通过浏览器来进行调试,点击 sources,选择 +New snippet,粘贴上我们刚扣取的代码

文件名称可以随意命名,之后右键选择运行

运行完之后在下方 conlose 进行调试!一般都要经过反复调试添加代码后,才能正常运行。这里直接出结果了。

black_box 参数完成了,接下来是 password ! 重发请求,断点继续停在了 black_box 加密处!

可以看到,在对 black_box 加密之前,password 就已经完成加密了。所以我们根据调用栈往前找

前面两步就能找到 password 的加密代码,看到这个 encryptAES 有没有很熟悉,没错就是 AES 加密!遇到这种加密都不用扣代码...

好了,一切都解开了!密钥 n,偏移量 a,我们直接用 crypto-js 来执行!

完美!和抓包的结果一致,可以睡觉了..下次再见~

欢迎关注公众号 [Python编程与实战] 了解更多!