点击上方“逆向新手”,选择“关注公众号”
跟我一起学Python爬虫逆向!
声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢!
目标网站:
aHR0cHM6Ly93d3cudGFwZC5jbi9jbG91ZF9sb2dpbnMvbG9naW4=
抓包,输入错误账号密码,可以看到其中的encrypt_key、encrypt_iv、password、dsc_token共4个参数均被加密
图1
一个一个来,先全局搜索encrypt_key,点开第一个js文件,继续搜索encrypt_key,发现只有一处,同时可以明显看到是通过AES加密,我们先打上断点分析下加密逻辑
图2
可以看到这里的 t
即为我们输入的密码, o
是一个随机数经过MD5所得,下面的for循环又构造了一个对象t,传入了密码和o,还有AES加密的模式mode和填充padding,最后再将加密后的password_encode传入到id为password_input的Element对象的值中。同理的还有encrypt_iv和encrypt_key
图3
我们在Elements选项卡中搜索下password_input,可以看到它的name属性即为post传参的一个参数。至此,已经找到3个加密处
图4 回到Sources选项卡,通过将鼠标悬停于CryptoJS.AES.encrypt这个函数上,点击上面的函数,即可跳转到函数定义处,为一个aes开头的js文件。这里我们不需要分析它具体是怎么操作的,通过快速查看这个文件的顶部与底部,并搜索该文件中是否包含window、navigator等浏览器环境,发现该文件可以直接全部复制拿来使用。同时将图3的逻辑经过一定改写,运行代码如下: 图5 前面709行全部为aes开头的js文件复制的。这里出现报错,看报错跟pad填充有关,同时经测试,发现问题出在CryptoJS.pad.ZeroPadding这,通过全局搜索CryptoJS.pad.ZeroPadding,发现原来该对象通过另一个js文件定义的,直接全部复制下来,再次运行,加密成功: 图6 继续全局搜索最后一个参数dsc_token,可以看到第一个红框,其实在设置一个cookie键为dsc-token的值e,而e是经过第二个红框的函数生成。 图7 通过对比发现,cookie为dsc-token的值与post参数dsc_token的值相等,因此这里的e值即为dsc_token,故重新构造函数如下,成功获取4个加密参数,至此全部分析解密完毕。 图8 该网站详细代码,已上传本人GitHub,可点击左下角“ 各位加油— END —
点击这里给我写留言📝
或
后台点击“加入群聊”一起交流