javascript逆向入门级别实战--某小网站登录密码加密分析

仅供学习,切勿用于非法用途!

难度

非常低

网站(请自行base64解码)

aHR0cCUzQS8vd3d3LnBpZ2FpLm9yZy8=

抓包分析

按F12打开浏览器开发者工具,选到network,准备抓包工作。

javascript逆向入门级别实战--某小网站登录密码加密分析_第1张图片

输入账号密码,点击登录,分析数据包
找到登录发送的数据包index.php?a=login和里面的加密字段password_encrypt

javascript逆向入门级别实战--某小网站登录密码加密分析_第2张图片

javascript逆向入门级别实战--某小网站登录密码加密分析_第3张图片

找加密处

登录请求不是xhr类型,所以不能下xhr断点,我们可以通过查看元素绑定的监听事件来入手。

javascript逆向入门级别实战--某小网站登录密码加密分析_第4张图片

点击查看登录这个按钮的click监听事件的js代码,跳转到login这个函数。
大致阅读一下,找到比较可疑的地方

javascript逆向入门级别实战--某小网站登录密码加密分析_第5张图片

然后我们在

$('#password_encrypt').val( encrypt(psw) );

这一行打断点,重新登录看看,等待运行到断点处,发现encrypt(psw)就是生成了加密的地方,传入的psw就是原密码
javascript逆向入门级别实战--某小网站登录密码加密分析_第6张图片
javascript逆向入门级别实战--某小网站登录密码加密分析_第7张图片

扣js代码

**现在我们知道加密的过程先是把原密码传入encrypt()这个函数,然后就会返回加密结果,所以我们要先扣出encrypt(),步骤看动图。 **
javascript逆向入门级别实战--某小网站登录密码加密分析_第8张图片
加密函数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这个对象。
javascript逆向入门级别实战--某小网站登录密码加密分析_第9张图片

切换到实战网页,我们在encrypt()函数第二行下一个断点,把刚下的第一个断点取消,刷新网页重新登录,就会运行到第二个断点处,然后把鼠标放到JSEncrypt上面,就可以看到其实JSEncrypt就是t(t)
javascript逆向入门级别实战--某小网站登录密码加密分析_第10张图片
点击t(t)看这个函数怎么实现,发现是写在一个单独的jsencrypt.js的文件,遇到这种带有加密字眼且比较规范的文件名,这种文件多半都只写了加密的,所以可以直接把整个文件内容复制过去,省时省力。下拉看这个文件一共不到三千行代码,直接把整个jsencrypt.js文件的内容复制,放在抠出来的粘贴在申明encrypt()函数上面。
javascript逆向入门级别实战--某小网站登录密码加密分析_第11张图片
在新浏览器窗口运行扣出来的代码看看,控制台就打印出加密结果了。
javascript逆向入门级别实战--某小网站登录密码加密分析_第12张图片

仅供学习,切勿用于非法用途!
如果有不懂或者我讲解不详细的地方,欢迎留言交流。

你可能感兴趣的:(javascript,爬虫)