淘宝登录JS加密算法
《反爬虫AST原理与还原混淆实战》书稿内容
声明:本教程从安全角度出发讲解,只为增加读者的安全知识,提升读者数据安全意识,以及对于病毒和钓鱼网站的防护能力。绝无其他任何目的与用途。
淘宝作为国内最大的网络零售商,对于用户信息安全的保护可谓固若金汤。本文将讲解淘宝在用户登录时如何将用户的个人信息加密以达到保护用户数据安全的目的。
我们在淘宝的登录页面输入自己的用户名和密码以登录的时候,会发现在NETWORK选项卡中有一个POST请求包。
我们向下翻滚以查看我们发送的数据,会发现它们已经面目全非,而且多出了许多额外的参数。部分参数如下,对于用户来讲,最关心的莫过于自己的密码,那我们的密码在哪里呢?是否是赤裸裸地传输而没有任何防护呢?显然不是,我们发现存在参数password2对我们的密码进行了加密,此时我们的密码是非明文传输的,即便被别人截获了数据包,他也不会看到我们的密码。
那我们接下来就分析一下,看看淘宝对我们的密码到底进行了多大强度的加密,是否很容易被别人拿到手后破解,请随笔者分析。
按下图的顺序依次点击和输入信息,我们可以定位到淘宝网站加密信息的JS脚本。
点击3后中间会弹出代码框,我们点击代码框左下角的“{}”符号格式化代码,让它能够以更利于我们查看的格式展示。然后搜索我们的关键词password2
我们可以发现password2的数值其实是t,而t有来源于8179行的rsaPassword,所以我们点击数字8179,让它变成黄色,这样我们就在rsaPassword下断点,等网站执行到这一行就会停下,便于我们分析。
接下来我们回到登录页面,点击登录,这样就进入了DEBUG模式,我们停在了断点位置。然后按F11,直到它进入rsaPassword这个函数,如下所示,我们发现它是典型的RSA加密,通过setPublic设置了公钥,之后进行了加密。
那我们现在就需要找到e的值,我们可以在e处下断点,按下F11进入,会发现它实际上是D函数。而且下边还存在setPublic和encrypt两个函数,这样一来我们的加密函数就都找到了。
然后我们按下F11,回到setPublic函数,查看右边的Scope,找到rsaModulus和rsaExponent复制下来。
我们将刚才找到的有关的加密JS代码都专门复制下来,大约500行左右,存储在本地的JS文件里边查看,如下所示部分:
......
......
rsaPassword = function(t) {
var e = new D;
return e.setPublic("d3bcef1f00424f3261c89323fa8cdfa12bbac400d9fe8bb627e8d27a44bd5d59dce559135d678a8143beb5b8d7056c4e1f89c4e1f152470625b7b41944a97f02da6f605a49a93ec6eb9cbaf2e7ac2b26a354ce69eb265953d2c29e395d6d8c1cdb688978551aa0f7521f290035fad381178da0bea8f9e6adce39020f513133fb", "10001"),
e.encrypt(t)
}
function getPwd(pwd) {
return rsaPassword(pwd);
}
然后就可以通过Python脚本来执行这个JS脚本从而获取我们的加密参数,我们来验证一下:
import execjs
def getpwd(password):
with open('password2.js', 'r', encoding='utf8')as f:
content = f.read()
jsdata = execjs.compile(content)
pw = jsdata.call('getPwd', password)
print('pw:', pw)
return pw
if __name__ == '__main__':
getpwd('123456')
运行结果如下:
至此,淘宝登录的JS密码防护措施已经分析完毕。希望各位读者能够得到启迪。