本文只适用于初学者,只需要会打断点追踪就可以了。
前端js代码除了经常使用Base64编码和解码之外,MD5加密也是常用手段。
关于MD5加密,学计算机的都应该有了解。百度百科解释在此。
简介
MD5算法的原理可简要的叙述为:MD5码以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由4个32位分组组成,将这4个32位分组级联后将生成一个128位散列值。
在MD5算法中,首先需要对信息进行填充,这个数据按位(bit)补充,要求最终的位数对512求模的结果为448。也就是说数据补位后,其位数长度只差64位(bit)就是512的整数倍。
即便是这个数据的位数对512求模的结果正好是448也必须进行补位。
补位的实现过程:首先在数据后补一个1 bit; 接着在后面补上一堆0 bit, 直到整个数据的位数对512求模的结果正好为448。总之,至少补1位,而最多可能补512位。
js实现
观察某网站
请求链接只有一个,便于我们学习。
Form Data有很多参数,我们就来追踪salt吧,因为一眼看上去就是需要一定业务逻辑才能得到的。
全局搜索salt,只有1个js中存在
代码中浏览一下salt,在8935行设置断点。这里有个函数generateSaltSign,看上去除了产生salt,应该可以吧sign也一起解决了。
刷新页面,追踪进去,可以看到下面代码
看到嘛,4个动态参数的逻辑都有了
- ts:"" + (new Date).getTime()
- bv:md5(navigator.appVersion)。appVersion是常量,可以在控制台直接输出看一下。
- salt:ts+parseInt(10 * Math.random(), 10)
- sign:md5(“fanyideskweb” + e + salt + “n%A-rKaT5fb[Gy?;N5@Tj”) 。e是需要翻译的内容
在这4个参数中,有2个用到了md5加密函数。
继续追踪,下一步就能看到md5加密过程了。