仅供学习,切勿用于非法用途!
难度
非常低
网站(请自行base64解码)
aHR0cCUzQS8vd3d3LnBpZ2FpLm9yZy8=
抓包分析
按F12打开浏览器开发者工具,选到network,准备抓包工作。
输入账号密码,点击登录,分析数据包
找到登录发送的数据包index.php?a=login和里面的加密字段password_encrypt
找加密处
登录请求不是xhr类型,所以不能下xhr断点,我们可以通过查看元素绑定的监听事件来入手。
点击查看登录这个按钮的click监听事件的js代码,跳转到login这个函数。
大致阅读一下,找到比较可疑的地方
然后我们在
$('#password_encrypt').val( encrypt(psw) );
这一行打断点,重新登录看看,等待运行到断点处,发现encrypt(psw)就是生成了加密的地方,传入的psw就是原密码
扣js代码
**现在我们知道加密的过程先是把原密码传入encrypt()这个函数,然后就会返回加密结果,所以我们要先扣出encrypt(),步骤看动图。 **
加密函数encrypt
function encrypt( str) {
var encrypt = new JSEncrypt();
encrypt.setPublicKey( 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCYlII16dSwQErDgjIl8BzU4NEL2IzvyWiLNxie3mkpw6eseF/iUVb3bisAFH+lzgnrv/mBOKUMkbqtW2+8en/6r0hj6ctvGT+UOtg4P5LF/jxkbE+cA2fVJK2RaBzeEEbrKOvauVnGkEOvPVl1/NK4NgeN6aSPIK9ECfXcjlEOHwIDAQAB');
var encrypted = encrypt.encrypt( str );
return encrypted;
}
复制这个函数,新开一个浏览器窗口或者无痕模式,新建一个脚本,粘上代码运行看看,发现报错JSEncrypt is not defined,位置在第二行,说明抠出来的js还缺少JSEncrypt这个对象。
切换到实战网页,我们在encrypt()函数第二行下一个断点,把刚下的第一个断点取消,刷新网页重新登录,就会运行到第二个断点处,然后把鼠标放到JSEncrypt上面,就可以看到其实JSEncrypt就是t(t)
点击t(t)看这个函数怎么实现,发现是写在一个单独的jsencrypt.js的文件,遇到这种带有加密字眼且比较规范的文件名,这种文件多半都只写了加密的,所以可以直接把整个文件内容复制过去,省时省力。下拉看这个文件一共不到三千行代码,直接把整个jsencrypt.js文件的内容复制,放在抠出来的粘贴在申明encrypt()函数上面。
在新浏览器窗口运行扣出来的代码看看,控制台就打印出加密结果了。
仅供学习,切勿用于非法用途!
如果有不懂或者我讲解不详细的地方,欢迎留言交流。